如何从我的窗口标题栏中移除关闭按钮?
摘要
本文介绍了如何在Windows应用程序窗口中移除或禁用关闭按钮,讨论了不同方法及其对开发者的影响。
<p>偶尔,有人想要创建一个没有关闭按钮的窗口。</p>
<p>唯一移除关闭按钮的方法是完全不要系统菜单:从窗口中移除 <code>WS_<wbr />SYSMENU</code> 样式。但这也会移除最小化和最大化按钮,因此有点极端。</p>
<p>如果您想要系统菜单,或者您想要最小化和最大化按钮,您至少可以通过禁用 <code>SC_CLOSE</code> 菜单项来禁用关闭按钮。</p>
<pre>HMENU menu = GetSystemMenu(hwnd, FALSE);
EnableMenuItem(menu, SC_CLOSE, MF_DISABLED);
</pre>
<p>当然,您可以使用终极选项并实现自己的自定义标题栏。然后您可以随心所欲。但大多数人可能不愿意将事情做到如此极端。</p>
<p>但真的,尽量不要隐藏或禁用关闭按钮。最终用户不喜欢这样。这会让他们感到受困。</p>
<p>文章 <a href="https://devblogs.microsoft.com/oldnewthing/20260911-00/?p=112691">如何从我的窗口标题栏中移除关闭按钮?</a> 首次发表于 <a href="https://devblogs.microsoft.com/oldnewthing">The Old New Thing</a>。</p>
查看缓存全文
缓存时间: 2026/09/14 14:16
# 如何从窗口标题栏移除关闭按钮?- 新事物考古学
来源:https://devblogs.microsoft.com/oldnewthing/20260911-00?p=112691
2026年9月11日
0 条反应
偶尔会有人希望创建一个没有关闭按钮的窗口。
唯一能彻底移除关闭按钮的方法是完全去掉系统菜单:从窗口样式中移除`WS_SYSMENU`属性。但这也会同时移除最小化和最大化按钮,未免过于激进。
如果希望保留系统菜单,或者保留最小化/最大化按钮,至少可以通过禁用`SC_CLOSE`菜单项来使关闭按钮失效:
```
HMENU menu = GetSystemMenu(hwnd, FALSE);
EnableMenuItem(menu, SC_CLOSE, MF_DISABLED);
```
当然也可以选择终极方案——实现完全自定义的标题栏。这样就能为所欲为。但大多数人恐怕不愿采取如此极端的措施。
不过说真的,请尽量不要隐藏或禁用关闭按钮。终端用户会很反感这种做法,这会让他们产生受困的感觉。
### 分类
## 作者
Raymond Chen
Raymond 参与 Windows 系统演化已逾三十年。2003年他创建了名为「新事物考古学」的博客,其受欢迎程度远超他最疯狂的想象,这种发展态势至今仍令他感到毛骨悚然。该博客后来衍生出一本同名著作(Addison Wesley出版社2007年出版)。他偶尔会出现在 Windows 开发文档推特账号上,讲述一些毫无实用价值的故事。
## 后续阅读
## 保持关注
接收新文章发布通知
关注本博客
- https://twitter.com/ChenCravat
- YouTube频道 (https://www.youtube.com/playlist?list=PLlrxD0HtieHge3_8Dm48C0Ns61I6bHThc)
- https://github.com/oldnewthing
- https://devblogs.microsoft.com/oldnewthing/feed/
相似文章
有没有与ClipCursor相反,可以排除光标区域的函数?
一位Windows开发者询问如何排除光标区域,即ClipCursor的反向操作。文章介绍了一种避免闪烁的技术:不移动光标,而是将对象的位置吸附到最近的合法位置。
Captain Kill Switch
Captain Kill Switch 是一款免费、私密且跨平台的工具,允许用户从菜单栏一键关闭所有打开的应用程序,适用于 macOS、Windows 和 Linux。
Microsoft 让 Office 用户移除烦人的 Copilot 按钮
微软正在推出更新,允许 Office 用户移除 Word、Excel 和 PowerPoint 中浮动的 Copilot 按钮,以回应用户关于该按钮遮挡单元格和文档的投诉。
我使用 FILE_FLAG_DELETE_ON_CLOSE 打开了一个文件,但现在我改变主意了
说明 FILE_FLAG_DELETE_ON_CLOSE 是不可逆的,但你可以通过使用 SetFileInformationByHandle 切换删除处置来实现条件删除。
如何告知Windows我正在写入二进制文件?
本文解释了Windows在操作系统层面并没有内置二进制与文本模式的概念;这种区别是由运行时库(如C运行时)处理的。它澄清了Windows将所有文件视为字节,内容转换必须手动执行或通过库来完成。