2017-09-26 76 views
1

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

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

应用程序的清单是否可以启用此功能,如果有的话,需要添加或更改哪些内容?

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

+3

是的,你可以[通过你的清单启用该设置](https://blogs.windows.com/buildingapps/2017/05/19/improving-high-dpi-experience-gdi-based-desktop-apps/) (这个例子在那篇文章的结尾附近)。 – zett42

+0

看起来我需要'asmv3:application','asmv3:windowsSettings'和'gdiScaling'元素。我可以使用mt.exe自动生成方法将这些添加为增量更改,还是需要手动明确指出整个清单? –

+1

您可以通过项目设置>清单工具>其他清单文件将其添加为增量更改。在那里定义的文件会与自动生成的文件“合并”。 – zett42

回答

5

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> 
  • 在项目设置,在清单工具,设置附加清单文件到GdiScaling.manifest。这会将您的GDI缩放设置合并到生成的清单的其余部分。
  • 当您构建时,您会收到有关微软未采取行动的警告,但您已经知道这一点。 :-)警告的原文是这样的:

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

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

    +0

    感谢@ zett42将我指向正确的方向。 –