12
votes

C # Winforms Désactiver la mise à l'échelle DPI

J'ai une application WinForm qui héberge de nombreuses images. Lorsque je pose la demande sur une machine Win7 qui a un DPI de 120, il ruine complètement le look du formulaire. Existe-t-il un moyen de désactiver la mise à l'échelle de mon formulaire?

Je suis conscient du fait que c'est quelque chose qui n'est pas conseillé et que DPI devrait être transparente et traitée par le système d'exploitation. Mais quand il s'agit d'une application à la peau, les images ne sont pas bien à l'échelle. Je n'ai pas le luxe de créer des images pour toutes les variations de DPI, alors ne le suggérez pas comme une réponse.


0 commentaires

4 Réponses :


3
votes

Vous pouvez définir la propriété autoscalemode du formulaire sur Aucun .


1 commentaires

En combinant cela avec une mise à l'échelle manuelle des polices des contrôles (comme suggéré dans une autre solution ici) a résolu le problème pour moi.



10
votes

Vous aurez plus de problèmes lorsque vous modifiez la propriété AutoCalemode. L'augmentation du DPI modifie également la taille de la police système. Nécessairement, les tailles de police sont exprimées en points de 1/72 pouce. Les polices doivent être plus grandes pour obtenir la même taille de point lorsque le DPI augmente et maintient le texte tout aussi lisible lorsqu'il est vu de la même distance.

Étant donné que les commandes ne sont plus redimensionnées, le texte sur, par exemple, un bouton ne correspond plus. Une façon de combattre ceci est de changer la taille de la police sur les commandes proportionnellement. Facile Si vous laissez toutes les commandes hériter de la police, il suffit de modifier la propriété de la police du formulaire met à jour automatiquement les commandes également. L'inconvénient évident est que l'utilisateur aura du mal à lire le texte. Cela devient particulièrement mauvais lorsque le DPI passe à 150 points par pouce et au-delà, votre UI se transforme simplement en un timbre d'affranchissement inutilisable.

Oui, les images d'arrière-plan doivent être réduites pour s'adapter à la commande ou à la forme plus importante. Un pixel dans l'image ne correspond maintenant plus un-à-un à un pixel du moniteur. La valeur graphique par défaut.InterpolationMode est un travail assez décent de filtrage de l'image. Mais cela dépend du type d'image à quel point cela s'avère bien. Une photo presque toujours très bien. L'art de la ligne et le texte finement détaillé ne le font pas. Choisir le bon type d'image va un long chemin à éviter de devoir créer des personnes séparées.

Ce problème ne va pas disparaître jusqu'à ce que les moniteurs commencent à avoir le type de résolution qu'une imprimante a. Nous sommes toujours un long chemin depuis 600 dpi pour les moniteurs de bureau. Les téléphones seront d'abord.


1 commentaires

600 écrans DPI deviennent la réalité. Il suffit de regarder votre téléphone (OK, pas 600 mais 480 sont ici). L'avenir est ici.



9
votes

Ajout d'une ligne de code avant l'appel généré automatiquement sur InitializEcomonent dans le constructeur de form1 résolu pour moi:

public partial class Form1 : Form
{
    public Form1()
    {
        // Make the GUI ignore the DPI setting
        Font = new Font(Font.Name, 8.25f * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
        InitializeComponent();
    }
}


5 commentaires

Ne fonctionne pas du tout sur Windows 10 avec un moniteur 4K échelonné de 150%


En combinant cela avec le réglage automatique de l'autoscalemode en aucun n'a résolu le problème pour moi


Ne fonctionne pas sur Windows 10 avec 150% ou 200%, même avec autoscalemode = Aucun


Cela résouda pour moi sur Windows 10 (1809) 150% à la mise à l'échelle


Utilisation de ActuellePixelsize * 100f / Creategraphics (). DPIY a travaillé pour moi. Cela devrait compenser n'importe quelle mise à l'échelle DPI.



8
votes

Créer un fichier manifeste d'application (cliquez avec le bouton droit de la souris sur Projet / Ajouter / Nouveau poste / fichier d'application) et Définissez cette section: xxx

credies sur ce site: https://www.telerik.com/blogs/ Winforms-Scaling-At-GRAND-DPI-Réglages-IS-IT-MÊME-MÊME -


1 commentaires

Cela a fonctionné pour moi. Le formulaire est toujours à gros pour mon écran portable, mais au moins, cela n'est pas rétréci et de faire des contrôles inaccessibles.