MFC窗口 对拖动的最小范围的限制
第一步:在类向导中,对WM_GETMINMAXINFO消息进行映射
1)如果是单文档视图结构,在CMainFrame类中派生该消息,生成相应的响应函数
2)如果是对话框结构,在CXXXDlg类中派生该消息,生成相应的响应函数
第二步,在生成的响应函数中添加如下代码(本示例是基于单文档视图结构,代码如下
//窗口缩小到的最小范围
#define MINIMUM_WINDOWS_X 1024
#define MINIMUM_WINDOWS_Y 768
void CMainFrame::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 = MINIMUM_WINDOWS_X; // 设置窗口最小宽度
lpMMI->ptMinTrackSize.y = MINIMUM_WINDOWS_Y; // 设置窗口最小高度
lpMMI->ptMaxTrackSize.x = cx; // 设置窗口最大宽度
lpMMI->ptMaxTrackSize.y = cy; // 设置窗口最大高度
CFrameWndEx::OnGetMinMaxInfo(lpMMI);
}
)