MFC控件随对话框放大缩小自适应变化

之前是等比例缩放,不适用于所有情况,比如界面太大的情况,控件会被等比例放大。现在记录一种可以在拖拽界面时,控件位置相对不变,也不会失真。

首先将对话框的属性进行设置 如下图

然后添加OnSize函数(mfc处理对话框大小变化自动调用此函数,可在类向导中找到),内容如下

void CHH23::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);
	if(GetDlgItem(IDOK) != NULL) //在控件被创建后界面变化才执行
	{
		CRect rect,rectCpy;
		GetClientRect(&rect);
		rect.DeflateRect(5,5);
		rectCpy = rect;
		CWnd *WND = NULL;
		WND=  GetDlgItem(IDC_STATIC);//groupbox 
		rectCpy.left = rect.right - 75;

		rectCpy.bottom = rect.top + 220;
		WND->MoveWindow(rectCpy,0);

		WND=  GetDlgItem(IDC_BUTTON1);
		rectCpy.top += 22;
		rectCpy.left += 10;
		rectCpy.right -= 10;
		rectCpy.bottom = rectCpy.top + 21;
		WND->MoveWindow(rectCpy,0);

		WND=  GetDlgItem(IDC_BUTTON6);
		rectCpy.top += 20;
		rectCpy.bottom += 20;
		WND->MoveWindow(rectCpy,0);
		WND=  GetDlgItem(IDC_BUTTON7);
		rectCpy.top += 20;
		rectCpy.bottom += 20;
		WND->MoveWindow(rectCpy,0);
		WND=  GetDlgItem(IDC_BUTTON8);
		rectCpy.top += 20;
		rectCpy.bottom += 20;
		WND->MoveWindow(rectCpy,0);


		rectCpy = rect;
		rectCpy.left = rect.right - 35;
	
		rectCpy.top = rect.bottom - 35;
		
		WND=  GetDlgItem(IDCANCEL);
		WND->MoveWindow(rectCpy);
		rectCpy.left = rect.right - 75;
		rectCpy.right = rect.right - 40;
		WND=  GetDlgItem(IDOK);

		InvalidateRect(rect);
		rect.DeflateRect(-5,-5);

	}

	// TODO: 在此处添加消息处理程序代码
}

OnSize中主要是对GropuBox控件做了相对位置设定,然后其区域内控件位置根据 GropuBox控件位置计算出来。

对话框界面如下

当拖动和最大最小化时界面的groupbox所在区域保持相对不变。 

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值