使用VS2017增强了系统DPI缩放

我有一个MFC应用程序具有默认的MFC DPI支持:它是高DPI的意识,但不是每个监视器DPI的意识。 Windows 10版本1703增加了对系统(增强)DPI缩放的支持 。 我在.exe兼容性设置中从Windows资源pipe理器启用了此模式,并且适用于我的应用程序。

理想情况下,我会使应用程序完全多显示器DPI兼容,但这是相当数量的工作。 相反,如果操作系统支持,我想告诉操作系统对我的应用程序使用系统(增强)DPI缩放。

应用程序的清单是否启用了这个function,如果有的话,需要添加或更改哪些内容?

另外,如何修改清单? 目前,我正在使用默认的Visual Studio 2017 MFC项目结构,在我的项目中没有清单文件。 相反,清单的内容被指定为项目属性,清单是使用mt.exe生成的。 我可以使用mt.exe注入更改吗? 如果我需要用自定义的replace清单,最简单的方法是什么?

将gdiScaling设置添加到应用程序的清单中,以告诉Windows在所有显示器上应用GDI缩放。

  1. 在您的项目中创建一个新的文件GdiScaling.manifest
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" manifestVersion="1.0"> <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2017/WindowsSettings"> <gdiScaling>true</gdiScaling> </asmv3:windowsSettings> </asmv3:application> </assembly> 
  1. 在项目设置中,在清单工具中,将附加清单文件设置为GdiScaling.manifest 。 这会将您的GDI缩放设置合并到生成的清单的其余部分。

当你建立起来,你会得到一个关于微软没有共同行动的警告,但是你已经知道了。 :-)警告的确切文本是这样的:

GdiScaling.manifest:清单创作警告81010002:命名空间“ http://schemas.microsoft.com/SMI/2017/WindowsSettings ”中无法识别的元素“gdiScaling”。

幸运的是,Windows并不关心和识别设置。