【问题标题】: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 函数的调用。"

标签: c windows winapi titlebar


【解决方案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 标志才能使标题栏完全消失。

代表提问者发帖

【讨论】:

    猜你喜欢
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2016-10-26
    • 2012-02-13
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多