J'ai créé une application qui fonctionne parfaitement jusqu'à ce que l'utilisateur sélectionne 125% ou 150%. Cela casserait ma candidature. Plus tard, j'ai trouvé un moyen de trouver la taille de la police en détectant le DPI.
Cela fonctionnait très bien jusqu'à ce que les gens avec des versions chinoises de Windows 7 commencent à utiliser mon application. L'application entière se casse sur Windows 7 chinois. D'après ce que je peux dire (je ne peux pas vraiment le tester car je n'ai que la version anglaise et l'installation des modules linguistiques ne cause pas le problème), les caractères chinois provoquent un DPI étrange 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, cela fonctionne très bien, mais en quelque sorte les versions chinoises sautent à droite par cela, et le formulaire se détruit, avec des contrôles qui ne s'affichent même pas, une police extrêmement grande et dépassant le problème, les zones d'image étant déplacées.
Alors, quel est un bon moyen de détecter l'échelle de police Windows (100%, 125% et 150%) sans détecter le DPI? J'ai besoin de quelque chose de solide qui fonctionnera sur tous les systèmes d'exploitation et toutes les langues de Windows 7.
La bonne façon de gérer les paramètres DPI variables n'est pas de les détecter et d'ajuster manuellement la taille de vos contrôles dans une instruction switch
(pour commencer, il y a beaucoup plus de possibilités que celles que vous montrez dans votre exemple if
déclaration).
Au lieu de cela, vous devez définir la propriété AutoScaleMode
de votre formulaire sur AutoScaleMode.Dpi
et laissez le framework s'en occuper pour vous.
Ajoutez le code suivant au constructeur de votre formulaire (ou définissez cette propriété au moment du design):
this.AutoScaleMode = AutoScaleMode.Dpi;
Même si vous préférez utiliser AutoScaleMode.Font
. Pour plus d'informations sur la mise à l'échelle automatique, consultez la documentation MSDN .
Pour les utilisateurs C++/Win32, voici une bonne référence: Écriture d'applications Win32 haute résolution .
si vous utilisez une version plus récente de Windows, je recommande de réinstaller les pilotes de votre carte graphique (par exemple, installer une version plus récente) J'ai eu le même problème, mon échelle d'affichage a été réglée à 100% mais la police était loin. j'espère que cela résout votre problème