【发布时间】:2018-02-09 13:57:54
【问题描述】:
我正在为游戏制作者开发 dll,但遇到了一些问题。 我似乎无法更改已创建窗口上的 dpi 设置。 这是真的还是有一些解决方法? 我一直在使用 SetProcessDpiAwareness 和 SetThreadDpiAwarenessContext。 我使用的是 c#,但如果需要,我不介意切换到 c++。
提前致谢。
【问题讨论】:
我正在为游戏制作者开发 dll,但遇到了一些问题。 我似乎无法更改已创建窗口上的 dpi 设置。 这是真的还是有一些解决方法? 我一直在使用 SetProcessDpiAwareness 和 SetThreadDpiAwarenessContext。 我使用的是 c#,但如果需要,我不介意切换到 c++。
提前致谢。
【问题讨论】:
在 Windows 10 之前,DPI 是进程范围和恒定的。从Windows 10 Anniversary Update 开始,您可以动态更改线程 DPI,这被称为 mixed mode DPI scaling,但它仍然不允许您动态更改 Windows DPI:
- 创建窗口时,其 DPI 感知定义为调用线程当时的 DPI 感知。
- 调用窗口的窗口过程时,线程会自动切换到创建窗口时使用的 DPI 感知上下文。
我能想到的唯一解决方法是更改线程 DPI 并用您的窗口的新实例替换旧窗口。
【讨论】: