windows窗口取消贴屏幕上边自动最大化的方法

本文介绍如何在Windows应用程序中禁用窗口的最大化按钮和自动排列功能,包括取消WS_SIZEBOX和WS_MAXIMIZEBOX属性的方法,以及通过系统设置API避免窗口在拖动到屏幕边缘时自动最大化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对于固定大小的窗口,直接取消掉WS_SIZEBOX属性即可。

LONG styleValue = ::GetWindowLong(hWnd, GWL_STYLE);
styleValue &= ~WS_SIZEBOX;
::SetWindowLong(hWnd, GWL_STYLE, styleValue);

这样有一个问题,就是对于可以拖拽边框自由调整窗口大小的需求,满足不了,不设置WS_SIZEBOX,就不方便自由拖拽来调整大小了。

2.对于可以自由拖拽边框来调整大小的窗口,则取消掉WS_MAXIMIZEBOX属性即可

LONG styleValue = ::GetWindowLong(hWnd, GWL_STYLE);
styleValue &= ~WS_MAXIMIZEBOX;
::SetWindowLong(hWnd, GWL_STYLE, styleValue);

这样也有一个问题,取消掉了窗口的最大化的属性,比如原先的双击标题栏最大化,都会受影响。

3.改系统设置,通过 Windows 7 的“轻松访问中心”-“使鼠标更易于使用”,选中“防止将窗口移动至屏幕的边缘时自动排列窗口”,关闭 Windows 7 的自动窗口最大化。也可以通过如下代码实现(代码抄的论坛某位大佬的回帖):

#ifndef SPI_GETWINARRANGING
#define SPI_GETWINARRANGING 0x0082
#endif
#ifndef SPI_SETWINARRANGING
#define SPI_SETWINARRANGING 0x0083
#endif
#ifndef SPI_GETSNAPSIZING
#define SPI_GETSNAPSIZING   0x008E
#endif
#ifndef SPI_SETSNAPSIZING
#define SPI_SETSNAPSIZING   0x008F
#endif
// 拖拽前
BOOL fWinArrange;
BOOL fSnapSizing;
SystemParametersInfo(SPI_GETWINARRANGING, 0, (LPVOID)&fWinArrange, 0);
SystemParametersInfo(SPI_GETSNAPSIZING, 0, (LPVOID)&fSnapSizing, 0);
SystemParametersInfo(SPI_SETWINARRANGING, 0, (LPVOID)TRUE, 0);
SystemParametersInfo(SPI_SETSNAPSIZING, 0, (LPVOID)FALSE, 0);
// 拖拽后
SystemParametersInfo(SPI_SETWINARRANGING, 0, (LPVOID)fWinArrange, 0);
SystemParametersInfo(SPI_SETSNAPSIZING, 0, (LPVOID)fSnapSizing, 0);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值