刚开始学习MFC,想着所有控件能够根据对话框的大小实时调整大小,总结了一下,共有三步;
第一步:窗体铺满全屏,读取窗体大小
ModifyStyle(WS_CAPTION, 0, 0);
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0);
CRect rect;
GetClientRect(&rect);
Old.x = rect.right - rect.left;
Old.y = rect.bottom - rect.top;
第二步:添加消息
void CCPwelderDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED)/窗体大小发生变化,处理函数resize/
{
resize();
}
}
第三步:添加重新调整大小函数
void CCPwelderDlg::resize()
{
POINT Newp;
CRect recta;
GetClientRect(&recta);
Newp.x = recta.right - recta.left;
Newp.y = recta.bottom - recta.top;
double zoom[2];
zoom[0] = (double)Newp.x / Old.x;
zoom[1] = (double)Newp.y / Old.y;
CRect Rect;
int hwndnum;
CPoint OldTLPoint, TLPoint;
CPoint OldBRPoint, BRPoint;
HWND hwndChild = ::GetWindow(m_hWnd, GW_CHILD);
while (hwndChild)
{
hwndnum = ::GetDlgCtrlID(hwndChild);
GetDlgItem(hwndnum)->GetWindowRect(Rect);
ScreenToClient(Rect);
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.xzoom[0]);
TLPoint.y = long(OldTLPoint.yzoom[1]);
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *zoom[0]);
BRPoint.y = long(OldBRPoint.y *zoom[1]);
Rect.SetRect(TLPoint, BRPoint);
GetDlgItem(hwndnum)->MoveWindow(Rect, TRUE);
hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT);
}
Old = Newp;
}