Comment configurer une application de s'exécuter correctement sur une machine avec une haute résolution (par exemple 150%)?
J'ai créé une simple application Winforms en C#. Quand je lance l'application sur un ordinateur avec haute résolution (par exemple 150%), l'application est mise à l'échelle. So far So good!
Mais au lieu de rendre les polices avec une augmentation de la taille de la police, tous les textes sont juste à grande échelle, aussi. Qui bien sûr conduit à de très floue texte (sur toutes les commandes comme des boutons, etc.).
Ne devrait pas windows prendre soin de rendre les textes correctement? Par exemple, mon application de la barre de titre est rendu croustillant & clair.
Vous devez vous connecter pour publier un commentaire.
Une fois que vous allez au-delà de 100% (ou 125% avec le "style XP DPI" case cochée), Windows par défaut au cours de la mise à l'échelle de votre INTERFACE utilisateur. Il le fait en ayant votre application de rendu sa sortie à une image bitmap et dessin bitmap à l'écran. Le changement d'échelle de l'image bitmap rend le texte inévitablement sembler floue. Une fonctionnalité appelée "DPI virtualisation", il garde les anciens programmes utilisables sur la haute résolution des écrans.
Vous devez explicitement laisser savoir que vous pouvez gérer les paramètres PPP plus élevés en ajoutant le
<dpiAware>
élément à votre manifeste. La page MSDN est ici mais il n'est pas complet puisqu'il est en omettant les paramètres de contrôle de compte d'utilisateur. Projet + Ajouter un Nouvel Élément, choisissez "Fichier de Manifeste d'Application". Modifier le manifeste de texte ou de le copier/coller ceci:Vous pouvez également pinvoke SetProcessDPIAware() dans votre méthode main (), nécessaire par exemple, si vous déployez avec ClickOnce:
Mise à JOUR, ce besoin commun est finalement un peu plus facile si vous utilisez VS2015 mise à Jour de 1 ou plus. L'ajout manifeste a déjà la directive en la matière, il suffit de retirer les commentaires.
Mot clé de recherche, afin que je puisse trouver ce post de retour: dpiAware
SetProcessDPIAware
est obsolète, et il ne fonctionne pas correctement (du moins pas dans Win8.1), sont imprévisibles de mise à l'échelle sur les différents contrôles. Je recommande fortement d'utiliser le manifeste approche à la place.Applications peuvent être développées dans deux modes différents.
La première est de déclarer notre application non-DPI-courant (de ne pas déclarer tout défaut de cela). Dans ce cas, le système d'exploitation va rendre notre application en vertu de la devrait 96 DPI et puis se faire à l'image de mise à l'échelle que nous avons discuté avant. Le résultat sera une image floue à la recherche de l'application, mais avec une bonne mise en page.
La deuxième option est de constater que la demande en tant que PPP-conscient. Dans ce cas, l'OS ne sera d'aucune mise à l'échelle et permettra à votre application de rendu en fonction de l'origine de DPI de l'écran. Dans le cas d'une par-moniteur-PPP environnement, votre demande sera rendu avec la plus haute résolution de tous les écrans, alors, cette image sera réduite à la taille appropriée pour chaque moniteur. La désagrégation des résultats dans une meilleure expérience de visionnement de l'upscaling, mais vous pouvez toujours l'avis de certains flou de bougé.
Si vous voulez éviter cela, vous devez déclarer votre application en tant que par moniteur-DPI-conscient. Ensuite, vous devez détecter le moment où votre demande est traîné à travers les différents moniteurs et de rendu en fonction de la résolution de l'actuel.
De déclarer la résolution prise de conscience se fait dans un fichier manifest.
consulter le lien suivant stackoverflow
Aucune de ces suggestions n'a fonctionné pour moi, mais, quelque chose s'est passé après que j'ai enlevé le
Form.Font = new
... à partir de laForm.Design.cs
, la forme commence à re-à l'échelle correctement, il fonctionne si la Police est définie dans le constructeur ou pas du tout. Pourquoi? quelqu'un d'autre peut être en mesure d'expliquer, je ne peux parler de la modification que j'ai faite et m'a pris quelques minutes à compris qu'il était la cause de la forme, j'ai été travailler sur. Espérons que cela aide.À l'aide .NET Framework 4.7 et Windows 10 Créateurs de mise à Jour ou version plus récente, vous devez faire les choses suivantes pour configurer la haute DPI soutien pour votre application Windows Form:
Déclarer la compatibilité avec Windows 10.
Pour ce faire, ajoutez les lignes suivantes à votre
manifest
fichier:Activer par moniteur DPI prise de conscience dans la
app.config
fichier.Windows Forms présente une nouvelle Système.De Windows.Les formulaires.ApplicationConfigurationSection élément à l'appui de nouvelles fonctionnalités et personnalisations ajouté en commençant par la .NET Framework 4.7. Pour profiter des nouvelles fonctionnalités qui prennent en charge des résolutions élevées, ajoutez les lignes suivantes à votre fichier de configuration d'application.
Important
Dans les versions précédentes de l' .NET Framework, vous avez utilisé le manifeste pour ajouter DPI élevé de soutien. Cette démarche n'est plus recommandée, car elle remplace les paramètres définis dans l'application.fichier de configuration.
Appel de la statique EnableVisualStyles méthode.
Ce devrait être le premier appel de la méthode dans votre application point d'entrée. Par exemple:
L'avantage, c'est le soutien à la dynamique DPI scénarios dans lesquels l'utilisateur modifie le DPI ou facteur d'échelle après une application Windows Forms a été lancé.
Source: Haute résolution prise en charge dans Windows Forms