博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ : 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo,onsizeonsizing
阅读量:6657 次
发布时间:2019-06-25

本文共 1106 字,大约阅读时间需要 3 分钟。

3个消息分别是:WM_SIZEWM_SIZINGWM_GETMINMAXINFO;分别对应相应的处理函数:OnSizeOnSizingOnGetMinMaxInfo

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

OnGetMinMaxInfo

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

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

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

void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)

{

lpMMI->ptMinTrackSize.x = 500; //x宽度

lpMMI->ptMinTrackSize.y = 100; //y高度

 

CDialog::OnGetMinMaxInfo(lpMMI);

}

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

OnSizing

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

void CXXXDlg::OnSizing(UINT fwSide, LPRECT pRect)

{

if ((pRect->right - pRect->left) < 500)

{

//return ; //直接return是无效的,窗口大小还是会改变

pRect->right = pRect->left + 500;

}

 

CDialog::OnSizing(fwSide, pRect);

}

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

OnSize

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

转载于:https://www.cnblogs.com/lujin49/p/4554447.html

你可能感兴趣的文章
区间内无平方因子数
查看>>
1029: C语言程序设计教程(第三版)课后习题8.3
查看>>
[转]DPM2012系列之十八:如何保护工作组计算机
查看>>
[LeetCode]:217:Contains Duplicate
查看>>
C# checked和unchecked运算符
查看>>
蛤车1:两个习题,群作用与覆叠空间,N-S定理
查看>>
set注入
查看>>
【经验】电脑长时间不关机导致的无法开机问题
查看>>
【转】进程的虚拟地址空间
查看>>
JQuery 选择和过滤方法总结(转)
查看>>
存储过程二
查看>>
ulimit的坑
查看>>
java集合框架之Collections
查看>>
3.2.1if语句
查看>>
vivado 波形保存以及arp
查看>>
下拉框里根据选择项不同,显示的图片也不同
查看>>
回顾:Linux环境 Mysql新建用户和数据库并授权
查看>>
第四周作业
查看>>
Android平台Native代码的崩溃捕获机制及实现
查看>>
saltstack之(九)配置管理源码部署Nginx
查看>>