zoukankan      html  css  js  c++  java
  • 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo

    最近用到窗口变化的一些东西,遇到几个相关的消息函数,简要分析,作为备忘。

    3个消息分别是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分别对应相应的处理函数:OnSize、OnSizing、OnGetMinMaxInfo。

    当窗口大小发生变化时,响应的顺序依次是:WM_GETMINMAXINFO-->WM_SIZING-->WM_SIZE。

     

    OnGetMinMaxInfo

    这个函数在窗口初始化的时候会被调用一次,当窗口大小发生改变的时候也会被调用。利用这个函数,可以比较方便的实现窗口最大最小尺寸的控制。

    参数lpMMI是一个结构体指针,其中包含了有关窗口的最大化大小和位置以及最小、最大跟踪大小的信息。

    使用这个函数控制窗口最小尺寸的示例的代码如下:

    1. void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)   
    2.  
    3.     lpMMI->ptMinTrackSize.x 500;   //x宽度  
    4.     lpMMI->ptMinTrackSize.y 100;   //y高度  
    5.   
    6.     CDialog::OnGetMinMaxInfo(lpMMI);  
    7.  


    以上代码可以使得窗口大小变化时,最小宽度为500px,最小高度为100px。

     

    OnSizing

    这个函数在窗口大小发生变化时被调用。在这个函数里,也可以控制窗口的最大最小尺寸,但是没有OnGetMinMaxInfo方便。

    1. void CXXXDlg::OnSizing(UINT fwSide, LPRECT pRect)   
    2.  
    3.     if ((pRect->right pRect->left) 500)  
    4.      
    5.         //return  //直接return是无效的,窗口大小还是会改变  
    6.         pRect->right pRect->left 500;  
    7.      
    8.   
    9.     CDialog::OnSizing(fwSide, pRect);  
    10.  

    用上面的方法,如果是从右边改变大小,可以达到想要的效果,但是从左边改变大小,虽然大小可以控制在最小500,但是当达到最小宽度后,再缩小,会发现整个窗口往右移动了,原因是代码中的pRect->right = pRect->left + 500;这句是针对left来改变right的,所以left移动了,right也移动了,看上去就像是这个窗口右移了。所以针对这种情况又要另外做相应的处理。

     

    OnSize

    这个函数会在窗口大小改变结束后被调用,通常会在这个函数里重新摆放各个控件的位置及大小。用这个函数暂时没有找到什么办法可以控制窗口的最大最小大小。

  • 相关阅读:
    linux共享库的版本控制
    c++:自己动手实现线程安全的c++单例类
    c++设计成员变量可动态调整的动态类结构
    c++中std::set自定义去重和排序函数
    python网络编程调用recv函数完整接收数据的三种方法
    c++ 以二进制和以文本方式读写文件的区别
    c++和python如何实现主机字节序和网络字节序的相互转换
    线控性能比拼,MKZ与CRV作为自动驾驶开发平台的全面测评
    css 简易 loading 加载图
    Element UI 中被隐藏的滚动条
  • 原文地址:https://www.cnblogs.com/lidabo/p/3217303.html
Copyright © 2011-2022 走看看