如果想要实现窗口全屏,并且还有状态栏,会出现问题,那就是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

最新文章

  1. SVN命令使用详解
  2. MFC之向导页、消息框、文件选择、字体、颜色(三)
  3. 在windows下用FTP命令上传文件到Linux
  4. codeforces #309 div1 D
  5. bzoj1559
  6. BZOJ 1037 生日聚会
  7. 【转】C++箴言:理解typename的两个含义
  8. 10--动作系统(四)动作类中的reverse方法
  9. javascript笔记整理(流程控制)
  10. ASP.NET中的C#基础知识
  11. Tomcat就是这么简单
  12. 【python学习笔记】8.异常
  13. vue-cli 2篇官方文档记录收藏
  14. js 数字前自动补零
  15. vector 的用法--------------自绘资源
  16. JSON错误
  17. 从 TFS 迁移源代码到 git
  18. Mybatis SqlsessionFactory
  19. 关于IE 浏览器的position居中定位的问题和 行块元素的设置问题
  20. Python中的urllib

热门文章

  1. 【Luogu】P1122最大子树和(DFS,树上DP)
  2. 周赛Problem 1108: 蛋糕(二分)
  3. leetcode 376
  4. 【Codeforces Round #506 (Div. 3) 】
  5. 安装sqlServer2012失败补救
  6. Mysql 函数的应用
  7. CCPC-Wannafly Winter Camp Day1 (Div2, online mirror) A,B,C,E,F,I,J
  8. T2639 约会计划 codevs
  9. iOS10你掉坑了吗?
  10. Proximal Gradient Descent for L1 Regularization(近端梯度下降求解L1正则化问题)