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的列表