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

目录
相关文章
|
API C# Windows
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
3380 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
|
算法 API C#
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
最终优化实现ButtonPro按钮(继承自Button),既提供Button原生功能,又提供扩展功能,除了圆角以外,还实现了圆形、圆角矩形的脚尖效果、边框大小和颜色、背景渐变颜色...
1892 0
Winform控件优化之圆角按钮【各种实现中的推荐做法】(下)
|
12月前
|
缓存
《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法
《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法
552 0
|
程序员 Windows
【windows编程之对话框】对话框原理,对话框的创建
【windows编程之对话框】对话框原理,对话框的创建
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
零基础VB教程063期:如何用代码直接创建控件?从此不必拖控件了
311 0
|
Python
PyQt5 图形界面 - 配置界面跟随窗口大小调整灵活伸缩,设置页面控件居中显示实例演示
PyQt5 图形界面 - 配置界面跟随窗口大小调整灵活伸缩,设置页面控件居中显示实例演示
1067 0
|
C# 图形学 Windows
Winform控件优化之圆角按钮【各种实现中的推荐做法】(上)
Windows 11下所有控件已经默认采用圆角,其效果更好、相对有着更好的优化...尝试介绍很常见的圆角效果,通过重写控件的OnPaint方法实现绘制,并在后面进一步探索对应的优化和可能的问题
1383 0
Winform控件优化之圆角按钮【各种实现中的推荐做法】(上)
|
前端开发
前端工作小结88-定义有对话框的按钮
前端工作小结88-定义有对话框的按钮
92 0
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
360 0
MFC Ribbon开发中编辑框、下拉框始终为灰色的问题解决
MFC Ribbon开发中编辑框、下拉框始终为灰色的问题解决
309 0