zoukankan      html  css  js  c++  java
  • wm_size

    在窗口大小发生改变时,系统往窗口发送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消息。

  • 相关阅读:
    mvn 创建的项目 导入到eclipse
    maven GroupID和ArtifactID
    eclipse配置maven + 创建maven项目
    微服务简介
    spring-boot5代码
    spring-boot5
    TextView及其子类
    RTMP协议
    实现输出h264直播流的rtmp服务器
    Android按键事件传递流程(二)
  • 原文地址:https://www.cnblogs.com/fwycmengsoft/p/2956556.html
Copyright © 2011-2022 走看看