2017-09-26 84 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將我指向正確的方向。 –