MFC对话框自适应缩放

if (m_ListRect.GetCount() > 0)
{
/*	if (m_nFirst == 0)
	{
		m_nFirst++;
		return;
	}*/
	CRect dlgNow;
	GetWindowRect(&dlgNow);//位于屏幕的所有控件的位置
	POSITION pos = m_ListRect.GetHeadPosition();//第一个保存的是对话框的Rect  //获取对话框整体的

	CRect dlgSaved;
	dlgSaved = m_ListRect.GetNext(pos);//第一个控件
	ScreenToClient(dlgNow);


	float x = dlgNow.Width() * 1.0 / dlgSaved.Width();//根据当前和之前保存的对话框的宽高求比例  
	float y = dlgNow.Height() * 1.0 / dlgSaved.Height();
	ClientToScreen(dlgNow);

	CRect childSaved;

	CWnd* pWnd = GetWindow(GW_CHILD);
	while (pWnd)
	{
		childSaved = m_ListRect.GetNext(pos);//依次获取子窗体的Rect  
		childSaved.left = dlgNow.left + (childSaved.left - dlgSaved.left) * x;//根据比例调整控件上下左右距离对话框的距离  
		childSaved.right = dlgNow.right + (childSaved.right - dlgSaved.right) * x;
		childSaved.top = dlgNow.top + (childSaved.top - dlgSaved.top) * y;
		childSaved.bottom = dlgNow.bottom + (childSaved.bottom - dlgSaved.bottom) * y;
		//ScreenToClient(childSaved);
		pWnd->MoveWindow(childSaved);
		int nID = pWnd->GetDlgCtrlID();
		if (nID == 1005)
		{
			//目前3d窗口自适应缩放
		/*	CRect  pwCF=childSaved;
			p3dView.ScreenToClient(pwCF);
			pwCF.top += 20 * y;
			p3dView.MoveWindow(pwCF);
			if (p3dView.m_p3DView)
			{
				p3dView.m_p3DView->MoveWindow(childSaved);
			}
			p3dView.ShowWindow(SW_SHOW);*/
	
			CRect rc1;
			m_Tab.GetClientRect(rc1);

			//p3dView.Create(IDD_ThreedDialog, &m_Tab);
			rc1.top += 20*y;
			rc1.bottom -= 0;
			rc1.left += 0;
			rc1.right -= 0;
			p3dView.MoveWindow(rc1);
			if (p3dView.m_p3DView)
			{
				p3dView.m_p3DView->MoveWindow(rc1);
			}
			p3dView.ShowWindow(SW_SHOW);


		}




		pWnd = pWnd->GetNextWindow();
	}
}



采用自己记录所有的控件大小的方式来自适应算出缩放后的大小和距离

m_ListRect.GetNext(pos)是一个存储Rect的列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值