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.
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.
pour les utilisateurs c++/Win32, voici une bonne référence:Rédaction de Haute résolution Applications Win32.