创建后更改窗口的 dpi 感知
Posted
技术标签:
【中文标题】创建后更改窗口的 dpi 感知【英文标题】:change a window's dpi awareness after creation 【发布时间】:2018-02-09 13:57:54 【问题描述】:我正在为游戏制作者开发 dll,但遇到了一些问题。 我似乎无法更改已创建窗口上的 dpi 设置。 这是真的还是有一些解决方法? 我一直在使用 SetProcessDpiAwareness 和 SetThreadDpiAwarenessContext。 我使用的是 c#,但如果需要,我不介意切换到 c++。
提前致谢。
【问题讨论】:
【参考方案1】:在 Windows 10 之前,DPI 是进程范围和恒定的。从Windows 10 Anniversary Update 开始,您可以动态更改线程 DPI,这被称为 mixed mode DPI scaling,但它仍然不允许您动态更改 Windows DPI:
创建窗口时,其 DPI 感知定义为调用线程当时的 DPI 感知。 调用窗口的窗口过程时,线程会自动切换到创建窗口时使用的 DPI 感知上下文。
我能想到的唯一解决方法是更改线程 DPI 并用您的窗口的新实例替换旧窗口。
【讨论】:
以上是关于创建后更改窗口的 dpi 感知的主要内容,如果未能解决你的问题,请参考以下文章
从外部窗口的 GetWindowRect 获取 DPI 感知正确的 RECT
如何创建与 Windows 7 向后兼容的缩放和大小更改的 Per-Monitor DPI 感知应用程序?