您的位置:首页 > 其它

【MFC】-003 限制窗口最大或最小尺寸

2018-08-14 10:20 393 查看

【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);
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: