MFC如何使控件大小随着对话框大小自动调整
MFC如何使控件大小随着对话框大小自动调整
2012-04-27 16:24:50| 分类: MFC | 标签: |字号大中小 订阅
对话框的大小变化后,假若对话框上的控件大小不变化,看起来会比较难看。下面就介绍怎么让对话框上的控件随着对话框的大小的变化自动调整。
首先明确的是Windows有一个WM_SIZE消息响应函数,这个函数在对话框大小发生变化的时候调用,所以我们可以记录下原来对话框的大小,还有当前对话框的大小(这个不用自己算,系统已给出),然后根据控件做出相应比例的调整。
比如原来对话框大小为a,现在为b,原来控件大小为c,那么现在的控件大小应该为c*b/a;(注意a不能为0)。
看实例:(黑体字为添加的代码!!)
假设对话框类为CMyDlg类,那么首先设置一个变量
CRect m_rect; //用于保存原对话框大小
那么在对话框创建的时候先获得对话框的大小
BOOL CMyDlg::OnInitDialog()
{
.........................
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
GetClientRect(&m_rect); //获取对话框的大小
return TRUE; // return TRUE unless you set the focus to a control
}
然后再手动添加一个函数,用以实现具体的变化
void CMyDlg::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对话框的当前长和宽
{
CWnd *pWnd;
pWnd=GetDlgItem(nID);
if(pWnd!=NULL) //判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
{
CRect rec;
pWnd->GetWindowRect(&rec); //获取控件变化前的大小
ScreenToClient(&rec); //将控件大小装换位在对话框中的区域坐标
rec.left=rec.left*x/m_rect.Width(); //按照比例调整空间的新位置
rec.top=rec.top*y/m_rect.Height();
rec.bottom=rec.bottom*y/m_rect.Height();
rec.right=rec.right*x/m_rect.Width();
pWnd->MoveWindow(rec); //伸缩控件
}
}
最后添加windows消息响应函数OnSize:
void CMyDlg::OnSize(UINT nType, int cx, int cy) //cx,cy就是当前对话框的长和宽
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(nType!=SIZE_MINIMIZED ) //判断窗口是不是最小化了,因为窗口最小化之后 ,窗口的长和宽会变成0,当前一次变化的时就会出现除以0的错误操作
{
ChangeSize(IDC_LIST1,cx,cy); //对每一个控件依次做调整
ChangeSize(IDC_LIST2,cx,cy);
ChangeSize(IDC_BUTTON1,cx,cy);
ChangeSize(IDC_BUTTON2,cx,cy);
GetClientRect(&m_rect); //最后要更新对话框的大小,当做下一次变化的旧坐标;
}
}
任务完成!
MFC如何使控件大小随着对话框大小自动调整相关推荐
- MFC的图片控件的使用(图片适应控件大小并不失真)
MFC的图片控件的使用 建立一个基于对话框的MFC 如图 ,为新建MFC的窗口 接下来添加图片控件(如果添加全部背景则不需要添加图片控件,直接进行消息响应函数的添加即可) 添加图片控件 ...
- VC2012下MFC程序各控件的常用方法
一下控件的用法全部在VC2012下调试通过,特发文收藏(部分内容来自或参考自网络): Static Text: 将ID号改成唯一的一个,如:IDC_XX,然后进一次类向导点确定产生这个ID,之后更改C ...
- MFC工具箱各种控件的具体意义
忘记在哪看到的了, 控件工具箱: 2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon) 3 静态文本(Static Text):用来在指定的位置显示特定的字符串,一般用来 ...
- MFC之ComboBox控件用法
本文以实例形式较为详细的讲述了MFC中ComboBox控件的用法.分享给大家供大家参考之用.具体方法如下: 一.ComboBox简介: ComboBox控件是由一个文本输入控件和一个下拉菜单组成的.用 ...
- Visual studio C++ MFC之列表控件CListCtrl Control
背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...
- VS2008下用MFC 的MSComm控件编写串口程序
可以在:http://download.csdn.net/detail/plutus_lee/4525446 下载详细文档. 首先感谢网络资源吧,作为一个自动化专业出身的,不懂串口实在让我有点无奈,本 ...
- VC MFC按钮(CButton)控件
VC MFC按钮(CButton)控件 2012年11月11日 19:15 作者:TCEO 分类:技术文章 浏览:4,298 按钮控件 1如何在按钮控件上显示图片 首先确定你要显示在按 ...
- Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)
文章目录 1. 开发第一个Hello World程序 1.1 开发程序 1.2 认识程序中的文件 1.3 Android程序结构 1.4 安卓程序打包 2. Android UI开发 2.1 布局的创 ...
- 基于MFC的ActiveX控件开发
转自:http://www.cnblogs.com/lidabo/archive/2012/12/04/2800921.html ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件, ...
最新文章
- matlab选择激发波长,【求助】怎么确定一个物质的激发波长和发射波长?
- android TextView显示文字和图片
- 为什么你应该尝试全栈
- Java中Thread类的方法简介
- 2009年12月8号漕宝路电信机房真是电信封的吗?
- Shiro 单点登录
- 使用ffmpeg一行命令根据时间分割MP4文件
- java ----一个函数传回多个值的总结
- 【基于51】红外寻迹智能小车 - 代码篇
- 全志A64 Android6.0编译
- 杨诚 湖南科技职业技术学院计算机,湖南科技大学计算机科学与工程学院
- linux pthread_cleanup_push 线程实现,线程清理(pthread_cleanup_push函数和pthread_cleanup_pop函数)...
- 高德地图标识大全_连地震都查得一清二楚!高德地图新功能体验
- 【时间序列预测算法】——Holt-Winters算法介绍及代码实现
- 使用ImageJ测图片中物体的平均灰度值
- itween的抛物线线性移动
- ios 开发 怎样在项目中使用除系统外的字体
- 基于FPGA的数字时钟的设计课设(HUAT)
- 用户要进行远程登录 必须在自己的计算机上,大学计算机基础上机考试题库3
- 越千年,是谁负了这情长
热门文章
- 视频光端机常见故障问题及处理方法大全
- 飞畅科技-国内老牌工业以太网交换机品牌
- 【渝粤教育】国家开放大学2019年春季 1260软件工程 参考试题
- [渝粤教育] 西南科技大学 现代企业管理 在线考试复习资料
- 半年时间能学会php吗_4个月真的能学会PHP吗
- mysql mydumper_系统运维|Mydumper-MySQL数据库备份工具
- 红头文件rgb红色值_拿下抖音小姐姐,我写了个口红色号识别器
- 怎样学c++程序语言,如何学好 C++——学习门槛最高的编程语言
- Mask R-CNN论文理解
- Go--4大基本数据类型之布尔类型