【MFC】-003 限制窗口最大或最小尺寸
1、由来
MFC向导新建的程序的窗口尺寸是可以随意变化的,在实际应用过程中,可能需要限制窗口的最大尺寸或最小尺寸。
2、步骤
2.1 映射消息
窗口最大或最小尺寸是由WM_GETMINMAXINFO
消息进行控制的,因此,在需要控制窗口最大或最小尺寸的窗体中,需要对该消息进行映射。消息映射宏为ON_WM_GETMINMAXINFO
,对应的消息响应函数为void OnGetMinMaxInfo(MINMAXINFO* lpMMI)
。
2.2 消息响应函数
void CImgProcDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int cx = GetSystemMetrics(SM_CXSCREEN);
int cy = GetSystemMetrics(SM_CYSCREEN);
int nShellHight = 0;
//获取任务栏
CWnd* pTaskWnd = FindWindow(_T("Shell_TrayWnd"), NULL);
if (pTaskWnd != NULL)
{
LONG lStyle = GetWindowLong(pTaskWnd->GetSafeHwnd(), GWL_STYLE);
//如果任务栏存在且可见,要减去任务栏高度
if (lStyle & WS_VISIBLE)
{
//任务栏可见
RECT TastRect;
pTaskWnd->GetWindowRect(&TastRect); //任务栏的尺寸
nShellHight = TastRect.bottom - TastRect.top;
}
else
{
//任务栏隐藏 不做处理
}
}
cy -= nShellHight;
lpMMI->ptMaxSize.x = cx; // 设置窗口最大化时的宽度
lpMMI->ptMaxSize.y = cy; // 设置窗口最大化时的高度
lpMMI->ptMaxPosition.x = 0; // 设置窗口最大化时x坐标
lpMMI->ptMaxPosition.y = 0; // 设置窗口最大化时y坐标
lpMMI->ptMinTrackSize.x = 1920*0.5; // 设置窗口最小宽度
lpMMI->ptMinTrackSize.y = 1080*0.5; // 设置窗口最小高度
lpMMI->ptMaxTrackSize.x = cx; // 设置窗口最大宽度
lpMMI->ptMaxTrackSize.y = cy; // 设置窗口最大高度
CDialogEx::OnGetMinMaxInfo(lpMMI);
}