VC中自动改变控件位置和大小的对话框类Word文件下载.docx

上传人:b****1 文档编号:3010211 上传时间:2023-05-01 格式:DOCX 页数:10 大小:41.86KB
下载 相关 举报
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第1页
第1页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第2页
第2页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第3页
第3页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第4页
第4页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第5页
第5页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第6页
第6页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第7页
第7页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第8页
第8页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第9页
第9页 / 共10页
VC中自动改变控件位置和大小的对话框类Word文件下载.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VC中自动改变控件位置和大小的对话框类Word文件下载.docx

《VC中自动改变控件位置和大小的对话框类Word文件下载.docx》由会员分享,可在线阅读,更多相关《VC中自动改变控件位置和大小的对话框类Word文件下载.docx(10页珍藏版)》请在冰点文库上搜索。

VC中自动改变控件位置和大小的对话框类Word文件下载.docx

控件在X方向和Y方向同时移动

ELASTICX, 

控件在X方向(宽度)改变大小

ELASTICY, 

控件在Y方向改(高度)改变大小

ELASTICXY 

控件在X方向和Y方向同时改变大小

};

iPercent表示改变值占对话框改变值的百分比。

例如,一个控件的iPercent值为100,iFlag值为MOVEX,那么当对话框的宽度改变100个单位的时候,这个控件就在X方向移动100个单位;

又如,一个控件的iPercent值为100,iFlag值为ELASTICXY,那么当对话框的宽度和高度分别改变100个单位的时候,控件的高度和宽度也相应的改变100个单位。

下面是设置控件信息的函数:

BOOL 

SetControlProperty(PDLGCTLINFO 

lp, 

nElements);

使用起来非常简单,在对话框的OnInitDialog()函数里面添加类似下面的代码就行了:

控件信息数组

static 

DLGCTLINFO 

dcMenuGroup[] 

{IDOK, 

MOVEX, 

100},

