深入了解WM_SIZE
来源:互联网 发布:网络监控水晶头接法图 编辑:程序博客网 时间:2024/06/12 01:37
在窗口大小发生改变时,系统往窗口发送WM_SIZE消息,WPARAM指出窗口新的状态,LPARAM给出窗口新的大小。窗口的状态有三种:SIZE_MINIMIZE,SIZE_MAXIMIZE,SIZE_RESTORED。系统根据当前窗口的状态,在产生WM_SIZE消息时指定不同的WPARAM。然而,系统如何知道窗口当前的状态。很显然,系统必须用一些内存保存窗口当前的状态。保存在哪里呢?
用spy++观察一个窗口,很快就可以发现在窗口最大化、最小化、正常状态下,style的值是不同的。在最小化时,会多出WS_MINIMIZE,在最大化时会多出WS_MAXIMIZE,在正常状态下则没有这两个值。所以,可断定窗口大小的状态是保存在GWL_STYLE对应的窗口数据结构中。
通过ShowWindow可以改变窗口状态值,通过SetWindowLong也可以达到相同效果。需要注意的是,MoveWindow,SetWindowPos等函数并不会改变这些状态值。只要这些状态值没变,怎么改变窗口的大小都不会影响窗口右上角的系统按钮的显示(即根据不同状态显示最大化按钮还是显示还原按钮)。读者可以做一个小实验,在收到WPARAM为SIZE_RESTORED的WM_SIZE消息时调用SetWindowPos将窗口大小设置为屏幕大小,窗口右上角显示的应该是还原按钮。
说了这么多,只想表达以下两个观点:
1、窗口的最小化、最大化状态是保存在GWL_STYLE对应的内存中,一个窗口当前处于哪个状态是根据GWL_STYLE的值判断的,与窗口的实际大小无关;
2、SetWindowPos, MoveWindow, SetWindowPlacement等函数不会改变窗口的最大化、最小化等状态。
PS:如果调用SetWindowPos, MoveWindow等函数的前后,窗口大小没有发生变化,这些系统调用不会产生WM_SIZE消息。
- 深入了解WM_SIZE
- 深入了解WM_SIZE
- WM_SIZE
- WM_SIZE
- WM_SIZE消息
- 深入了解计算机端口
- 深入了解C语言
- 深入了解C语言
- 深入了解计算机端口
- 深入了解INF文件
- 深入了解路由器
- 深入了解内存
- 深入了解C语言
- 深入了解C语言
- 深入了解DataSet
- 深入了解C语言
- 深入了解JUnit 4
- 深入了解typedef
- PVCBOT【7号A版】疯狂小强二代--避障小车
- OCM备考 一、Server config 之手工创建数据库
- PVCBOT【8号】逐日知了--太阳能追光小车
- 黑马程序员十、交通灯管理系统
- 无法显示 XML 页.名称以无效字符开头。处理资源 'http://localhost/' 时出错。第 1 行,位置: 2
- 深入了解WM_SIZE
- OCM备考 一、Server config 之管理表空间
- BNU - Truchet Tiling-搜索
- OCM备考 一、Server config 之配置shared server
- C++ - 区分new的三种形态
- OCM备考 一、Server config 之网络配置
- 《设计原本》摘记:
- 收藏一些qq面试题
- PVCBOT【9号C版】忐忑者--自平衡双轮小车