尝试在win 32中禁用窗口大小调整时窗口样式行为不一致

时间:2018-04-21 09:40:54

标签: c++ wpf winapi interop pinvoke

我将以下样式应用于我的窗口,我可以调整预期的值(WS_CAPTION,WS_VISIBLE,WS_CLIPSIBLINGS,WS_CLIPCHILDREN,WS_SYSMENU,WS_THICKFRAME,WS_OVERLAPPED,WS_MAXIMIZEBOX,WS_MINIMIZEBOX)。我的目标是删除WS_SYSMENU并禁用调整大小。

然后我删除WS_THICKFRAME并按预期禁用窗口大小调整。然后我还必须删除WS_SYSMENU,但窗口大小调整会返回。

我的最后一组样式是(WS_CAPTION,WS_VISIBLE,WS_CLIPSIBLINGS,WS_CLIPCHILDREN,WS_OVERLAPPED,WS_MAXIMIZEBOX,WS_MINIMIZEBOX)。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

在正常的win32窗口上对我工作正常:

SetWindowLong(hWnd, GWL_STYLE, WS_CAPTION|WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_OVERLAPPED|WS_MAXIMIZEBOX|WS_MINIMIZEBOX);
SetWindowPos(hWnd, 0, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_FRAMECHANGED);

最终样式为0x16C30000和0x00000100。

当您想要删除大小调整边框时,添加WS_POPUP通常会有所帮助。

如果没有WS_SYSMENU,则不会在标题中显示WS_MAXIMIZEBOX和WS_MINIMIZEBOX。您可以通过在系统菜单中禁用SC_CLOSE来disable the close button,如果这是您所追求的......