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

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;
}

你可能感兴趣的:(MFC,MFC)