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);