2017-09-26 8 views
1

J'ai une application MFC qui a la prise en charge MFC DPI par défaut: elle est très sensible au DPI, mais pas au moniteur DPI. Windows 10 version 1703 a ajouté le support pour System (enhanced) DPI scaling. J'ai activé ce mode à partir de Windows Explorer dans les paramètres de compatibilité .exe, et cela fonctionne pour mon application.Mise à l'échelle DPI du système améliorée avec VS2017

Idéalement, je rendrais l'application entièrement compatible DPI multi-moniteur, mais c'est une bonne quantité de travail. Donc, à la place, je veux dire au système d'exploitation d'utiliser la mise à l'échelle DPI (améliorée) du système pour mon application, si le système d'exploitation le prend en charge. Le manifeste des applications le permet-il, et si oui, qu'est-ce qui doit être ajouté ou modifié?

En outre, comment puis-je modifier le manifeste? Actuellement, j'utilise la structure de projet Visual Studio 2017 MFC par défaut, qui n'a pas de fichier manifeste dans mon projet. Au lieu de cela, le contenu du manifeste est spécifié en tant que propriétés du projet et le manifeste est généré avec mt.exe. Puis-je injecter une modification avec mt.exe? Si je dois remplacer le manifeste par un manifeste personnalisé, quel est le moyen le plus simple?

+3

Oui, vous pouvez [activer ce paramètre via votre manifeste] (https://blogs.windows.com/buildingapps/2017/05/19/improving-high-dpi-experience-gdi-based-desktop-apps/) (L'exemple est quelque part vers la fin de cet article). – zett42

+0

Il semble que j'ai besoin des éléments 'asmv3: application',' asmv3: windowsSettings' et 'gdiScaling'. Puis-je les ajouter en tant que changement incrémentiel avec l'approche de génération automatique de mt.exe, ou dois-je explicitement déclarer le manifeste entier à la main? –

+1

Vous pouvez ajouter ceci comme modification incrémentielle via les paramètres du projet> outil manifeste> fichiers manifestes supplémentaires. Les fichiers définis ici sont "fusionnés" avec le fichier généré automatiquement. – zett42

Répondre

5

Ajoutez le paramètre gdiScaling au manifeste de votre application pour indiquer à Windows d'appliquer la mise à l'échelle GDI sur tous les moniteurs. Créez un nouveau fichier GdiScaling.manifest dans votre projet.

<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. Dans les paramètres du projet, dans l'outil Manifest, définissez les fichiers manifest additionnel à GdiScaling.manifest. Cela fusionnera vos paramètres de mise à l'échelle GDI dans le reste du manifeste généré. Lorsque vous construisez, vous obtenez un avertissement sur le fait que Microsoft n'agit pas ensemble, mais vous le saviez déjà. :-) Le texte exact de l'avertissement est le suivant:

    GdiScaling.manifest: création manifeste avertissement 81010002: Unrecognized Element "gdiScaling" dans l'espace de noms "http://schemas.microsoft.com/SMI/2017/WindowsSettings".

    Heureusement, Windows ne s'en soucie pas et reconnaît quand même le paramètre.

+0

Merci à @ zett42 pour m'avoir indiqué dans la bonne direction. –