C++ Windows去掉窗口最大化按钮

5

在调用CreateWindow时,我正在使用以下窗口样式:
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
这将禁用最大化框,但是否有办法完全删除它?


3
我认为因为可用性而移除它是一个不好的想法。关闭按钮左侧紧挨着的按钮始终是最大化,再往左则始终是最小化。更改这些会让人感到困惑。 - IronMensan
@HansPassant - 能否请您提供关于“不可能”的更多信息的链接?很难相信微软不会提供一种方法来实现这个...(但我已经搜索过了,到目前为止无法证明您是错误的 :) 谢谢。 - ryyker
@HansPassant - 实际上,在得出您可能是正确的结论后,我进行了更多的搜索(我发现很难不同意在此网站上拥有400K声望的人:))。我尝试了***这里***的代码,并且它似乎在Windows 7上运行良好。 - ryyker
2个回答

3
没有简单的方法,但如果你要自己绘制标题栏 - 在这种情况下你可以做到。
为了给你一个想法,这篇文章 在窗体标题栏中添加“最小化到托盘”按钮 解释了如何添加一个按钮。移除标准按钮也是大致相同的 - 定制非客户区域.

1
这将从 Windows 7 面板中移除关闭、最小化和最大化按钮。我知道这来得非常晚,但我在此发布它,因为它可能会帮助其他遇到同样问题的人。
void ClearButtons(void)
{
    int index = WS_BORDER;
    unsigned int a = (unsigned int)((WS_BORDER | WS_CAPTION) & (~WS_ICONIC));

    LONG_PTR lPtr;
    HWND hWnd = GetActiveWindow();
    lPtr = GetWindowLongPtr(hWnd, index); 
    SetWindowLongPtr(hWnd, GWL_STYLE, a);  
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接