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

vir*_*raj 2 c++ winapi win32-process glfw

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

目前,我正在做的是:

windowHandle = GetForegroundWindow();
long Style = GetWindowLong(windowHandle, GWL_STYLE);
Style ^= WS_MAXIMIZEBOX;
SetWindowLong(windowHandle, GWL_STYLE, WS_MAXIMIZEBOX);
Run Code Online (Sandbox Code Playgroud)

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

Nec*_*lis 5

您的代码被窃听,因为您没有传回旧样式,因此清除所有样式标志除外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);
Run Code Online (Sandbox Code Playgroud)

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

  • 不要使用`GetForegroundWindow`,因为无法保证您的窗口是前景窗口.如果您的程序意外地从任务管理器中删除了MAXIMIZE按钮,那不是很难过吗?大概你已经知道了你的窗把手; 直接使用它.(至少切换到`GetActiveWindow`,它将获得你的线程的活动窗口.) (4认同)