VS2010 MFC 控件随主框体变化而变化

本文介绍了如何使MFC应用中的控件在VS2010环境下随主框体的变化(如最大化和最小化)进行调整。尽管在连续最大化/最小化操作后控件位置可能出现微小偏移,但在多数情况下仍能有效满足需求。通过添加CRect成员变量记录初始对话框大小,并在WM_SIZE消息响应中调整控件尺寸。
摘要由CSDN通过智能技术生成

这里介绍一种控制控件随主框体变化而变化的方法。
方法并不完善,框体只支持最大化和最小化窗口时还好,但是在连续最大化最小化切换10次以上以后,控件在主框体中的相对位置会向左上角移动,幅度并不大,基本可以满足应用需要;
但如果主框体动态的变化大小,控件的相对位置变化的非常快,基本不能使用。
自己使用MFC只是做一些小工具,或者测试工具,自己或者同事使用,只使用最大化和最小化窗口,基本也满足需要了。
下面介绍方法:
1、在对话框类中添加成员变量 CRect m_rectOrg 它是用来记录当前对话框的大小。
在OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rectOrg )。
2、在对话框类中添加函数void ChangeSize(CWnd * pWnd, int cx, int cy),根据主框体的变化改变控件大小。

void CTESTDlg::ChangeSize(CWnd * pWnd, int cx, int cy)
{
	if (pWnd)
	{
		CRect rect; 
		pWnd->GetWindowRect(&rect);				//获取控件变化前的大小
		ScreenToClient(&rect);					//将控件大小转换为在对话框中的区域坐标 
		rect.left=rect.left*cx/m_rectOrg.Width();		//调整控件大小 ,cx/m_rectOrg.Width()为对话框在横向的变化比例
		rect.right=rect.right*cx/m_rectOrg.Width();		//cx存储的是变化后的宽度,cy存储的是变化后的高度
		rect.top=rect.top*cy/m_rectOrg.Height();		//m_rectOrg.height
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值