MFC学习之路(9)之如何使控件大小随着对话框大小自动调整

简介: MFC学习之路(9)之如何使控件大小随着对话框大小自动调整

1)首先设置一个变量

CRect m_rect; //用于保存原对话框大小

2)初始化OnInitDialog()中加入

GetClientRect(&m_rect); //获取对话框的大小

3)手动声明、创建一个函数

void CMyDlg::ChangeSize(UINT nID, int x, int y) //nID为控件ID,x,y分别为对话框的当前长和宽
{
CWnd *pWnd;
pWnd=GetDlgItem(nID); 
//判断是否为空,因为在窗口创建的时候也会调用OnSize函数,但是此时各个控件还没有创建,Pwnd为空
if(pWnd!=NULL)
{
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); //伸缩控件
}
}

4)最后添加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的错误操作
{
//对每一个控件依次做调整,换成自己控件的ID
ChangeSize(IDC_LIST1,cx,cy); 
ChangeSize(IDC_LIST2,cx,cy);
ChangeSize(IDC_BUTTON1,cx,cy); 
ChangeSize(IDC_BUTTON2,cx,cy); 
GetClientRect(&m_rect); //最后要更新对话框的大小,当做下一次变化的旧坐标
}
}

参考:http://www.cnblogs.com/jack-jia-moonew/p/4157346.html

目录
相关文章
|
C++ 索引
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
12519 0
Windows10下VS2015下载安装详解【附“安装包丢失或损坏“ 错误解决方法】
|
开发工具 git C++
『实用教程』使用Visual Studio自带的Git管理回滚代码版本
使用Visual Studio自带的Git管理回滚代码版本
2869 0
『实用教程』使用Visual Studio自带的Git管理回滚代码版本
|
编译器 C++
使用Visual Studio 2022 创建lib和dll并使用
本文介绍了如何在Visual Studio 2022中创建静态库(lib)和动态库(dll),并展示了如何使用这些库。文章详细说明了创建新项目、编写代码、生成库文件、配置项目属性以及编写测试代码的步骤,并提供了相应的截图和代码示例。作者还分享了在创建和使用库的过程中遇到的一些问题及其解决方案。
5340 0
使用Visual Studio 2022 创建lib和dll并使用
|
C++ UED 开发者
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
逆向学习 MFC 篇:视图分割和在 C++ 的 Windows 窗口程序中添加图标的方法
507 0
|
程序员 C++ 编译器
error LNK2005 已经在***.obj中定义 的解决办法
为什么会出现这个错误??“error LNK2005: 已经在aaa.obj中定义” 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。
5055 0
|
存储 算法 C语言
【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式
【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式
1150 0
MFC打开控制台的2种方式
MFC打开控制台的2种方式
685 0
MFC学习之路十三之定时器的使用
MFC学习之路十三之定时器的使用
518 0
|
C++
[MFC] 动态链接库的制作过程和使用方法与总结
[MFC] 动态链接库的制作过程和使用方法与总结
445 0

热门文章

最新文章