Blinue / Magpie

An all-purpose window upscaler for Windows 10/11.
GNU General Public License v3.0
9.66k stars 496 forks source link

修正贴靠布局弹窗位置 #749

Closed Blinue closed 1 year ago

Blinue commented 1 year ago

fix #661

修正前: image 修正后: image

这是大部分自定义标题栏的应用都有的问题,但似乎无人关心。经过了很长时间,我终于找到了解决方案。

在贴靠布局弹窗显示之前,窗口会收到 WM_GETOBJECT 消息,因此我猜测 OS 使用 UI Automation 来获取标题栏高度,如果不可用就假设和原生窗口相同。UI Automation 我并不了解,但我们可以变通一下:Win32 控件有默认的 UI Automation 机制,我们只需将一个原生按钮摆放在这里,OS 便会将它当作最大化/还原按钮,从而将贴靠布局弹窗显示在正确的位置。

因此我们有了一个不可见、禁用状态的原生按钮控件,它的高度和标题栏按钮相同,唯一的作用便是修正贴靠布局弹窗的位置。