如何防止窗口大小暂时调整?

时间:2009-12-01 12:22:31

标签: c++ windows winapi resize

我有一个可以调整大小的窗口,但是在某些情况下由于应用程序状态而无法调整大小。有没有办法防止临时调整窗口大小?

我想通过用户可用的一切方式禁用调整大小,包括窗口菜单,鼠标拖动边缘,操作系统执行的用户启动的窗口平铺 - 以及其他一些我不知道的事情?

4 个答案:

答案 0 :(得分:8)

要保留窗口边框的外观并仍然阻止重新调整大小(和光标更改),请捕获WM_NCHITTEST,将其传递给DefWindowProc,如果返回的代码是大小常量之一,则更改实际返回值以其他方式,例如HTCLIENT

答案 1 :(得分:4)

一种方法是使用GetWindowLong()GWL_STYLE标志来获取窗口样式和
重置/删除您需要的任何styles,即WS_THICKFRAME样式,以便无法调整窗口大小。

您使用SetWindowLong.

应用新样式

答案 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;

我想我可以找到其他案例的类似措施,但至少我需要知道可能导致窗口改变其大小的详尽消息列表。

此外,虽然这确实阻止了窗口调整大小,但我宁愿阻止用户甚至启动调整大小,而不是显然让他调整大小然后拒绝这样做。