窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo

2023-10-27

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

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

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

 

OnGetMinMaxInfo

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

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

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

[cpp]  view plain copy
  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方便。

[cpp]  view plain copy
  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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo 的相关文章

  • docker获取镜像image id命令_Docker之镜像和容器基础操作命令

    本篇文章是介绍镜像 image 和 容器 container 的基础操作命令 后直接使用英文 image 和 container 替代 首先来讲解释一下 image 和 container 的关系 image 概念 image 就是我们从
  • Blender 建模案例一(1)

    目录 1 指环 1 1 创建一个柱体 1 2 柱体微调 1 3 缩放 1 4 应用缩放 1 5 物体属性回归默认 1 6 进入编辑模式 1 7 内插面 1 8 桥接循环边 1 9 添加表面细分修改器 1 10 平滑着色 1 11 添加环切
  • LTH7锂电池充电IC

    LTH7是一个完善的单片锂离子电池恒流 恒压线形电源管理芯片 它薄的尺寸和小的外包装使它便于便携应用 更值得一提的是 LTH7专门设计适用于USB的供电规格 得益于内部的MOSFET 结构 在应用上不需要外部电阻 和阻塞二极管 在高能量运行
  • libsvm相关变量总结以及libsvm 参数粗调、微调技巧 和PCA主成分分析princomp函数的使用

    libsvm搭建的支持向量机运行起来 在命令行里会蹦出很多变量 开始的时候 我不以为意 现在想想这样糊弄 到最后还是稀里糊涂 不如一次总结 当做日后的复习资料 运行起来会出现这些 1 变量总结 optimization finished i
  • 点击移除样式,再点击新增样式jq代码

    点击增加样式 再点击移除样式的jq function exam back click function if exam back hasClass exam modf5 exam back removeClass exam modf5 el

随机推荐

  • 什么是ui/ux

    目录 前言 1 图形元素 2 布局 3 颜色和视觉效果 4 动画和过渡效果 5 6 用户体验 User Experience UX 7 响应式设计 Responsive Design 8 可用性 Usability 9 信息架构 Infor
  • python firefly 游戏引擎 教程(一) 程序入口

    程序基本结构 程序的基本流程 firefly 基本程序流程如上所示 首先通过master模块分别启动 gate 网关 db 数据库相关 net 网络 chat 聊天 game 游戏逻辑 模块 然后各个模块分别调用initconfig进行初始
  • 入门指南:深入解析OpenCV的copyTo函数及其与rect的应用场景

    文章目录 导言 copyTo函数的示例 copyTo函数与rect的应用场景 结论 导言 OpenCV是一个功能强大的开源计算机视觉库 广泛应用于图像处理和计算机视觉任务 在OpenCV中 copyTo函数是一个重要的图像处理函数 它允许我
  • JAVA-final关键字和接口

    1 Final 关键字 final 关键字代表最终的 不可改变的 final 可以修饰变量 包括类属性 对象属性 局部变量和形参 方法 包括类方法和对象方法 和类 final修饰类 即代表它不能有儿子类 不能被继承 final修饰类 方法
  • Matlab 中 global 全局变量用法

    用法 在主函数里面 你需要设置 a 这个变量是一个全局变量 就需要声明一下 global a 然后在子函数里面你又用到了 a 这个全局变量 你需要在子函数里面再次声明 global a 这样在子函数中 就可以使用 a 这个全局变量了 不用在
  • 插入数据库喊单双引号解决方案(python)

    记录一下最近在写python 将数据持久化时 数据含单引号 双引号问题 数据库中有这样一张表 CREATE TABLE test test id INT NOT NULL AUTO INCREMENT article VARCHAR 45
  • 【VTK】可拖动的坐标轴MovableAxesWidget

    VTK 可拖动的坐标轴MovableAxesWidget 一直想从头写一个vtkWidget来了解vtk 这两天晚上比较空 正好自己选一个交互实现下 vtk官网有一个可以拖动轴的例子MovableAxes 可惜AxesActor继承自Pro
  • ansible playbook的使用

    一 playbook的使用 1 ansible的playbook与临时命令 临时命令可以对一组目标主机进行一项简单的任务 要发挥ansible的真正力量 还需要了解如何使用playbook轻松的对一组目标主机执行多项复杂的任务 playbo
  • 解决centos7 中 使用mariadb 安装mysql不成功的问题

    按照openstack官网的步骤安装openstack Install and configure components Install the packages yum install mariadb mariadb server pyt
  • 无需第三者的交换

    a i a i a index a index a i a index a i a i a index 无需第三者的交换
  • IDEA的使用

    文章目录 2 IDEA的使用 2 1 工具栏 2 2 启动IDEA选择项目 2 3 IDEA重启 2 4 自动提示区分大小写 2 5 tomcat启动中文乱码 2 5 1 修改tomcat 2 5 2 修改IDEA 2 6 jsp改变需要重
  • Alibaba Java Coding Guidelines,Java开发规范IDEA插件

    阿里巴巴Java开发规约 让开发者更加方便 快速将代码规范起来 Alibaba Java Coding Guidelines 是阿里巴巴基于手册内容 研发的一套自动化的IDE检测插件 IDEA Eclipse 安装步骤如下 1 打开 IDE
  • 13.8 asyncio高并发爬虫

    asyncio爬虫 去重 入库 import asyncio import re import aiohttp import aiomysql from pyquery import PyQuery from aiohttp import
  • java Spring Boot生成图片二维码

    首先 我们要引入依赖 pom xml中插入
  • pycharm快捷方式

    Python IDE PyCharm的快捷键大全 1 编辑 Editing Ctrl Space 基本的代码完成 类 方法 属性 Ctrl Alt Space 快速导入任意类 Ctrl Shift Enter 语句完成 Ctrl P 参数信
  • 新计算机c盘太小,电脑C盘太小,F盘太大,怎么重新调整分区容量?

    先在F盘装个系统 重新登陆后再把鼠标右击F盘盘符 注意先看好盘的大小 因为登陆后原来的F盘就成C盘了 原来的C盘名字也会改变成别的 所以事先最好记到多大的是F盘 多大的是C盘 1 单击 开始 控制面板 管理工具 计算机管理 计算机管理 在窗
  • QT系列第9节 文件目录操作

    QT编程中 文件目录操作很常见 现在就将常用的文件目录操作做一个总结 1 文件操作 QFile支持文本文件和二进制文件的操作 主要接口如下 qint64 read char data qint64 maxSize QByteArray re
  • ajax提交datagrid,AJAX DataGrid

    xmlns http tempuri org gt
  • PyTorch RuntimeError: DataLoader worker (pid(s) 15804) exited unexpectedly

    创建于 2021 10 20 1 报错 RuntimeError DataLoader worker pid s 15804 exited unexpectedly 网络上给出了方案 如 cuda 虚拟环境的共享内存不足 增大内存 改成更小
  • 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo

    最近用到窗口变化的一些东西 遇到几个相关的消息函数 简要分析 作为备忘 3个消息分别是 WM SIZE WM SIZING WM GETMINMAXINFO 分别对应相应的处理函数 OnSize OnSizing OnGetMinMaxIn