2009-02-21 6 views
2

J'ai un WIN32 SW dont l'interface utilisateur a été conçue en 96 DPI, donc lorsque l'utilisateur change le DPI de Windows de 96 à 120 ou plus, l'interface utilisateur sera erronée. Je veux savoir s'il y a une API pour forcer mon SW à afficher l'interface utilisateur avec 96DPI.À propos du problème DPI

Répondre

1

Il n'y a pas d'API pour forcer votre application à afficher à 96DPI. Le DPI est un paramètre de périphérique et ne peut pas être contrôlé par application.

Si vous pouvez modifier votre programme, vous pouvez redimensionner votre interface utilisateur pour qu'elle s'affiche correctement en haute résolution. Vous devez appeler le GetDeviceCaps; Plus précisément, vous devez calculer l'échelle X et Y en utilisant le nombre renvoyé pour LOGPIXELSX et LOGPIXELSY. Quelque chose comme ceci:

HDC hdc; 
double m_dDPIScaleX = GetDeviceCaps(hdc, LOGPIXELSX)/96.0; 
double m_dDPIScaleY = GetDeviceCaps(hdc, LOGPIXELSY)/96.0; 
2

Vous pouvez également ajouter une clé appcompat pour votre application. La place pour cela dans le registre est:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

Ce sont les par utilisateur les paramètres, il y a la même clé dans HKEY_LOCAL_MACHINE, mais bien sûr, qui est un paramètre du système et exigera des privilèges élevés pour écrire à . Ajout d'une clé comme ceci:

"C:\path\to\app.exe"="HIGHDPIAWARE"

va permettre le drapeau de la compatibilité de votre programme, qui interrompra mise à l'échelle DPI. C'est pour Vista +.

SetProcessDPIAware est également une option, mais sachez qu'il existe un risque de condition de concurrence, selon la documentation.

Questions connexes