WM_GETMINMAXINFO的作用
来源:互联网 发布:idea java code style 编辑:程序博客网 时间:2024/06/03 17:23
2012-11-06 14:132013人阅读评论(0)收藏举报
如果想要实现窗口全屏,并且还有状态栏,会出现问题,那就是OnGetMinMaxInfo函数的作用。你可以试一下,如果把这个函数去掉,则当你按下工具栏中的全屏显示按钮时,框架视图确实变大了,但没有想象的那样实现全屏显示,底边留下一个状态栏——一个有些发育不良的全屏显示窗口。为什么会这样呢?经过调试后,发现问题出在WM_GETMINMAXINFO消息的处理上。在Windows中,无论什么时候以何种方式改变窗口的尺寸或大小,是拖拽窗口边缘也好,或是在代码中调用改变窗口尺寸的函数也好,总之不管你用什么方法,Windows都会首先发送WM_GETMINMAXINFO消息。这个消息的意思是说:“嘿,如果你要强迫我的尺寸变大或变小,就附上详细的MINMAXINFO结构信息,否则我用默认值处理。”大多数应用程序都不用显式处理这个 WM_GETMINMAXINFO消息(也就是说让DefWindowProc窗口过程进行缺省处理),而Windows在进行缺省处理时是不会让一个窗口视图比屏幕还大的,所以我们会碰上前面讲的那个问题。解决的方法是:不要让Windows对WM_GETMINMAXINFO消息进行缺省处理,而是由我们自己处理,方法如下:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpmmi){ CSize sz = FullScreenHandler.GetMaxSize(); lpmmi->ptMaxSize = CPoint(sz); lpmmi->ptMaxTrackSize = CPoint(sz);}
这里CFullScreenHandler.GetMaxSize 返回的最大尺寸要比整个屏幕稍微大一点。
CSize CFullScreenHandler::GetMaxSize(){ CRect rc(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN)); rc.InflateRect(10,50); return rc.Size();}MINMAXINFO的结构体:typedef struct { POINT ptReserved; //不用 POINT ptMaxSize; //最大范围 POINT ptMaxPosition; //最大的放置点 POINT ptMinTrackSize; //最小拖动范围 POINT ptMaxTrackSize; //最大拖动范围} MINMAXINFO;最后两个字段的意思:你用鼠标拖动时,它会实时地跟着你的鼠标改变窗口大小,当达到一定值之后, 你再拖它,它也不会变小,这时这个值就是上面说的the minimum tracking width
0 0
- WM_GETMINMAXINFO的作用
- WM_GETMINMAXINFO的作用
- WM_GETMINMAXINFO的作用
- WM_GETMINMAXINFO的作用
- WM_GETMINMAXINFO消息的使用
- WM_GETMINMAXINFO
- 对话框添加“WM_GETMINMAXINFO”的方法,来限制对话框大小
- MoveWindow后OnSize没被调用的原因:WM_GETMINMAXINFO限制了
- windows 消息之WM_GETMINMAXINFO
- MFC Windows 程序设计->控制窗口大小 WM_GETMINMAXINFO
- 作用域::的作用
- 作用域的作用
- 窗口最大化最大最小化关闭按钮超出屏幕 WM_GETMINMAXINFO
- ::的作用
- !!的作用
- Spring的作用、Struts的作用、Hiberante的作用
- 电容的作用?电容器的作用?
- 电话交换机的作用,程控交换机的作用
- php学习之道:坑爹的file_exists
- C++智能指针详解
- php——学习笔记,检索字符串和它的次数,替换字符串
- 编程挑战。三角形问题nlogn的算法
- 商丘市盐业局局长开展5.15碘盐宣传日活动
- WM_GETMINMAXINFO的作用
- Activity生命周期
- android 始终显示overflow菜单
- cocos2dx 3.2 学习篇之三(场景的创建与切换)
- 体制虚化与权力拜物教 (转载)
- 今日眉批-不了了之?
- 01背包水题篇之HDU1864——最大报销额
- Intellij IDEA-maven工程编译报错的解决办法
- MyBatis中Association联合select使用