4

我正在开发在 Cubase 等主机中运行的音频插件,并且我正在寻找添加高 DPI 支持。这是有问题的,因为我所知道的所有主机应用程序都将自己声明为非高 DPI 感知,因此所有窗口都由 DWM 自动缩放。我正在寻找一种方法来关闭插件窗口的 DWM DPI 缩放,即使主机本身不支持 DPI(因此它对所有其他窗口使用 DWM DPI 缩放)。有谁知道这是否可能?

对于使用大量插件的应用程序,例如音频主机,这是一个非常现实的问题,因为它们不能直接声明自己具有高 DPI 感知能力:这会破坏所有现有插件。因此,除非 Windows 对此提供解决方案,否则我们总是停留在 96 dpi 领域。基本上我认为我们需要一个比设置每个进程更细粒度的解决方案,以便主机和插件可以单独声明它们的感知级别。

如果目前无法做到这一点,是否可以联系 Microsoft 工程师,以便将其添加到未来版本的 Windows 中?

4

2 回答 2

5

自Windows 10 周年更新以来,现在可以感知每窗口 DPI 。新的 API SetThreadDpiAwarenessContext()可用于设置每个窗口和每个线程的 DPI 感知。这是按如下方式完成的。

  • 线程现在可以动态更改其 DPI 感知。
  • 线程创建的窗口的 DPI 感知将取决于创建窗口时调用线程的 DPI 感知。
  • 调用窗口的 windows 过程时,线程会自动切换到创建窗口时正在使用的 DPI 感知上下文。

阅读以下参考资料

于 2016-12-23T16:46:37.327 回答
2

你在这里不走运。DPI 意识是一个过程范围的设置。在 Windows 8.1 中,您可以在每个监视器的基础上声明该进程是 DPI 感知的。

正如 Raymond 上面评论的那样,没有任何工程可以使 API 函数像GetCursorPos具有每个窗口的 DPI 感知一样,因为这些函数不是通过窗口传递的。

于 2014-10-30T20:39:32.210 回答