MFC中的控件随窗口大小变化

xiaoxiao2021-02-28  100

1.在对话框的头文件中添加  POINT old; 2.在OnInitialDlg()中添加 CRect rect; GetClientRect(&rect); old.x = rect.right - rect.left; old.y = rect.bottom - rect.top; 3.在添加消息函数 OnSize() if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED) { resize(); } 4.resize()函数 void CMy12Dlg::resize(void) { float fsp[2]; POINT Newp;//获取现在对话框的大小 CRect recta; GetClientRect(&recta);//取客户区的大小 Newp.x = recta.right - recta.left; Newp.y = recta.bottom - recta.top; fsp[0] = (float)Newp.x / old.x; fsp[1] = (float)Newp.y / old.y; CRect Rect; int woc; CPoint OldTLPoint,TLPoint;//左上角 CPoint OldBRPoint,BRPoint;//右下角 HWND hwndChild = ::GetWindow(m_hWnd,GW_CHILD);//列出所有控件 while(hwndChild) { woc = ::GetDlgCtrlID(hwndChild);//取得ID GetDlgItem(woc)->GetWindowRect(Rect); ScreenToClient(Rect); OldTLPoint = Rect.TopLeft(); TLPoint.x = long(OldTLPoint.x * fsp[0]); TLPoint.y = long(OldTLPoint.y * fsp[1]); OldBRPoint = Rect.BottomRight(); BRPoint.x = long(OldBRPoint.x * fsp[0]); BRPoint.y = long(OldBRPoint.y * fsp[1]); Rect.SetRect(TLPoint,BRPoint); GetDlgItem(woc)->MoveWindow(Rect,TRUE); hwndChild = ::GetWindow(hwndChild,GW_HWNDNEXT); } old = Newp; }
转载请注明原文地址: https://www.6miu.com/read-63686.html

最新回复(0)