OnSize、OnSizing和OnGetMinMaxInfo区别分析
来源:互联网 发布:lua调用linux c库 编辑:程序博客网 时间:2024/06/05 15:48
3个消息分别是:WM_SIZE、WM_SIZING、WM_GETMINMAXINFO;分别对应相应的处理函数:OnSize、OnSizing、OnGetMinMaxInfo。
当窗口大小发生变化时,响应的顺序依次是: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。
其中MINMAXINFO 结构体用于控制窗口的大小:
结构体:
typedef struct {
POINT ptReserved;
POINT ptMaxSize;
POINT ptMaxPosition;
POINT ptMinTrackSize;
POINT ptMaxTrackSize;
} MINMAXINFO;
参数说明:
ptMaxSize: 设置窗口最大化时的宽度、高度
ptMaxPosition: 设置窗口最大化时左上角的x坐标、y坐标
ptMinTrackSize: 设置窗口的最小宽度、最小高度
ptMaxTrackSize:设置窗口最大宽度、最大高度
实例:
1、在窗口类映射ON_WM_GETMINMAXINFO消息;
2、在该函数修改MINMAXINFO结构体数据:
void CTestDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMaxSize.x = 800; // 设置窗口最大化时的宽度
lpMMI->ptMaxSize.y = 600; // 设置窗口最大化时的高度
lpMMI->ptMaxPosition.x = 100; // 设置窗口最大化时x坐标
lpMMI->ptMaxPosition.y = 100; // 设置窗口最大化时y坐标
lpMMI->ptMinTrackSize.x = 400; // 设置窗口最小宽度
lpMMI->ptMinTrackSize.y = 400; // 设置窗口最小高度
lpMMI->ptMaxTrackSize.x = 600; // 设置窗口最大宽度
lpMMI->ptMaxTrackSize.y = 500; // 设置窗口最大高度
CDialog::OnGetMinMaxInfo(lpMMI);
}
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
这个函数会在窗口大小改变结束后被调用,通常会在这个函数里重新摆放各个控件的位置及大小。用这个函数暂时没有找到什么办法可以控制窗口的最大最小大小。
转载自:http://www.jb51.net/article/60067.htm
- OnSize、OnSizing和OnGetMinMaxInfo区别分析
- MFC窗口大小变化:OnSIze、OnSizing和OnGetMinMaxInfo区别与关系
- 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- 窗口大小变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- 窗口变化相关消息 OnSize、OnSizing和OnGetMinMaxInfo
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- MFC窗口变化消息( OnSize、OnSizing和OnGetMinMaxInfo)
- 函数onsize()与onsizing()区别
- 函数onsize()与onsizing()区别
- [MFC]Dialog窗口大小调整控制OnSize/OnSizing
- MFC OnShowWindow和OnSize
- OnSize
- OnSize
- 对话框的OnSize()和OnWindowPosChanged()的理解
- 注意mfc下oninitdialog()和onsize()的调用顺序
- 鸡肋代码
- 设计模式之:单例模式
- Git
- 企业如何预防「意外掉电」带来的数据安全威胁?
- c/c++中#include <>与#include""区别
- OnSize、OnSizing和OnGetMinMaxInfo区别分析
- hive 函数
- [C#] Direct2D 学习笔记 (一)vb.net转换为c#
- iOS 图片压缩----微信图片处理策略
- rem布局,移动H5页面布局规范(1)。
- wiki
- 安卓实现扫一扫识别数字
- 目标管理之SMART法则
- Spark运行架构