我正在开发在 Cubase 等主机中运行的音频插件,并且我希望添加高 DPI 支持。这是有问题的,因为据我所知,所有主机应用程序都将自己声明为非高 DPI 感知,因此所有窗口都会由 DWM 自动缩放。我正在寻找一种方法来关闭插件窗口的 DWM DPI 缩放,即使主机本身不支持 DPI(因此它对所有其他窗口使用 DWM DPI 缩放)。有谁知道这是否可能?
对于使用大量插件的应用程序(例如音频主机),这是一个非常现实的问题,因为它们不能直接声明自己具有高 DPI 感知能力:这会破坏所有现有插件。因此,除非 Windows 提供解决方案,否则我们始终会陷入 96 dpi 的困境。基本上我认为我们需要一个比设置每个进程更细粒度的解决方案,以便主机和插件可以单独声明它们的感知级别。
如果目前无法完成此操作,是否可以联系 Microsoft 工程师以便将其添加到 future 版本的 Windows 中?
最佳答案
自Windows 10 周年更新以来,现在可以感知每个窗口的 DPI。 新的 API SetThreadDpiAwarenessContext() 可用于设置每个窗口和每个线程的 DPI 感知。这是按如下方式完成的。
- 线程现在可以动态更改其 DPI 感知。
- 线程创建的窗口的 DPI 感知将取决于创建窗口时调用线程的 DPI 感知。
- 当调用窗口的窗口过程时,线程会自动切换到创建窗口时正在使用的 DPI 感知上下文。
阅读以下引用资料。
关于windows - 在 Windows 8 上声明每个窗口的高 DPI 感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55796472/