【发布时间】: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 函数的调用。"