移动到不同的屏幕时,MoveWindow 不会缩放 window

MoveWindow does not scale the window when moving to a different screen

我有一个 Windows 带有浮动 windows 的应用程序。我 运行 它采用 multi-monitor 设置(FHD,4K)。该应用程序被标记为 system-aware,因此我们为主监视器选择当前 DPI 值并根据该值进行缩放。之后,OSbitmap-scales就可以了。该应用程序是 运行 Windows 10.

现在,当其中一个浮动 windows 被拖动到另一台显示器时,OS bitmap-scales 它会自动运行,一切正常。

问题是我们有一些 windows 没有标题栏,我们有代码通过从 window 的客户区拖动来移动那些 windows。当鼠标松开时,我们调用MoveWindow()API将window移动到目标位置。这在单个显示器上工作正常,但是当我们将 window 放在不同的显示器上时,它不会 bitmap-scale,它似乎丢失了它的放置位置。 OS 似乎只有当我们拖动 window 的标题栏时才会 bitmap-scale 而不是当它以编程方式移动时。

关于在以编程方式移动 window 时如何实现这种自动缩放的任何想法?

所以这取决于 window 是如何创建的。我通过使用 WS_CAPTION 样式创建 window 然后稍后删除该样式来修复它。我不确定它在内部做了什么,但现在当它通过鼠标拖动或使用 API(例如 MoveWindow.

移动到另一个屏幕时可以正确缩放
::CreateWindowEx(WS_EX_PALETTEWINDOW,...,..., WS_POPUP | WS_CAPTION,...);
::SetWindowLong(hWnd, GWL_STYLE, ::GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION);