3.13如何限制 视图的 最大 或 最小 尺寸?

限制MDI窗口尺寸
本文介绍了一种在Windows编程中限制MDI子窗口大小的方法,通过处理WM_GETMINMAXINFO消息并修改MINMAXINFO结构来设定窗口的最小和最大跟踪尺寸。

       在Windows编程中,限制窗口最大或最小尺寸的最佳方法是恰当的处理WM_GETMINMAXINFO消息。然而,必须记住的是用户改变大小的窗口不是视图本身--而是视图的父框架窗口。因此,必须在视图的父框架窗口中处理这种大小的改变。

第1步:使用ClassWizard创建新的CMDIChildWnd派生类,它将实现所希望的视图大小限制。

第2步:使用ClassWizard在新创建的CMDIChildWnd派生类中增加WM_GETMINMAXINFO消息处理函数。该消息处理函数的程序清单如下(它限制了窗口的跟踪尺寸,这样框架窗口的成员区域保持在200X50和400X200像素之间):

 

第3步:选择性的使用ClassWizard在CMDIChildWnd派生类中重载PreCreateWindow()虚函数,该函数的实现清单如下所示(它从窗口风格中移去了WS_MAXIMIZEBOX风格,既最大化按钮):

 

第4步:不要忘记在适当的文档模板中说明视图框架类,以得到所希望的行为。

解释:

当窗口的大小或位置要改变时,Windows给窗口发送WM_GETMINMAXINFO消息。通过处理该消息并修改MINMAXINFO结构中的各个字段,可以明确的重载窗口的 默认的最大位置和尺寸,或者重载它的 最小或最大跟踪尺寸

当使用ClassWizard来处理WM_GETMINMAXINFO消息时,ClassWizard产生一个句柄,原型如下:

 

最大尺寸和位置字段 控制了 当设置窗口为“最大化”状态时的尺寸和位置。

最小和最大跟踪尺寸 分别是 用户使用边界改变窗口大小时,所能达到的最小和最大尺寸。

每个字段都是POINT类型,pt.x和pt.y分别表示了给定大小的宽度和高度。例如lpMMI->ptMinTrackSize.x是允许跟踪的最小宽度,lpMMI->ptMaxTrackSize.y是允许跟踪的最大高度。

关于在第4步中移去Maxmize选项按钮,答案是:如果在处理WM_GETMINMAXINFO消息过程中没有移去这个按钮,那么当框架窗口最大化时就不能正常显示。

附加注释:

在MINMAXINFO结构中赋给ptMinTrackSize和ptMaxTrackSize字段的数值设置了 整个窗口 的跟踪限制,而不仅仅是它的成员区域。因此,这些数值必须考虑到各种接口的窗口小部件(工具栏、滚动栏等等)以及非客户区元素:边界、标题等等。上面程序代码说明了如何计算这些非成员元素的花费。

注意:其它的大部分的解决方案都是使用传统的Windows消息--WM_SIZE、WM_WINDOWPOSCHANGING、WM_WINDOWPOSCHANGED等等--来限制窗口的大小。通常来说,这样做得不到很好的可接受结果。WM_GETMINMAXINFO消息是实现这种功能的最佳选择。

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值