使用MFC的最大化窗口只会让窗口本体最大化,并不会使窗口中的控件自适应变大。
当然,也有人并没有一开始勾选最大化和最小化的选项,可以在Dialog的属性中找到Maximize Box和Minimize Box并将更改为True。如下图:
勾选好最小化与最大化的按钮后,我们可以看到窗口已经可以最小化和最大化了。但是还是不能自适应变化,所以接下来添加适当的代码让它自适应变化。
先声明一个CRect类型来保存窗口的尺寸:
CRect m_wndRect;//保存窗口尺寸
然后在初始化Dialog时获取窗口尺寸:
GetClientRect(&m_wndRect);//获取窗口尺寸
然后在Dialog的类向导中的消息中找到SW_SIZE并添加消息处理程序:
扫描二维码关注公众号,回复:
5535707 查看本文章
最后附上OnSize的代码:
void CMainInterfaceDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
//我这里只是演示,所以写的控件少。
int dlgitem[3] = { IDC_TEXT,IDOK,IDCANCEL };
for (int i = 0; i <3; i++)//因为是多个控件,所以这里用了循环
{
CWnd *pWnd = GetDlgItem(dlgitem[i]);
//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())
{
CRect rect; //获取控件变化前的大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
rect.left = rect.left*cx / m_wndRect.Width();//调整控件大小
rect.right = rect.right*cx / m_wndRect.Width();
rect.top = rect.top*cy / m_wndRect.Height();
rect.bottom = rect.bottom*cy / m_wndRect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
}
//重新获得窗口尺寸
GetClientRect(&m_wndRect);
}