【问题标题】:Removing the maximize button from a window created using glfw从使用 glfw 创建的窗口中删除最大化按钮
【发布时间】:2023-03-07 06:31:01
【问题描述】:

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

目前,我正在做的是:

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

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

【问题讨论】:

标签: c++ winapi win32-process glfw


【解决方案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% 正确的
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 2010-09-25
  • 1970-01-01
  • 2011-01-04
  • 2014-10-27
  • 2013-10-10
  • 2011-02-27
相关资源
最近更新 更多