MFC API——》OnGetMinMaxInfo,当改变窗口大小时WM_GETMINMAXINFO
2014-04-11 08:37
676 查看
如果想要实现窗口全屏,并且还有状态栏,会出现问题,那就是OnGetMinMaxInfo函数的作用。你可以试一下,如果把这个函数去掉,则当你按下工具栏中的全屏显示按钮时,框架视图确实变大了,但没有想象的那样实现全屏显示,底边留下一个状态栏——一个有些发育不良的全屏显示窗口。为什么会这样呢?经过调试后,发现问题出在WM_GETMINMAXINFO消息的处理上。在Windows中,无论什么时候以何种方式改变窗口的尺寸或大小,是拖拽窗口边缘也好,或是在代码中调用改变窗口尺寸的函数也好,总之不管你用什么方法,Windows都会首先发送WM_GETMINMAXINFO消息。这个消息的意思是说:“嘿,如果你要强迫我的尺寸变大或变小,就附上详细的MINMAXINFO结构信息,否则我用默认值处理。”大多数应用程序都不用显式处理这个
WM_GETMINMAXINFO消息(也就是说让DefWindowProc窗口过程进行缺省处理),而Windows在进行缺省处理时是不会让一个窗口视图比屏幕还大的,所以我们会碰上前面讲的那个问题。解决的方法是:不要让Windows对WM_GETMINMAXINFO消息进行缺省处理,而是由我们自己处理,方法如下:
重载这个函数,就可限制窗口的最大、最小的值
这里CFullScreenHandler.GetMaxSize返回的最大尺寸要比整个屏幕稍微大一点。
WM_GETMINMAXINFO消息(也就是说让DefWindowProc窗口过程进行缺省处理),而Windows在进行缺省处理时是不会让一个窗口视图比屏幕还大的,所以我们会碰上前面讲的那个问题。解决的方法是:不要让Windows对WM_GETMINMAXINFO消息进行缺省处理,而是由我们自己处理,方法如下:
重载这个函数,就可限制窗口的最大、最小的值
voidCMainFrame::OnGetMinMaxInfo(MINMAXINFO*lpmmi) { CSizesz=FullScreenHandler.GetMaxSize(); lpmmi->ptMaxSize=CPoint(sz); lpmmi->ptMaxTrackSize=CPoint(sz); }
这里CFullScreenHandler.GetMaxSize返回的最大尺寸要比整个屏幕稍微大一点。
CSizeCFullScreenHandler::GetMaxSize() { CRectrc(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)); rc.InflateRect(10,50); returnrc.Size(); } voidCMainWindow::OnGetMinMaxInfo(MINMAXINFO*pMMI) { //固定最小值 pMMI->ptMinTrackSize.x=120; pMMI->ptMinTrackSize.y=120; }
MINMAXINFO的结构体:
typedefstruct{
POINTptReserved;//不用
POINTptMaxSize;//最大范围
POINTptMaxPosition;//最大的放置点
POINTptMinTrackSize;//最小拖动范围
POINTptMaxTrackSize;//最大拖动范围
}MINMAXINFO;
最后两个字段的意思:
你用鼠标拖动时,它会实时地跟着你的鼠标改变窗口大小,当达到一定值之后,
你再拖它,它也不会变小,这时这个值就是上面说的theminimumtrackingwidth
相关文章推荐
- MFC Windows 程序设计->控制窗口大小 WM_GETMINMAXINFO
- 【MFC】WM_GETMINMAXINFO 设置无边框窗口最大花不遮挡任务栏
- 对话框窗口最大化盖住任务栏问题!OnGetMinMaxInfo,WM_GETMINMAXINFO
- MFC窗口大小变化:OnSIze、OnSizing和OnGetMinMaxInfo区别与关系
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- 窗口最大化最大最小化关闭按钮超出屏幕 WM_GETMINMAXINFO
- WM_GETMINMAXINFO限制窗体最大化时的大小_message
- MoveWindow后OnSize没被调用的原因:WM_GETMINMAXINFO限制了
- 对话框添加“WM_GETMINMAXINFO”的方法,来限制对话框大小
- 窗口大小变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- MFC_OnSize_改变窗口大小(WM_SIZE消息映射)
- WM_GETMINMAXINFO 设置窗口最大最小尺寸(无边框窗口不遮挡任务栏)
- [转载]窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- delphi中覆盖最大化消息(WM_GETMINMAXINFO)
- 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- 窗口大小控制MINMAXINFO