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

来源:互联网 发布:yes淘宝刷信用 编辑:程序博客网 时间:2024/05/22 08:36

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

0 0
原创粉丝点击