《VC中自动改变控件位置和大小的对话框类》使用方法.docx
- 文档编号:3196781
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:10
- 大小:16.86KB
《VC中自动改变控件位置和大小的对话框类》使用方法.docx
《《VC中自动改变控件位置和大小的对话框类》使用方法.docx》由会员分享,可在线阅读,更多相关《《VC中自动改变控件位置和大小的对话框类》使用方法.docx(10页珍藏版)》请在冰点文库上搜索。
《VC中自动改变控件位置和大小的对话框类》使用方法
《VC中自动改变控件位置和大小的对话框类》使用方法
在网上有介绍文章,开始不知道如何使用
我在生成的非模态对话框里研究了一天已经搞定了
步骤:
1,在非模态对话框类的头文件(.h)顶部加上#include"lxDialog.h",然后把非模态对话框类的基类改成ClxDialog,也就是在头文件里classC******:
publicCDialog改成:
classC******:
publicClxDialog
在非模态对话框类的.cpp函数里,把构造函数
C*****:
:
C*****(CWnd*pParent):
CDialog(C*****:
:
IDD,pParent)
改成:
C*****:
:
C*****(CWnd*pParent):
ClxDialog(C*****:
:
IDD,pParent)
2,用类向导给非模态对话框添加一个OnInitDialog()函数;也就是在双击类向导->MessageMaps->选非模态对话框类;Messages选WM_INITDIALOG双击它,这样在你的非模态对话框的cpp文件里就生成了ON_WM_INITDIALOG和OnInitDialog()函数;
3,在这个OnInitDialog函数里添加代码:
ClxDialog:
:
OnInitDialog();
ClxDialog:
:
ShowSizeIcon(TRUE);//显示可以调整大小的图标
staticDLGCTLINFOdcMenuGroup[]=
{
{IDCANCEL,MOVEX,100},
{IDCANCEL,MOVEY,100},
{IDC_EDIT_RECDSPDLG,ELASTICX,100},
{IDC_EDIT_RECDSPDLG,ELASTICY,100},
};
SetControlProperty(dcMenuGroup,sizeof(dcMenuGroup)/sizeof(DLGCTLINFO));
returnTRUE;
//IDCANCEL是关闭按钮的ID,IDOK按钮我去掉了所以没加,IDC_EDIT_RECDSPDLG是一个EDIT控件
//想让哪个控件调整,就照葫芦画瓢在组里加上
4,再用类向导添加OnSize()函数,也就是双击ON_WM_SIZE,这样就增加了
voidC******:
:
OnSize(UINTnType,intcx,intcy)这个函数,然后在这个函数里添加代码:
ClxDialog:
:
OnSize(nType,cx,cy);
5,别忘了在资源里右键你的非模态对话框,把属性栏Styles里Border选成Resizing。
这样就搞定了
附上网上找的那个类:
《VC中自动改变控件位置和大小的对话框类》
lxDialog.h文件:
/////////////////////////////////////////////////////////////////////////////////////
//自动改变控件位置和大小的对话框类
//文件名:
lxDialog.h
/////////////////////////////////////////////////////////////////////////////////////
classClxDialog:
publicCDialog
{
public:
ClxDialog(UINTnID,CWnd*pParent=NULL);
typedefstruct_dlgControlTag
{
intiId;
intiFlag;
intiPercent;
}DLGCTLINFO,*PDLGCTLINFO;
enum
{
MOVEX=0,
MOVEY,
MOVEXY,
ELASTICX,
ELASTICY,
ELASTICXY
};
//设置控件信息
BOOLSetControlProperty(PDLGCTLINFOlp,intnElements);
//是否在对话框右下角显示表示可改变大小的图标
voidShowSizeIcon(BOOLbShow=TRUE);
protected:
virtualBOOLOnInitDialog();
afx_msgvoidOnSize(UINTnType,intcx,intcy);
afx_msgvoidOnSizing(UINTnSide,LPRECTlpRect);
DECLARE_MESSAGE_MAP()
private:
intm_iClientWidth;//对话框client区域的宽度
intm_iClientHeight;//对话框client区域的高度
intm_iMinWidth;//对话框的最小宽度
intm_iMinHeight;//对话框的最小高度
PDLGCTLINFOm_pControlArray;//控件信息数组指针
intm_iControlNumber;//设置控件信息的控件个数
BOOLm_bShowSizeIcon;//是否显示表示可改变大小的图标
CStaticm_wndSizeIcon;//放图标的静态控件
//保存图标的bitmap
CBitmapm_bmpSizeIcon;
BITMAPm_bitmap;
};
lxDialog.cpp文件:
//////////////////////////////////////////////////////////////////////
//自动改变控件位置和大小的对话框类
//文件名:
lxDialog.cpp
//////////////////////////////////////////////////////////////////////
#include"stdafx.h"
#include"lxDialog.h"
//表示可改变大小的图标ID
#ifndefOBM_SIZE
#defineOBM_SIZE32766
#endif
ClxDialog:
:
ClxDialog(UINTnID,CWnd*pParent)
:
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()
BOOLClxDialog:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//设置对话框为可变大小的
ModifyStyle(0,WS_SIZEBOX);
//以对话框的初始大小作为对话框的宽度和高度的最小值
CRectrectDlg;
GetWindowRect(rectDlg);
m_iMinWidth=rectDlg.Width();
m_iMinHeight=rectDlg.Height();
//得到对话框client区域的大小
CRectrectClient;
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,0,m_bitmap.bmWidth,m_bitmap.bmHeight),this,0);
m_wndSizeIcon.SetBitmap(m_bmpSizeIcon);
m_wndSizeIcon.MoveWindow(m_iClientWidth-m_bitmap.bmWidth,m_iClientHeight-m_bitmap.bmHeight,m_bitmap.bmWidth,m_bitmap.bmHeight);
//显示图标
m_wndSizeIcon.ShowWindow(m_bShowSizeIcon);
returnTRUE;
}
voidClxDialog:
:
OnSize(UINTnType,intcx,intcy)
{
CDialog:
:
OnSize(nType,cx,cy);
//对话框宽度和高度的增量
intiIncrementX=cx-m_iClientWidth;
intiIncrementY=cy-m_iClientHeight;
//最小化时增量为0
if(nType==SIZE_MINIMIZED)
{
iIncrementX=iIncrementY=0;
}
for(inti=0;i { CWnd*pWndCtrl=NULL; intiId=m_pControlArray[i].iId; intiFlag=m_pControlArray[i].iFlag; intiPercent=m_pControlArray[i].iPercent; //无效值 if((iPercent<0)||(iPercent>100)) continue; //得到控件指针 pWndCtrl=GetDlgItem(iId); if((NULL! =pWndCtrl)&&IsWindow(pWndCtrl->GetSafeHwnd())) { CRectrectCtrl; pWndCtrl->GetWindowRect(rectCtrl); ScreenToClient(rectCtrl); intiLeft=rectCtrl.left; intiTop=rectCtrl.top; intiWidth=rectCtrl.Width(); intiHeight=rectCtrl.Height(); switch(iFlag) { caseMOVEX: //X方向移动 iLeft+=(iIncrementX*iPercent/100); break; caseMOVEY: //Y方向移动 iTop+=(iIncrementY*iPercent/100); break; caseMOVEXY: //X方向和Y方向同时移动 iLeft+=(iIncrementX*iPercent/100); iTop+=(iIncrementY*iPercent/100); break; caseELASTICX: //X方向改变大小 iWidth+=(iIncrementX*iPercent/100); break; caseELASTICY: //Y方向改变大小 iHeight+=(iIncrementY*iPercent/100); break; caseELASTICXY: //X方向和Y方向同时改变大小 iWidth+=(iIncrementX*iPercent/100); iHeight+=(iIncrementY*iPercent/100); break; default: ; } //把控件移动到新位置 pWndCtrl->MoveWindow(iLeft,iTop,iWidth,iHeight); } } //把图标移动到对话框右下角 if(IsWindow(m_wndSizeIcon.GetSafeHwnd())) m_wndSizeIcon.MoveWindow(cx-m_bitmap.bmWidth,cy-m_bitmap.bmHeight,m_bitmap.bmWidth,m_bitmap.bmHeight); //记录对话框client区域的大小 if(nType! =SIZE_MINIMIZED) { m_iClientWidth=cx; m_iClientHeight=cy; } } voidClxDialog: : OnSizing(UINTnSide,LPRECTlpRect) { CDialog: : OnSizing(nSide,lpRect); //对话框不能小于初始大小 intiWidth=lpRect->right-lpRect->left; intiHeight=lpRect->bottom-lpRect->top; if(iWidth<=m_iMinWidth) lpRect->right=lpRect->left+m_iMinWidth; if(iHeight<=m_iMinHeight) lpRect->bottom=lpRect->top+m_iMinHeight; } BOOLClxDialog: : SetControlProperty(PDLGCTLINFOlp,intnElements) { //设置控件数组信息 if(NULL==lp) returnFALSE; if(nElements<=0) returnFALSE; m_pControlArray=lp; m_iControlNumber=nElements; returnTRUE; } voidClxDialog: : ShowSizeIcon(BOOLbShow) { m_bShowSizeIcon=bShow; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC中自动改变控件位置和大小的对话框类 VC 自动 改变 控件 位置 大小 对话框 使用方法