WM_SIZE、WM_SIZING、WM_GETMINMAXINFO

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

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

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

分类:  C++/C, VC/MFC
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tkinter._Cursor是Tkinter库中的一个内部类,用于表示鼠标光标的样式。它提供了一些预定义的光标样式,可以在Tkinter应用程序中使用。 在Tkinter中,可以使用_Cursor类来设置鼠标光标的样式。可以通过创建_Cursor类的实例来指定光标的样式,并将其应用于Tkinter窗口或其他控件。 以下是一些常用的_Cursor样式: - "arrow":普通箭头光标 - "circle":圆形光标 - "cross":十字形光标 - "dotbox":点框光标 - "exchange":交换箭头光标 - "fleur":花朵形状光标 - "heart":心形光标 - "man":人形光标 - "mouse":鼠标形状光标 - "pirate":海盗形状光标 - "plus":加号形状光标 - "shuttle":航天飞机形状光标 - "sizing":调整大小形状光标 - "spider":蜘蛛形状光标 - "spraycan":喷漆罐形状光标 - "star":星星形状光标 - "target":目标形状光标 - "tcross":十字形光标 以下是一个示例代码,演示如何使用_Cursor类来设置鼠标光标的样式: ```python import tkinter as tk root = tk.Tk() # 创建一个_Cursor实例,设置光标样式为"cross" cursor = tk._Cursor(root, "cross") # 将光标样式应用于Tkinter窗口 root.config(cursor=cursor) root.mainloop() ``` 这样,Tkinter窗口的光标样式将变为十字形状。 需要注意的是,_Cursor类是Tkinter库的内部类,它的使用可能会有一些限制和不确定性。在实际开发中,建议使用Tkinter库提供的其他公共类和方法来设置鼠标光标的样式,以确保代码的可移植性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值