预览加载中,请您耐心等待几秒...
1/7
2/7
3/7
4/7
5/7
6/7
7/7

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

VC中自动改变控件位置和大小的对话框类 在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。如果控件比较少,那可以在对话框的OnSize()事件里面添加代码,通过计算来调整各个控件的位置和大小;但是,如果对话框上的控件比较多的话,那这将是一件非常痛苦的事情!要是程序中又有很多可以改变大小的对话框,那一个一个的OnSize()写下来,那会使程序员崩溃的! 为了解决这个问题,我写了一个自动改变控件位置和大小的对话框类ClxDialog。从这个类继承的对话框类,只要在OnInitDialog()里对控件做一些简单的设置,对话框上的控件就会随着对话框大小的改变而改变自己的位置和大小。 为了保存控件信息,我定义了一个结构: typedefstruct_dlgControlTag { intiId;//控件ID intiFlag;//标志,表示怎样改变控件的位置或者大小 intiPercent;//改变值占对话框改变值的百分比 }DLGCTLINFO,*PDLGCTLINFO; 这里要对结构中的iFlag和iPercent进行一些解释。其中iFlag是下面的枚举值: enum { MOVEX=0,//控件在X方向(左右)移动 MOVEY,//控件在Y方向(上下)移动 MOVEXY,//控件在X方向和Y方向同时移动 ELASTICX,//控件在X方向(宽度)改变大小 ELASTICY,//控件在Y方向改(高度)改变大小 ELASTICXY//控件在X方向和Y方向同时改变大小 }; iPercent表示改变值占对话框改变值的百分比。例如,一个控件的iPercent值为100,iFlag值为MOVEX,那么当对话框的宽度改变100个单位的时候,这个控件就在X方向移动100个单位;又如,一个控件的iPercent值为100,iFlag值为ELASTICXY,那么当对话框的宽度和高度分别改变100个单位的时候,控件的高度和宽度也相应的改变100个单位。 BOOLSetControlProperty(PDLGCTLINFOlp,intnElements); 使用起来非常简单,在对话框的OnInitDialog()函数里面添加类似下面的代码就行了: //控件信息数组 staticDLGCTLINFOdcMenuGroup[]= { {IDOK,MOVEX,100}, {IDCANCEL,MOVEX,100}, {IDC_BUTTON1,MOVEX,50}, {IDC_BUTTON1,MOVEY,100}, {IDC_EDIT1,ELASTICX,100}, {IDC_EDIT2,ELASTICX,50}, {IDC_EDIT3,ELASTICX,50}, {IDC_EDIT3,MOVEX,50}, {IDC_EDIT4,ELASTICY,100}, {IDC_EDIT5,ELASTICX,100}, {IDC_EDIT5,ELASTICY,50}, {IDC_EDIT6,ELASTICX,100}, {IDC_EDIT6,ELASTICY,50}, {IDC_EDIT6,MOVEY,50}, }; //设置控件信息 SetControlProperty(dcMenuGroup,sizeof(dcMenuGroup)/sizeof(DLGCTLINFO)); 下面就是使用上面这段代码的对话框改变大小前后的效果图: 对两张截图的比较我们可以很容易的理解上面那段代码。 我还提供了一个函数: voidShowSizeIcon(BOOLbShow=TRUE); 来设置是否显示对话框右下角表示可以改变大小的图标。这个图标是从系统中读取的,我上面的截图是Windows2000下的,在WindowsXP中就会自动变成XP风格的。 好了,闲话不多说了,下面贴出该对话框类ClxDialog的源代码,里面有详细的注释: lxDialog.h文件: ///////////////////////////////////////////////////////////////////////////////////// //自动改变控件位置和大小的对话框类 //文件名:lxDialog.h //作者:StarLee(coolstarlee@sohu.com) ///////////////////////////////////////////////////////////////////////////////////// classClxDialog:publicCDialog { public: ClxDialog(UINTnID,CWnd*pPa