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消息。

  • 相关阅读:
    天涯何远 咫尺相依
    Load runner 11在多台测试机上执行一个场景的方法
    利用MVC4新特性为站点添加移动视图
    让django像Asp.Net Mvc一样自动匹配Controller和Action
    使用TFS API前提条件:SDKs
    ubuntu手动安装jdk并配置jetty
    [zz] Install rpm in Ubuntu
    64位ubuntu下安装32位jdk
    [zz] Ubuntu11.04安装谷歌输入法
    SpringCloud gateway lb//方式+ nacos 503 三种解决方案
  • 原文地址:https://www.cnblogs.com/fwycmengsoft/p/2956556.html
Copyright © 2011-2022 走看看