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);
}
本文详细介绍了如何在对话框大小变化时,自动调整控件大小以保持其在对话框内的正确位置,包括获取对话框和控件大小、响应WM_SIZE消息和调整控件位置的步骤。

7939

被折叠的 条评论
为什么被折叠?



