当前位置:文档之家› MFC中EasySize类-----改变窗口中各个控件的大小

MFC中EasySize类-----改变窗口中各个控件的大小

步骤一
把.h文件复制到文件里里
a将#include EasySize.h加载入stdafx.h
b或者将#include "EasySize.h"加载入TestCurveDlg.h中,即直接放入需要使用的窗口文件实际应用时,采用b方式,否则会出现编译错误
步骤二
将DECLARE_EASYSIZE添加到任何一处类声明中(TestCurveDlg.h)
class CTestCurveDlg : public CDialog
{
DECLARE_EASYSIZE
步骤三
创建OnInitDialog(如果程序中不存在的话,不程序中原本就有),将"INIT_EASYSIZE;"添加进去(TestCurveDlg.cpp)
BOOL CTestCurveDlg::OnInitDialog()
{
CDialog::OnInitDialog();
... ...
INIT_EASYSIZE;
return TRUE; // return TRUE unless you set the focus to a control
}
步骤四
创建OnSize,将UPDATE_EASYSIZE添加进去(TestCurveDlg.cpp)
void CTestCurveDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
UPDATE_EASYSIZE; //更新窗口大小必须加入
//CRect rect;
GetWindowRect(rect);
ScreenToClient(rect);
CRect ctrrect;
CWnd* pWnd ;

pWnd = GetDlgItem(IDC_STATIC_CURVE); //更新画图框大小
if(pWnd)
{
if (m_pCurveCtrl)
{
m_pCurveCtrl->GetWindowRect(ctrrect);
ScreenToClient(ctrrect);

CRect newrect(ctrrect.left, ctrrect.top, rect.right-120, rect.bottom);
m_pCurveCtrl->MoveWindow(newrect);
}
}
步骤五
如果需要用户设置的最小化功能,可以创建OnSizing,添加EASYSIZE_MINSIZE(具体可参照EasySize_demo)
void CEasySizeDemoDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
EASYSIZE_MINSIZE(280,250,fwSide,pRect);
}
//(in this example, 280 is the minimum width and 250 the minimum height we want our dialog to have)
步骤六(核心部分)
创建一个"EasySize Map",功能:设置放大/缩小窗口时的显示效果,可以放在类的任何位置。
BEGIN_EASYSIZE_MAP(class_name)
...
EASYSIZE(control,left,top,right,bottom,options)
...
END_EASYSIZE_MAP
本程序中如下:TestCurveDlg.cpp中
BEGIN_EASYSIZE_MAP(CTestCurveDlg) //放大窗口
EASYSIZE(IDC_STATIC,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel0, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel1, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel2, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel3, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel4, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel5, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel6, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel7, ES_KEEPSIZE,ES_BORDER,ES_BORDER,

ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel8, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel9, ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel10,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel11,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel12,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel13,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel14,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_Channel15,ES_KEEPSIZE,ES_BORDER,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_BUTTON_OpenFile,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)
EASYSIZE(IDC_BUTTON_ZoomOut, ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)
EASYSIZE(IDC_BUTTON_Resort, ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)
EASYSIZE(IDC_STATIC_CURVE,ES_BORDER,ES_BORDER,IDC_STATIC,IDC_BUTTON_ZoomOut,0)
END_EASYSIZE_MAP
...
注释
EASYSIZE(control,left,top,right,bottom,options)
Control---控件的ID,需要设置的控件
left top right bottom---矩形框的位置,可以设置的参数:ES_BORDER、ES_KEEPSIZE、其他control的ID。
ES_BORDER代表控件与边框的距离保持不变
ES_KEEPSIZE代表控件的宽度和高度保持不变,left/right只能设置其中一个为ES_KEEPSIZE,top/bottom亦然。
Control ID代表以另一个空间为参照
具体注释如下,待设置控件记为ID1,参照控件记为ID2
i left=ID2 ID1左边到ID2右边的距离保持不变(不管ID2如何变化)
ii right=ID2 ID1右边到ID2左边的距离保持不变(不管ID2如何变化)
iii top=ID2 ID1上边到ID2下边的距离保持不变(不管ID2如何变化)
iv bottom=ID2 ID1下边到ID2上边的距离保持不变(不管ID2如何变化)
options---特别操作ES_HCENTER, ES_VCENTER and 0的结合。
0代表没有任何操作;
ES_HCENTER代表控件在left/right之间水平居中,此时left/right都不能设置成ES_KEEPSIZE,控件的宽度保持不变;
ES_VCENTER同理ES_HCENTER

相关主题
相关文档 最新文档