在Windows 8上声明每个窗口的高DPI认知度

我正在开发在Cubase等主机上运行的audio插件,我正在寻求增加高DPI支持。 这是有问题的,因为我知道的所有主机应用程序都声明自己的DPI是非高的,所以所有的窗口都由DWM自动缩放。 我正在寻找一种方法来closures插件窗口的DWM DPI缩放,即使主机本身不支持DPI(所以它使用所有其他窗口的DWM DPI缩放)。 有谁知道这是可能的吗?

对于使用大量插件(如audio主机)的应用程序来说,这是一个非常现实的问题,因为他们不能直接宣称自己的DPI意识很高:这会破坏所有现有的插件。 所以除非Windows为此提供解决scheme,否则我们总是被困在96 dpi的土地上。 基本上我认为我们需要一个比设置每个进程更细粒度的解决scheme,因此主机和插件可以单独声明他们的感知级别。

如果目前无法完成,是否有办法与Microsoft工程师联系,以便将其添加到未来版本的Windows中?

每窗口从Windows 10周年更新以来,DPI认识现在成为可能。 可以使用新的API SetThreadDpiAwarenessContext()来设置每个窗口,以及每个线程的DPI意识。 这是如下完成的。

  • 一个线程现在可以动态地改变其DPI意识。
  • 由线程创建的窗口的DPI意识将取决于创建窗口时的调用线程的DPI意识。
  • 当调用一个窗口的窗口过程时,线程会自动切换到创建窗口时使用的DPI感知上下文。

阅读以下参考

你在这里运气不好。 新闻部的意识是一个广泛的过程。 在Windows 8.1中,您可以将每个监视器的进程声明为DPI。

正如Raymond在上面评论的那样,没有任何工程能够使像GetCursorPos这样的API函数具有每个窗口的DPI意识,因为这些函数不会被传递到窗口。