从使用 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 工具窗口中删除最大化按钮
MFC SDI中,如何删除窗口的最大化和最小化功能(窗口右上角的2个图标)