{IDCANCEL, 

{IDC_BUTTON1, 

50},

{IDC_EDIT1, 

{IDC_EDIT2, 

{IDC_EDIT3, 

{IDC_EDIT4, 

{IDC_EDIT5, 

{IDC_EDIT6, 

设置控件信息

SetControlProperty(dcMenuGroup, 

sizeof(dcMenuGroup)/sizeof(DLGCTLINFO));

下面就是使用上面这段代码的对话框改变大小前后的效果图:

对两张截图的比较我们可以很容易的理解上面那段代码。

我还提供了一个函数:

void 

ShowSizeIcon(BOOL 

bShow 

TRUE);

来设置是否显示对话框右下角表示可以改变大小的图标。

这个图标是从系统中读取的,我上面的截图是Windows2000下的,在WindowsXP中就会自动变成XP风格的。

好了,闲话不多说了,下面贴出该对话框类ClxDialog的源代码,里面有详细的注释:

lxDialog.h文件:

//

自动改变控件位置和大小的对话框类

文件名:

lxDialog.h

作者:

StarLee(coolstarlee@)

class 

ClxDialog 

:

public 

CDialog

public:

ClxDialog(UINT 

nID, 

CWnd* 

pParent 

NULL);

0,

MOVEY,

MOVEXY,

ELASTICX,

ELASTICY,

ELASTICXY

是否在对话框右下角显示表示可改变大小的图标

protected:

virtual 

OnInitDialog();

afx_msg 

OnSize(UINT 

nType, 

cx, 

cy);

OnSizing(UINT 

nSide, 

LPRECT 

lpRect);

DECLARE_MESSAGE_MAP()

private:

m_iClientWidth;

对话框client区域的宽度

m_iClientHeight;

对话框client区域的高度

m_iMinWidth;

对话框的最小宽度

m_iMinHeight;

对话框的最小高度

PDLGCTLINFO 

m_pControlArray;

控件信息数组指针

m_iControlNumber;

设置控件信息的控件个数

m_bShowSizeIcon;

是否显示表示可改变大小的图标

CStatic 

m_wndSizeIcon;

放图标的静态控件

保存图标的bitmap

CBitmap 

m_bmpSizeIcon;

BITMAP 

m_bitmap;

lxDialog.cpp文件:

lxDialog.cpp

#include 

"

stdafx.h"

lxDialog.h"

表示可改变大小的图标ID

#ifndef 

OBM_SIZE

#define 

OBM_SIZE 

32766

#endif

ClxDialog:

/*=NULL*/)

CDialog(nID, 

pParent)

 

m_iClientWidth(0)

m_iClientHeight(0)

m_iMinWidth(0)

m_iMinHeight(0)

m_pControlArray(NULL)

m_iControlNumber(0)

m_bShowSizeIcon(TRUE)

{}

BEGIN_MESSAGE_MAP(ClxDialog, 

CDialog)

ON_WM_SIZE()

ON_WM_SIZING()

END_MESSAGE_MAP()

OnInitDialog()

CDialog:

设置对话框为可变大小的

ModifyStyle(0, 

WS_SIZEBOX);

以对话框的初始大小作为对话框的宽度和高度的最小值

CRect 

rectDlg;

GetWindowRect(rectDlg);

m_iMinWidth 

rectDlg.Width();

m_iMinHeight 

rectDlg.Height();

得到对话框client区域的大小

rectClient;

GetClientRect(rectClient);

m_iClientWidth 

rectClient.Width();

m_iClientHeight 

rectClient.Height();

Load图标

m_bmpSizeIcon.LoadOEMBitmap(OBM_SIZE);

m_bmpSizeIcon.GetBitmap(&

m_bitmap);

创建显示图标的静态控件并放在对话框右下角

m_wndSizeIcon.Create(NULL, 

WS_CHILD 

WS_VISIBLE 

SS_BITMAP, 

CRect(0, 

m_bitmap.bmWidth, 

m_bitmap.bmHeight), 

this, 

0);

m_wndSizeIcon.SetBitmap(m_bmpSizeIcon);

m_wndSizeIcon.MoveWindow(m_iClientWidth 

m_bitmap.bmHeight, 

m_bitmap.bmHeight);

显示图标

m_wndSizeIcon.ShowWindow(m_bShowSizeIcon);

return 

TRUE;

}

cy) 

OnSize(nType, 

对话框宽度和高度的增量 

iIncrementX 

cx 

iIncrementY 

cy 

最小化时增量为0

if 

(nType 

== 

SIZE_MINIMIZED)

0;

for 

(int 

<

i++)

CWnd 

*pWndCtrl 

NULL;

iId 

m_pControlArray[i].iId;

iFlag 

m_pControlArray[i].iFlag;

iPercent 

m_pControlArray[i].iPercent;

无效值

((iPercent 

0) 

|| 

(iPercent 

>

100))

continue;

得到控件指针

pWndCtrl 

GetDlgItem(iId);

((NULL 

!

pWndCtrl) 

&

IsWindow(pWndCtrl->

GetSafeHwnd()))

rectCtrl;

pWndCtrl->

GetWindowRect(rectCtrl);

ScreenToClient(rectCtrl);

iLeft 

rectCtrl.left;

iTop 

rectCtrl.top;

iWidth 

rectCtrl.Width();

iHeight 

rectCtrl.Height();

switch 

(iFlag)

case 

MOVEX:

X方向移动

+= 

(iIncrementX 

100);

break;

MOVEY:

Y方向移动

(iIncrementY 

MOVEXY:

X方向和Y方向同时移动

ELASTICX:

X方向改变大小

ELASTICY:

Y方向改变大小

ELASTICXY:

X方向和Y方向同时改变大小

default:

;

把控件移动到新位置

MoveWindow(iLeft, 

iTop, 

iWidth, 

iHeight);

把图标移动到对话框右下角

(IsWindow(m_wndSizeIcon.GetSafeHwnd()))

m_wndSizeIcon.MoveWindow(cx 

SIZE_MAXIMIZED)

m_wndSizeIcon.ShowWindow(FALSE);

else

m_wndSizeIcon.ShowWindow(TRUE);

Invalidate();

记录对话框client区域的大小

cx;

cy;

lpRect)

OnSizing(nSide, 

对话框不能小于初始大小

lpRect->

right 

left;

bottom 

top;

(iWidth 

m_iMinWidth)

left 

if(iHeight 

m_iMinHeight)

top 

nElements)

设置控件数组信息

(NULL 

lp)

FALSE;

(nElements 

0)

m_pControlArray 

lp;

m_iControlNumber 

nElements;

/*=TRUE*/)

m_bShowSizeIcon 

bShow;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2