MFC控件随对话框大小改变而改变
来源:互联网 发布:曾经很火的网络歌曲 编辑:程序博客网 时间:2024/06/05 16:46
这也是我项目中碰到的问题,要让对话框中的控件随着对话框大小的变化进行自动调整,一般的做法是在WM_SIZE的响应函数中对所有的控件用MoveWindow()或者SetWindowPos()设置其变化比例。
但是由于需要自己计算,并且还有各种系统引起的情况,比如WIN7里有个选项“拖动时显示窗口内容”,选中与不选中导致对话框内容显示完全不一样,选中时错误,不选正确,确实让人头大。
如EasySize是一个很好解决方案,用一些宏封装了内部的实现机制,使用起来方便快捷。原文地址:http://www.codeproject.com/KB/dialog/easysize.aspx
使用方法如下:
1.首先将EasySize.h拷贝到工程文件夹中,然后在stdafx.h中包含该头文件:
#include "EasySize.h"(当然你也可以只放在要使用的类里)
2.在对话框类声明中添加DECLARE_EASYSIZE宏:
class CEasySizeDemoDlg : public CDialog
{
DECLARE_EASYSIZE
...
3.在OnInitDialog()函数中添加INIT_EASYSIZE宏(注意分号):
BOOL CEasySizeDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
INIT_EASYSIZE;
return TRUE; // return TRUE unless you set the focus to a control
}
4.响应WM_SIZE消息,在响应函数中添加UPDATE_EASYSIZE宏(注意分号):
void CEasySizeDemoDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
UPDATE_EASYSIZE;
}
5.如果需要限制对话框有一个最小尺寸,首先在资源视图中为对话框添加上最大化最小化按钮,然后Class Wizard中选择Class Info标签,在Message fileter下拉列表中选择Window,然后再点击Message Maps标签,就出现WM_SIZING消息了,添加该消息的响应函数:
void CEasySizeDemoDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
EASYSIZE_MINSIZE(XXX,YYY,fwSide,pRect);
}
XXX,YYY是你自己定义的数值。
6.添加控件布局映射,放到消息映射之后,基本格式如下:
BEGIN_EASYSIZE_MAP(class_name)
...
EASYSIZE(control,left,top,right,bottom,options)
...
END_EASYSIZE_MAP
class_name就是对话框类的类名
control是要设置的控件的ID
left、top、right、bottom分别指的是该控件左、上、右、下方的控件的ID,也可以为以下特殊值:
ES_BORDER:保持与边框距离不变
ES_KEEPSIZE:保持大小不变
所放位置:
left -- 表示和right指定的控件右对齐
right -- 表示和left指定的控件左对齐
top -- 表示和bottom指定的控件上对齐
bottom -- 表示和top指定的控件下对齐
如EASYSIZE(IDC_MYICON2,ES_BORDER,ES_BORDER,IDC_TITLE,ES_KEEPSIZE,ES_HCENTER)
我们看红色部分, 它是一个控件ID, 表示上(top)与控件ID为IDC_TITLE的控件对齐(保持距离).
options可指定为0,也可指定为以下值:
ES_HCENTER:保持宽度不变,水平位置在left和right指定的控件正中间
ES_VCENTER:保持高度不变,垂直位置在left和right指定的控件正中间
7.LAST BUT NOT LEAST,设置的时候是有先后顺序,如果顺序设得不对,产生的布局完全不同的。
- MFC控件随对话框大小改变而改变
- MFC 控件随着对话框大小的改变而改变
- VS2013 MFC 对话框控件大小随窗口大小改变而改变
- MFC 控件大小随窗体改变而改变大小
- MFC 控件大小随窗体改变而改变大小
- MFC 控件大小随窗体改变而改变大小
- MFC 控件随窗口大小而改变
- 对话框控件随界面大小的改变而改变
- MFC控件大小随窗体改变而改变
- mfc 控件大小随窗体改变而改变
- MFC控件大小随窗体改变而改变 .
- MFC窗体所有控件大小随窗体改变而改变
- MFC控件大小及控件字体跟随对话框的改变而改变
- MFC控件大小随窗体大小而改变
- MFC控件大小随窗体大小而改变
- MFC控件大小随窗体大小而改变
- MFC控件位置随窗体大小而改变
- MFC窗口控件随主窗口大小改变而伸缩
- C 语言部分实现面向对象的继承特性【重构】
- 一个汉字占几个字节的问题
- zoj 1402 Magnificent Meatballs
- UVA - 10163Storage Keepers(01背包)
- Python 正则表达式查找重复单词
- MFC控件随对话框大小改变而改变
- Maven管理Jar包时,导出项目原理啊
- ssh实现分页查询
- 我这有套安卓的视频给大家分享下
- codeforce 246B——Good Sequences
- Matlab学习----------GUI数据管理
- sql server关于正常状态突然出现'80004005'的问题解决
- 去除svn蓝色问号
- JAVA采用JDBC执行批处理操作注意的有关问题