1. 添加成员变量CRect m_rect; 用来记录当前对话框的大小。
2. 在OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect);
3. 增加消息WM_SIZE的消息响应函数 OnSize():只要对话框大小发生变化,就会调用该函数。
4. 在OnSize()函数中增加如下代码:(最简单的为例子,就一个控件,控件的ID为ID_CONTROL)
void CTestDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CWnd *pWnd = GetDlgItem(ID_CONTROL);
if(pWnd) //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
//获取控件变化前的大小
CRect rect;
pWnd->GetWindowRect(&rect);
//将控件大小转换为在对话框中的区域坐标
ScreenToClient(&rect);
//调整控件大小
rect.left=rect.left*cx/m_rect.Width();
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
//设置控件大小
pWnd->MoveWindow(rect);
}
GetClientRect(&m_rect);
}