您的位置:首页 > 其它

MFC 界面部件大小位置自适应 EasySize的使用

2015-04-23 18:55 381 查看
EasySize类范例程序(EasySize_demo,EasySize_src)

下载地址http://www.codeproject.com/KB/dialog/easysize.aspx

使用说明

步骤一

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