我有一个可以调整大小的窗口,但是在某些情况下由于应用程序状态而无法调整大小。有没有办法防止临时调整窗口大小?
我想通过用户可用的一切方式禁用调整大小,包括窗口菜单,鼠标拖动边缘,操作系统执行的用户启动的窗口平铺 - 以及其他一些我不知道的事情?
答案 0 :(得分:8)
要保留窗口边框的外观并仍然阻止重新调整大小(和光标更改),请捕获WM_NCHITTEST
,将其传递给DefWindowProc,如果返回的代码是大小常量之一,则更改实际返回值以其他方式,例如HTCLIENT
答案 1 :(得分:4)
一种方法是使用GetWindowLong()和GWL_STYLE
标志来获取窗口样式和
重置/删除您需要的任何styles,即WS_THICKFRAME
样式,以便无法调整窗口大小。
答案 2 :(得分:4)
另一种可能性是处理WM_GETMINMAXINFO消息并设置MINMAXINFO结构,以使窗口的最小和最大大小都是当前大小。然后用户也无法调整窗口大小。
答案 3 :(得分:0)
在窗口过程中的代码似乎处理用户拖动窗口边缘/角落的情况:
case WM_SIZING:
RECT &rc = *(LPRECT) lParam;
RECT windowRect;
GetWindowRect(hwnd, &windowRect);
rc = windowRect;
return 0;
我没有找到任何阻止系统在平铺/级联窗口时调整窗口大小的内容。我希望以下可能会做到这一点,但似乎没有:
case WM_SIZE:
return TRUE;
我想我可以找到其他案例的类似措施,但至少我需要知道可能导致窗口改变其大小的详尽消息列表。
此外,虽然这确实阻止了窗口调整大小,但我宁愿阻止用户甚至启动调整大小,而不是显然让他调整大小然后拒绝这样做。