MFC窗口自动缩放

来源:互联网 发布:淘宝电器商城首页 编辑:程序博客网 时间:2024/05/16 13:41

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)

一行有偶数个控件时,可以在中间添加一个辅助控件,然后将此辅助控件隐藏即可。



0 0
原创粉丝点击