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

上传人:cn****1 文档编号:548033261 上传时间:2023-03-09 格式:DOC 页数:7 大小:31.50KB
返回 下载 相关 举报
VC中自动改变控件位置和大小的对话框类.doc_第1页
第1页 / 共7页
VC中自动改变控件位置和大小的对话框类.doc_第2页
第2页 / 共7页
VC中自动改变控件位置和大小的对话框类.doc_第3页
第3页 / 共7页
VC中自动改变控件位置和大小的对话框类.doc_第4页
第4页 / 共7页
VC中自动改变控件位置和大小的对话框类.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

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

1、VC中自动改变控件位置和大小的对话框类在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。如果控件比较少,那可以在对话框的OnSize()事件里面添加代码,通过计算来调整各个控件的位置和大小;但是,如果对话框上的控件比较多的话,那这将是一件非常痛苦的事情!要是程序中又有很多可以改变大小的对话框,那一个一个的OnSize()写下来,那会使程序员崩溃的!为了解决这个问题,我写了一个自动改变控件位置和大小的对话框类ClxDialog。从这个类继承的对话框类,只要在OnInitDialog()里对控件做一些简单的设置,

2、对话框上的控件就会随着对话框大小的改变而改变自己的位置和大小。为了保存控件信息,我定义了一个结构:typedef struct _dlgControlTagint iId; / 控件IDint iFlag; / 标志,表示怎样改变控件的位置或者大小int iPercent; / 改变值占对话框改变值的百分比 DLGCTLINFO, *PDLGCTLINFO;这里要对结构中的iFlag和iPercent进行一些解释。其中iFlag是下面的枚举值:enumMOVEX = 0, / 控件在X方向(左右)移动MOVEY, / 控件在Y方向(上下)移动MOVEXY, / 控件在X方向和Y方向同时移动EL

3、ASTICX, / 控件在X方向(宽度)改变大小ELASTICY, / 控件在Y方向改(高度)改变大小ELASTICXY / 控件在X方向和Y方向同时改变大小;iPercent表示改变值占对话框改变值的百分比。例如,一个控件的iPercent值为100,iFlag值为MOVEX,那么当对话框的宽度改变100个单位的时候,这个控件就在X方向移动100个单位;又如,一个控件的iPercent值为100,iFlag值为ELASTICXY,那么当对话框的宽度和高度分别改变100个单位的时候,控件的高度和宽度也相应的改变100个单位。BOOL SetControlProperty(PDLGCTLINFO

4、 lp, int nElements);使用起来非常简单,在对话框的OnInitDialog()函数里面添加类似下面的代码就行了:/ 控件信息数组static DLGCTLINFO dcMenuGroup =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, ELASTI

5、CY, 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);下面就是使用上面这段代码的对话框改变大小前后的效果图: 对两张截图的比较我们可以很容易的理解上面那段代码。我还提供了一个函数:void ShowSizeIcon(BOOL bShow =

6、 TRUE); 来设置是否显示对话框右下角表示可以改变大小的图标。这个图标是从系统中读取的,我上面的截图是Windows2000下的,在WindowsXP中就会自动变成XP风格的。好了,闲话不多说了,下面贴出该对话框类ClxDialog的源代码,里面有详细的注释:lxDialog.h文件:/ 自动改变控件位置和大小的对话框类/ 文件名:lxDialog.h/ 作者:StarLee()/class ClxDialog : public CDialogpublic:ClxDialog(UINT nID, CWnd* pParent = NULL);typedef struct _dlgContro

7、lTagint iId;int iFlag;int iPercent; DLGCTLINFO, *PDLGCTLINFO;enumMOVEX = 0,MOVEY,MOVEXY,ELASTICX,ELASTICY,ELASTICXY;/ 设置控件信息BOOL SetControlProperty(PDLGCTLINFO lp, int nElements);/ 是否在对话框右下角显示表示可改变大小的图标void ShowSizeIcon(BOOL bShow = TRUE);protected:virtual BOOL OnInitDialog();afx_msg void OnSize(UIN

8、T nType, int cx, int cy);afx_msg void OnSizing(UINT nSide, LPRECT lpRect);DECLARE_MESSAGE_MAP()private:int m_iClientWidth; / 对话框client区域的宽度int m_iClientHeight; / 对话框client区域的高度int m_iMinWidth; / 对话框的最小宽度int m_iMinHeight; / 对话框的最小高度PDLGCTLINFO m_pControlArray; / 控件信息数组指针int m_iControlNumber; / 设置控件信息

9、的控件个数BOOL m_bShowSizeIcon; / 是否显示表示可改变大小的图标CStatic m_wndSizeIcon; / 放图标的静态控件/ 保存图标的bitmapCBitmap m_bmpSizeIcon;BITMAP m_bitmap;lxDialog.cpp文件:/ 自动改变控件位置和大小的对话框类/ 文件名:lxDialog.cpp/ 作者:StarLee()/#include stdafx.h#include lxDialog.h/ 表示可改变大小的图标ID#ifndef OBM_SIZE#define OBM_SIZE 32766#endifClxDialog:Clx

10、Dialog(UINT nID, CWnd* pParent /*=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()BOOL ClxDialog:On

11、InitDialog()CDialog:OnInitDialog();/ 设置对话框为可变大小的ModifyStyle(0, WS_SIZEBOX);/ 以对话框的初始大小作为对话框的宽度和高度的最小值CRect rectDlg;GetWindowRect(rectDlg);m_iMinWidth = rectDlg.Width();m_iMinHeight = rectDlg.Height();/ 得到对话框client区域的大小CRect rectClient;GetClientRect(rectClient);m_iClientWidth = rectClient.Width();m_i

12、ClientHeight = 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, 0, m_bitmap.bmWidth, m_bitmap.bmHeight), this, 0);m_wndSizeIcon.SetBitmap(m_bmpSizeIcon);m_

13、wndSizeIcon.MoveWindow(m_iClientWidth - m_bitmap.bmWidth, m_iClientHeight - m_bitmap.bmHeight, m_bitmap.bmWidth, m_bitmap.bmHeight);/ 显示图标m_wndSizeIcon.ShowWindow(m_bShowSizeIcon);return TRUE;void ClxDialog:OnSize(UINT nType, int cx, int cy)CDialog:OnSize(nType, cx, cy);/ 对话框宽度和高度的增量int iIncrementX = cx - m_iClientWidth;int iIncrementY = cy - m_iClientHeight;/ 最小化时增量为0if (nType = SIZE_MINIMIZED)iIncrementX = iIncrementY = 0;for (int i = 0; i m_iControlNumber; i+)CWnd *pWndCtrl =

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号