【问题标题】:Disable Minimize, Maximize, Close buttons in Win32在 Win32 中禁用最小化、最大化、关闭按钮
【发布时间】:2016-03-20 12:26:24
【问题描述】:

我进行了研究,但没有找到解决问题的方法。 有什么好的方法可以禁用 Win32 中的最小化、最大化和关闭按钮吗?我希望它们仍然存在并具有动画效果,但不敏感。我还希望能够通过拖动框架来调整窗口大小。

【问题讨论】:

    标签: c++ winapi button


    【解决方案1】:

    只需捕获相关事件(WM_SYSCOMMAND 和 WM_CLOSE),并通过返回 0 告诉 Windows 忽略它们。请注意,在 WM_SYSCOMMAND 的情况下,您应该只对您真正想要阻止的事件执行此操作,即事件代码 SC_MINIMIZE, SC_MAXIMIZE 等。其他的都应该允许正常通过。请参阅https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360%28v=vs.85%29.aspx 了解更多信息。

    但是,请注意,如果您提供按钮,用户会期望它们能够正常工作。只是隐藏它们可能是一个更好的选择。您可以通过调用 SetWindowLong (https://msdn.microsoft.com/en-us/library/ms633591%28v=vs.85%29.aspx) 来执行此操作,并更改 GWL_STYLE 属性使其不再包含 WS_MINIMIZEBOX、WS_MAXIMIZEBOX 等标志。

    【讨论】:

    • 如果这是整个答案,我可以同意,但实际上我提供了不少于两个可行的解决方案。不确定性与针对他的确切偏好对这两种解决方案之一进行微调有关,而不是与总体方法有关。
    • 感谢您的回复。第一个解决方案有效,但不是我预期的方式。它禁用了按钮,但同时我无法通过拖动框架来更改窗口的大小,或者我无法从 Windows 的工具栏中将其最小化。我也不确定我应该如何实现 SetWindowLong ?对不起,我还是个新手。
    • 您可能阻止了所有 WM_SYSCOMMAND,而不是特定的相关事件代码。我已经添加了一些说明。
    • H. Guijt - 谢谢它的工作!干得好!
    【解决方案2】:
    SetWindowLong(hwnd, GWL_STYLE,
                   GetWindowLong(hwnd, GWL_STYLE) & ~WS_MINIMIZEBOX); 
    

    您可以将该代码放在窗口初始化的位置。查看https://devblogs.microsoft.com/oldnewthing/20100604-00/?p=13803

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 2013-10-10
      • 2011-03-13
      • 2016-10-04
      • 1970-01-01
      • 2013-04-17
      • 2016-05-17
      • 2012-12-09
      相关资源
      最近更新 更多