贵阳建站推广公司,合肥网站建设案例,营销型网站建设制作推广,企业网站的建设电话咨询MFC界面全自动等比例缩放
1.在初始化里 枚举每个控件记录所有控件rect 2.在OnSize里#xff0c;根据当前窗口和之前保存的窗口的宽高求比例x、y 3.枚举每个控件#xff0c;根据比例x、y调整控件上下左右,并移动到新rect struct ControlInfo {CWnd* pControl;CRect original…MFC界面全自动等比例缩放
1.在初始化里 枚举每个控件记录所有控件rect 2.在OnSize里根据当前窗口和之前保存的窗口的宽高求比例x、y 3.枚举每个控件根据比例x、y调整控件上下左右,并移动到新rect struct ControlInfo {CWnd* pControl;CRect originalRect;
};std::vectorControlInfo m_controls;BOOL CProductionTestingDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 记录父窗口及其子窗口的原始位置和大小CRect rect;GetWindowRect(rect); // 父窗口m_controls.push_back({ this, rect }); // 获取所有子控件的信息CWnd* pWnd GetWindow(GW_CHILD);while (pWnd){pWnd-GetWindowRect(rect);ScreenToClient(rect); //将屏幕坐标系中的点转换为客户端坐标系即窗口的内容区域去掉了边框和标题栏中的点。m_controls.push_back({ pWnd, rect });pWnd pWnd-GetNextWindow();}ShowWindow(SW_MAXIMIZE);return TRUE;
}void CProductionTestingDlg::OnSize(UINT nType, int cx, int cy)
{CDialog::OnSize(nType, cx, cy);// 如果没有控件则不做任何操作if (m_controls.empty()) return;// 获取当前窗口大小计算比例CRect nowDlgRect;GetWindowRect(nowDlgRect);//根据当前窗口和之前保存的窗口的宽高求比例float xScale (float)nowDlgRect.Width() / m_controls[0].originalRect.Width();float yScale (float)nowDlgRect.Height() / m_controls[0].originalRect.Height();// 调整控件的大小和位置for (auto controlInfo : m_controls) {// 跳过父窗口if (controlInfo.pControl this) continue;// 根据比例计算新的矩形CRect newRect ;newRect.left (int)(controlInfo.originalRect.left * xScale);newRect.top (int)(controlInfo.originalRect.top * yScale);newRect.right (int)(controlInfo.originalRect.right * xScale);newRect.bottom (int)(controlInfo.originalRect.bottom * yScale);// 移动并调整控件controlInfo.pControl-MoveWindow(newRect); //使用的是 客户区坐标}
}