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

简介: 最近用到窗口变化的一些东西,遇到几个相关的消息函数,简要分析,作为备忘。3个消息分别是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分别对应相应的处理函数:OnSize、OnSizing、OnGetMinMaxInfo。

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

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

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

目录
相关文章
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
小程序 前端开发 API
小程序云开发实战四:调用豆瓣API获取具体的数据
小程序云开发实战四:调用豆瓣API获取具体的数据
260 0
|
存储 负载均衡 监控
金鱼哥RHCA回忆录:CL210管理OPENSTACK网络--开放虚拟网络(OVN)简介
第六章 管理OPENSTACK网络--开放虚拟网络(OVN)简介
1976 0
金鱼哥RHCA回忆录:CL210管理OPENSTACK网络--开放虚拟网络(OVN)简介
|
JavaScript 前端开发 Java
Unicode转义(\uXXXX)的编码和解码
  在涉及Web前端开发时, 有时会遇到\uXXXX格式表示的字符, 其中XXXX是16进制数字的字符串表示形式, 在js中这个叫Unicode转义字符, 和\n \r同属于转义字符. 在其他语言中也有类似的, 可能还有其它变形的格式.
2901 0
|
10月前
|
数据采集 存储 前端开发
Puppeteer教程:使用CSS选择器点击和爬取动态数据
本文介绍如何使用Puppeteer结合CSS选择器爬取动态网页数据,以贝壳网的二手房价格为例,通过代理IP提高爬虫成功率。文章详细讲解了Puppeteer的安装和配置、代码实现及数据趋势分析,帮助读者掌握动态网页爬取技术。
386 1
Puppeteer教程:使用CSS选择器点击和爬取动态数据
|
10月前
|
人工智能 机器人 数据库
使用FlowiseAI轻松搭建AI驱动的交互式应用
FlowiseAI 是一款开源低代码工具,旨在帮助开发者构建自定义的语言学习模型应用。它提供拖放界面,支持与多种AI模型和数据库集成,适用于创建聊天机器人等交互式应用。使用阿里云的计算巢,用户可通过一键部署快速启动FlowiseAI,并通过简单的步骤配置和运行自定义的LLM应用。
|
10月前
|
运维 Kubernetes Shell
【赵渝强老师】K8s中Pod的临时容器
Pod 是 Kubernetes 中的基本调度单位,由一个或多个容器组成,包括业务容器、基础容器、初始化容器和临时容器。临时容器用于故障排查和性能诊断,不适用于构建应用程序。当 Pod 中的容器异常退出或容器镜像不包含调试工具时,临时容器非常有用。文中通过示例展示了如何使用 `kubectl debug` 命令创建临时容器进行调试。
174 1
fatal error: alsa/asoundlib.h: 没有那个文件或目录
fatal error: alsa/asoundlib.h: 没有那个文件或目录
533 0
|
存储 监控 算法
云计算中的数据安全与隐私保护策略
随着技术的不断发展,云计算中的数据安全和隐私保护策略也在不断演进。一方面,更加强大的加密算法和技术将为数据加密提供更高的安全性。另一方面,隐私保护协议和机制也将不断完善,以满足用户对隐私保护的需求。同时,数据审计和监控技术也将更加智能化,能够更准确地检测异常行为。
1165 0
云计算中的数据安全与隐私保护策略
TortoiseSVN安装使用教程(超详细)
TortoiseSVN安装使用教程(超详细)
1721 0
TortoiseSVN安装使用教程(超详细)