MFC窗口自动缩放
常见的对话框可以随意变换大小,而且其窗口中的控件可以随之按照一定比例缩放。在万能的百度里找到了一个easysize的宏文件。研究了一下,觉得这位大神真是厉害。本笔记就如何使用该easysize进行简要说明。
1. download这个easysize.h的文件,放在工程目录下。在主界面的.h文件下增加#include”easysize.h”.
2. 在主类的声明下添加一个宏DECLARE_EASYSIZE,该宏在easysize.h中定义了两个封装好的函数。在OnInitDialog()函数里添加宏 INIT_EASYSIZE;记忆下当前各空间的初始尺寸/位置信息。
3. 在.cpp中添加ON_WM_SIZE()消息。在.h文件中声明onsize()函数,在.cpp文件中定义该函数。在函数中加入UPDATE_EASYSIZE。
4. 在cpp文件中添加EASYSIZE 的宏映射。
BEGIN_EASYSIZE_MAP(CTestDlg)
EASYSIZE(IDC_BUTTONT1,ES_BORDER, ES_BORDER, ES_BORDER, ES_BORDER,0)
EASYSIZE(IDC_LIST1,ES_BORDER, ES_BORDER, ES_BORDER, ES_BORDER,0)
END_EASYSIZE_MAP
此函数原型为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(IDC_BUTTON1,ES_BORDER,IDC_COMBO_TARIDS,ES_BORDER,ES_KEEPSIZE,ES_HCENTER)
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在该宏前面)
5.实现一行三个(奇数个)控件的均匀分布:
首先定义中间控件的位置,重点是水平居中ES_HCENTER
EASYSIZE(IDC_BUTTON1,ES_BORDER,IDC_COMBO_TARIDS,ES_BORDER,ES_KEEPSIZE,ES_HCENTER)
其次定义其左右两个(偶数个)控件的位置,左边的Right为中间控件,右边的Left为中间控件。
EASYSIZE(IDC_BUTTONCONFIG,ES_BORDER,IDC_COMBO_TARIDS,IDC_BUTTON1,ES_KEEPSIZE,0)
EASYSIZE(IDC_BUTTONCANCEL,IDC_BUTTON1,IDC_COMBO_TARIDS,ES_BORDER,ES_KEEPSIZE,0)
一行有偶数个控件时,可以在中间添加一个辅助控件,然后将此辅助控件隐藏即可。