【发布时间】:2014-12-26 04:38:59
【问题描述】:
我正在开发在 Cubase 等主机中运行的音频插件,并且我希望添加对高 DPI 的支持。这是有问题的,因为我所知道的所有主机应用程序都将自己声明为非高 DPI 感知,因此所有窗口都由 DWM 自动缩放。我正在寻找一种方法来关闭插件窗口的 DWM DPI 缩放,即使主机本身不支持 DPI(因此它对所有其他窗口使用 DWM DPI 缩放)。有谁知道这是否可能?
对于使用大量插件的应用程序(例如音频主机)来说,这是一个非常现实的问题,因为它们不能直接声明自己支持高 DPI:这会破坏所有现有插件。因此,除非 Windows 对此提供解决方案,否则我们总是停留在 96 dpi 领域。基本上我认为我们需要一个比设置每个进程更细粒度的解决方案,以便主机和插件可以单独声明它们的感知级别。
如果目前无法做到这一点,是否可以联系 Microsoft 工程师,以便将其添加到未来版本的 Windows 中?
【问题讨论】:
-
很好的链接,但不幸的是,似乎只有少数微软产品参与其中。据我所知,一般来说,Windows 没有任何东西。
-
DPI 感知是进程范围的,而不是每个窗口的,因为当您调用
GetCursorPos()时,系统如何知道要咨询哪个窗口的 DPI?没有窗口句柄参数。这个问题无法解决。 -
谢谢雷蒙德。我认为来自你,这一定是明确的答案。 :-) 如果您将此作为答案发布,我会接受。
-
我预计,由于 Windows 8.1 的实现如此混乱,甚至 Windows 8.1 的控制面板都不支持每个显示器的 DPI 感知,没有大量故障,这一切都将得到重建在 Windows 10 中。哦,有趣。为了好玩,请尝试将屏幕分辨率窗口从 96 dpi 的显示器拖到 150+ dpi 的显示器上,然后再拖回来。
标签: windows winapi windows-8.1 dpi dpi-aware