5 votes

Application Windows - problèmes d'IAP

Nous avons un problème avec l'une de nos applications existantes basées sur Win32 MFC. Elle ne s'affiche pas correctement sur les écrans qui utilisent des paramètres de ppp élevés. Plus précisément, sous Windows XP avec 120 ppp sélectionnés, il y a plusieurs endroits dans l'application où le texte s'agrandit mais pas ses conteneurs (texte débordant les limites de son bouton, etc.). Cela se produit également dans Windows 7 (et Vista) lorsque >96 dpi est sélectionné et que "utiliser la mise à l'échelle des dpi de style XP" est sélectionné. Si la mise à l'échelle de style XP n'est pas sélectionnée, je comprends que Win7 utilise la virtualisation DPI à la place. Tout semble correct lorsqu'on utilise la virtualisation du DPI (les choses sont floues, mais au moins elles sont correctes). Par défaut dans Win7, 120 dpi utilise la mise à l'échelle de style XP et le paramètre suivant (144 dpi) ne le fait pas. Notre application semble donc correcte à 144 dpi mais fausse à 120 dpi.

Si je modifie le manifeste des applications pour déclarer l'application comme "DPI aware", cela active la virtualisation du DPI (mais pas la mise à l'échelle du DPI à la manière de XP), mais cela ne me mène nulle part. Les choses ont toujours l'air très mauvaises (aucun changement pour 120 dpi, 144 dpi maintenant cassé).

J'ai besoin de résoudre ce problème et j'ai essayé de me documenter sur les problèmes de DPI et de mise à l'échelle en général, mais j'ai beaucoup appris. Jusqu'à présent, je n'ai pas trouvé de solution appropriée. Pour l'instant, je n'ai pas l'intention de faire une correction complète et correcte (l'application met correctement à l'échelle tous les éléments en fonction du dpi). Cela impliquerait BEAUCOUP de réécriture. Je pense qu'il y a vraiment deux solutions possibles. La première consiste à désactiver toute forme de mise à l'échelle du DPI. Cela signifie que si le système Win7 d'un utilisateur est réglé sur 120 dpi, tout ce qui se trouve sur son système aura l'air bon/grand, mais notre application aura l'air correcte mais sera petite par rapport à tout ce qui se trouve dans les autres applications. La deuxième solution consisterait à forcer notre application à utiliser la virtualisation du DPI mais à ne jamais utiliser la mise à l'échelle du DPI à la manière de XP. Je veux que ce soit un changement du côté de l'application et que les utilisateurs finaux ne soient pas obligés de modifier la configuration de Windows.

Jusqu'à présent, je n'ai pas trouvé de moyen de réaliser ces deux solutions.

Quelqu'un de plus compétent en la matière peut-il me répondre et me mettre sur la bonne voie ?

Gracias

2voto

Erik Alsmyr Points 109

Vous ne pouvez pas forcer la virtualisation DPI sur des paramètres 120 DPI. J'ai moi-même étudié cette question pour un produit, car l'aspect flou en haute résolution semblait être un bon compromis.

Nous avons fini par réécrire entièrement le positionnement et la mise à l'échelle de l'interface utilisateur pour qu'elle s'adapte correctement à la mise à l'échelle des polices dans les paramètres DPI élevés. Le client est maintenant entièrement conscient de la DPI et s'adapte correctement à tous les paramètres de DPI.

Le travail pour faire cela correctement a pris à un gars ~3 mois dans notre cas pour un client assez complexe.

Nous avions un plan secondaire que nous n'avons jamais essayé mais qui pourrait vous convenir : Au démarrage, lisez le facteur d'échelle DPI du système d'exploitation. Réduisez ensuite toutes les instances de polices dont vous disposez en fonction de ce facteur, de sorte que lorsque Windows augmente à nouveau la taille des polices, celles-ci retrouvent une taille adaptée à l'interface utilisateur. Bien sûr, les utilisateurs ayant des paramètres DPI élevés n'obtiendront pas des polices plus grandes dans votre application, mais celle-ci sera au moins utilisable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X