Détecter la taille de police de windows (100%, 125%, 150)%)

j'ai créé une application qui fonctionne parfaitement jusqu'à ce que l'utilisateur sélectionne 125% ou 150%. Ça briserait ma candidature. J'ai plus tard trouvé un moyen de trouver la taille de la police en détectant le DPI.

cela fonctionnait bien jusqu'à ce que les gens avec des versions chinoises de windows 7 commencent à utiliser mon application. Toute l'application est cassée sur les fenêtres chinoises 7. De ce que je peux dire (Je ne peux pas vraiment le tester car je n'ai que la version anglaise et l'installation les paquets de langue ne cause pas le problème) Les Chinois causent un DPI bizarre qui casse mon application.

mon code actuel fonctionne comme ceci:

if (dpi.DpiX == 120) //For 125% fonts
{
    //Resize form and set default font to correct problems
}
else if (dpi.DpiX == 96) //For 100 and 150% fonts
{
    //Resize form and set default font to correct problems
}

sur les versions anglaises de windows 7 qui fonctionne très bien, mais d'une certaine façon les versions chinoises sautent à droite par ceci, et la forme se détruit, avec des commandes qui n'apparaissent même pas, font extrêmement grand et poussant au-delà du problème, les boîtes d'image étant déplacées.

alors quelle est la bonne façon de détecter l'échelle de police de windows (100%,125%, et 150%) sans la détection de l'API? J'ai besoin de quelque chose de solide qui fonctionnera sur tous les systèmes d'exploitation windows 7 et les langues.

39
demandé sur Jonas 2012-02-21 10:38:25

2 réponses

la façon correcte de gérer les paramètres variables DPI n'est pas de les détecter et d'ajuster les tailles de vos commandes manuellement dans un switch statement (pour commencer, il y a beaucoup plus de possibilités que celles que vous montrez dans votre exemple if déclaration).

à la place, vous devriez définir le AutoScaleMode propriété de votre formulaire AutoScaleMode.Dpi et laissez le framework s'occuper de ça pour vous.

ajouter le code suivant au constructeur de votre formulaire (ou mettre cette propriété à de la conception):

this.AutoScaleMode = AutoScaleMode.Dpi;

Bien que vous pourriez préférer utiliser AutoScaleMode.Font. Pour plus d'informations sur la mise à l'échelle automatique, voir la documentation MSDN.

18
répondu Cody Gray 2012-02-21 07:25:56

pour les utilisateurs c++/Win32, voici une bonne référence:Rédaction de Haute résolution Applications Win32.

5
répondu nspire 2017-08-27 10:56:02