windows - 在Windows 8上声明每个窗口的高DPI感知

我正在开发运行在cubase等主机上的音频插件,并希望添加高dpi支持。这是有问题的,因为我知道的所有主机应用程序都声明自己是非高dpi感知的,所以所有窗口都由dwm自动缩放。我正在寻找一种方法来关闭插件窗口的dwm dpi缩放,即使主机本身不知道dpi(因此它对所有其他窗口使用dwm dpi缩放)。有人知道这是否可能吗?
对于使用大量插件的应用程序,例如音频主机,这是一个非常现实的问题,因为它们不能直接声明自己具有高dpi意识:这将破坏所有现有插件。所以除非windows提供了一个解决方案,否则我们总是被困在96 dpi的土地上。基本上,我认为我们需要一个比为每个进程设置这个更细粒度的解决方案,因此主机和插件可以单独声明它们的感知级别。
如果当前无法完成此操作,是否有方法与Microsoft工程师联系,以便将其添加到Windows的未来版本中?

最佳答案

每窗口dpi意识现在是可能的,因为windows 10周年更新。
新的apiSetThreadDpiAwarenessContext()可用于设置每个窗口和每个线程dpi感知。具体如下。
线程现在可以动态更改其dpi awarenss。
由线程创建的窗口的dpi感知将取决于创建窗口时调用线程的dpi感知。
调用窗口的windows过程时,线程将自动切换到创建窗口时正在使用的dpi感知上下文。
请阅读以下参考资料。
https://msdn.microsoft.com/en-us/library/windows/desktop/mt744321(v=vs.85).aspx
https://github.com/Microsoft/Windows-classic-samples/.../DPIAwarenessPerWindow/
(读取自述文件)https://github.com/Microsoft/Windows-classic-samples/tree/96f883e4c900948e39660ec14a200a5164a3c7b7/Samples/DPIAwarenessPerWindow

本文翻译自 https://stackoverflow.com/questions/26647908/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 windows winapi windows-8.1 dpi dpi-aware


相关文章:

c++ - C ++设置动态创建的数组的值失败

c++ - Windows任务管理器中使用哪个函数接收/间隔字节?

c++ - WinApi如何获得MouseWheel缺口?

c++ - C ++在Windows上设置监视器超时

c# - 在Windows Phone 8.1中发布到服务时从HRESULT获取异常:0x80072F0D

c# - VS2013无法加载Windows 8 App的资源文件

windows - 读取日志文件并获取行而不是行

java - 带有GUI工具的Java服务

c++ - 如何在OpenGL或Win32中获取图形卡型号名称?

c# - 通用Windows应用(xaml)中的广告中介