放大对话框时,改变按钮的位置(EasySize.h使用方法)

设创建的对话框的类名是CMyDlg,具体过程如下:

步骤一:把easysize.h拷贝到CMyDlg项目文件夹中,同时在CMyDlg.h文件和.cpp文件中加入#include "easysize.h"

步骤二:在CMyDlgh文件中,加入DECLARE_EASYSIZE,注意结尾处不要加

class CMyDlg : public CDialog

{

      DECLARE_EASYSIZE

// Construction

…

}

步骤三:在CMyDlg类的OnInitDialog()函数的结尾处加入INIT_EASYSIZE,注意此处结尾处要加

BOOL CMyDlg::OnInitDialog()

{     …

// TODO: Add extra initialization here

      INIT_EASYSIZE;

       returnTRUE;  // return TRUE  unless you set the focus to a control

} 

步骤四:增加WM_SIZE消息响应函数OnSize(),在函数中加入UPDATE_EASYSIZE,注意此处结尾处要加

void CMyDlg::OnSize(UINT nType, int cx, int cy)

{

      CDialog::OnSize(nType, cx, cy);

       // TODO:Add your message handler code here

      UPDATE_EASYSIZE;

}

步骤五:在CMyDlgcpp文件中添加EASYSIZE的宏映射

BEGIN_EASYSIZE_MAP(CMyDlg)

EASYSIZE(control,left,top,right,bottom,options)

END_EASYSIZE_MAP

注意:如果没有添加EASYSIZE的宏映射就开始编译的话,会出现链接错误!

补充:原文解释如下:

  1. Now you have to create the "EasySize Map" (or whatever you want to call it) in which you will specify the behavior of each dialog item. It can be placed anywhere inside your class implementation. The map looks like this:

BEGIN_EASYSIZE_MAP(class_name)

   ...

   EASYSIZE(control,left,top,right,bottom,options)

   ...

END_EASYSIZE_MAP

The map from the demoapplication looks like this:

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

BEGIN_EASYSIZE_MAP(CEasySizeDemoDlg)

   EASYSIZE(IDC_TITLE,ES_BORDER,ES_BORDER,

       ES_BORDER,ES_KEEPSIZE,ES_HCENTER)

   EASYSIZE(IDC_RADIO1,ES_BORDER,ES_BORDER,

       ES_KEEPSIZE,ES_KEEPSIZE,0)

   EASYSIZE(IDC_RADIO2,ES_BORDER,ES_BORDER,

       ES_KEEPSIZE,ES_KEEPSIZE,0)

   EASYSIZE(IDC_CONTENT,ES_BORDER,ES_BORDER,

       ES_BORDER,ES_BORDER,0)

   EASYSIZE(IDC_STATUSFRAME,ES_BORDER,ES_KEEPSIZE,

       ES_BORDER,ES_BORDER,0)

   EASYSIZE(IDC_STATUS,ES_BORDER,ES_KEEPSIZE,

       ES_BORDER,ES_BORDER,0)

   EASYSIZE(IDOK,ES_KEEPSIZE,ES_KEEPSIZE,

       ES_BORDER,ES_BORDER,0)

   EASYSIZE(IDCANCEL,ES_KEEPSIZE,ES_KEEPSIZE,

       ES_BORDER,ES_BORDER,0)

   EASYSIZE(IDC_MYICON1,ES_BORDER,IDC_RADIO2,IDC_CONTENT,

       IDC_STATUSFRAME,ES_HCENTER|ES_VCENTER)

   EASYSIZE(IDC_MYICON2,ES_BORDER,ES_BORDER,IDC_TITLE,

       ES_KEEPSIZE,ES_HCENTER)

END_EASYSIZE_MAP

 

///

// CEasySizeDemoDlg message handlers

...

原文地址:http://www.codeproject.com/Articles/1657/EasySize-Dialog-resizing-in-no-time?fid=3024&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&fr=26#xx0xx

这里需要解释的是宏EASYSIZE()的用法,其原型如下:

EASYSIZE(control,left,top,right,bottom,options)

该宏表示对ID值为control的控件实施缩放效果,缩放后的上下左右位置由control,left,top,right,bottom来确定,大小由option确定。

其中:control为对话框中的控件ID值,left,top,right,bottom四个参数为控件位置的坐标,其值可以选择ES_BOARD,ES_KEEPSIZE,控件ID值三者之一。Options可以为ES_HCENTER, ES_VCENTER的结合,options可置0

ES_BOARD表示控件与对话框边界(以下简称边界)的距离;

ES_KEEPSIZE表示控件水平/垂直方向上尺寸保持不变;

控件ID值表示当前控件与指定控件之间的距离;

ES_HCENTER表示缩放后控件在指定位置内水平居中;

ES_VCENTER表示缩放后控件在指定位置内垂直居中;

 

例如:

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界上下左右位置保持不变,水平和垂直方向尺寸拉伸;

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_HCENTER)

表示缩放后,值为IDOK的控件,距离边界上下位置保持不变,垂直方向尺寸拉伸,水平居中;

EASYSIZE(IDOK,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,ES_HCENTER|ES_HCENTER)

表示缩放后,值为IDOK的控件,在对话框内垂直居中,水平居中;

EASYSIZE(IDOK,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界左、下方位置保持不变,同时保持控件尺寸;

EASYSIZE(IDOK,ES_BORDER,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界左、右、下方位置保持不变,水平方向尺寸拉伸,垂直方向尺寸不变;

 EASYSIZE(IDOK,ES_BORDER,ES_BORDER,IDCANCEL,ES_BORDER,0)

表示缩放后,值为IDOK的控件,距离边界上下左位置保持不变,距离ID值为IDCANCEL的右方位置距离保持不变,水平和垂直方向尺寸拉伸;(当使用指定控件作为定位参数时候,确保指定控件的EASYSIZE在该宏前面)


下面是我增加的解释:

ES_BORDERleft位置上,则表示与左边框的距离相等

如某按钮放大后与左边框与顶边框距离不变,按钮大小不变,写为:

EASYSIZE(IDC_IMPORT_EXCEL,ES_BORDER,ES_BORDER,ES_KEEPSIZE,ES_KEEPSIZE,0)

ID号主要是用来改变相对边界的,若将ID号写在RIGHT位置上,则表示,不以边框右边界为边界了,而改为以此ID号所表示的控件的左边界为右边界


我会把EasySize.h和easysize_demo.zip传到我资源中,不要分,想要的可以去下载

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值