如何完全删除窗口标题栏?

Posted

技术标签:

【中文标题】如何完全删除窗口标题栏?【英文标题】:How to remove window title bar completely? 【发布时间】:2021-12-14 16:08:45 【问题描述】:

所以,在过去,我曾经能够像下面这样进行简单的调用来创建一个没有标题栏或边框的窗口:

a = SetWindowLongA(hwnd, GWL_STYLE, winstyle AND NOT WS_BORDER);

今天早些时候,我刚刚在 Windows 11 上尝试了完全相同的样式代码,但性能不如以前了。

过去,创建的窗口没有ANY 边框或标题栏。现在,我的程序正在创建一个带有黑色/空白标题栏的窗口。没有什么可以交互的,但是窗口仍然为空白标题栏保留空间,程序窗口出现在它下面(这会导致在我们系统上具有不同大小的标题栏和边框的各种计算机上自动单击鼠标时出现问题) .

这是 Windows 11 正在实施的一种新的、永久的类型行为吗?将在将来的更新中修复的故障?或者有没有人有一个简单的解决方法,我可以依靠它,直到我能弄清楚为什么它以前可以工作但现在不行?

【问题讨论】:

注意 SetWindowLong 不支持 64 位应用程序,您需要改用 SetWindowLongPtr。一般来说,我还建议使用来自 MS 的任何 API 的 Wide 或“unicode”版本,A 或 Ansi 版本可能不会像您预期的那样运行。 这并不要求 Win11 行为不端。更改框架样式需要使用 SWP_FRAMECHANGED 样式标志额外调用 SetWindowPos()。 AND NOT WS_BORDER 不是 c,除非 NOT 是按位 NOT ~ 的宏 @mge SetWindowLong 在 64 位 Windows 和 64 位应用程序上受支持。 GWL_STYLE 索引特别适合 32 位内存。无需致电SetWindowLongPtr @IInspectable 请查看我评论中的链接SetWindowLong 明确在 64 位平台上不受支持 "要编写与 32-位和 64 位版本的 Windows,使用 SetWindowLongPtr。在为 32 位 Windows 编译时,SetWindowLongPtr 被定义为对 SetWindowLong 函数的调用。" 【参考方案1】:

我终于解决了这个问题。

Style = (WS_CAPTION | WS_SYSMENU); 
a = SetWindowLongA(hwnd, GWL_STYLE, winstyle & ~WS_BORDER);

问题来自简单地删除 WS_CAPTION 而不是删除 WS_SYSMENU 标志,这最终导致标题栏变成黑色和空白,但并非不存在。我发誓,在我的记忆中,我必须删除的只是过去的 WS_CAPTION(也许在 32 位系统上?),并且它完全从程序中删除了标题栏,但现在情况并非如此。现在需要同时删除 WS_CAPTION 和 WS_SYSMENU 标志才能使标题栏完全消失。

代表提问者发帖

【讨论】:

以上是关于如何完全删除窗口标题栏?的主要内容,如果未能解决你的问题,请参考以下文章

Glut 窗口 - MAC OSX 中的菜单栏

如何创建一个没有菜单、栏、框架、3D 效果等的窗口,并且与另一个窗口的大小完全相同?

如何从 TRichEdit 控件中完全删除选择栏?

Tkinter,Windows:如何在没有标题栏的 Windows 任务栏中查看窗口?

Actionscript 3 - 如何删除菜单栏、滚动条以仅显示空白弹出窗口?

如何在 Android 中完全禁用上下文操作栏?