从使用 glfw 创建的窗口中删除最大化按钮

Posted

技术标签:

【中文标题】从使用 glfw 创建的窗口中删除最大化按钮【英文标题】:Removing the maximize button from a window created using glfw 【发布时间】:2011-11-07 08:09:21 【问题描述】:

如何从使用glfwopenWindow 函数调用创建的窗口中删除最大化按钮?

目前,我正在做的是:

windowHandle = GetForegroundWindow();
long Style = GetWindowLong(windowHandle, GWL_STYLE);
Style ^= WS_MAXIMIZEBOX;
SetWindowLong(windowHandle, GWL_STYLE, WS_MAXIMIZEBOX);

在哪里,我得到窗口句柄,然后切换最大化位。然后我重新应用窗口样式。但这不起作用,它使窗口完全空白,没有任何按钮或标题栏。无论如何要删除最大化按钮。每当调用 resize 函数时,我都不想更改窗口大小

【问题讨论】:

截图i.imgur.com/7LmEU.png 【参考方案1】:

你的代码有问题,因为你没有传回旧样式,因此清除了除WS_MAXIMIZEBOX之外的所有样式标志,它应该是:

windowHandle = GetForegroundWindow();
long Style = GetWindowLong(windowHandle, GWL_STYLE);
Style &= ~WS_MAXIMIZEBOX; //this makes it still work when WS_MAXIMIZEBOX is actually already toggled off
SetWindowLong(windowHandle, GWL_STYLE, Style);

另外,如果您计划未来的 x64 兼容性,您应该真正使用基于 GetWindowlongPtr 的函数

【讨论】:

+1 表示 GetWindowlongPtr 提及。我总是喜欢让我的代码跨平台移植,尽管我不会这样做。 不要使用GetForegroundWindow,因为不能保证你的窗口是前景窗口。如果您的程序不小心从任务管理器中删除了 MAXIMIZE 按钮,会不会很伤心?大概你已经知道你的窗口句柄了;直接使用即可。 (至少切换到GetActiveWindow,这将为您的线程获取活动窗口。) @raymond:你应该评论 OP 的问题,看到那是他的代码,但你是 100% 正确的

以上是关于从使用 glfw 创建的窗口中删除最大化按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 的 Mac OS X 工具窗口中删除最大化按钮

删除 Tkinter 中的最小化/最大化按钮

MFC SDI中,如何删除窗口的最大化和最小化功能(窗口右上角的2个图标)

从 WPF 窗口隐藏图标

如何在 SwiftUI 生命周期中删除 macOS 中的最大化、最小化和关闭按钮?

WIN7下用CreateWindowEx创建窗口,不要最大化,最小化和关闭按钮?