6
votes

Comment obtenir le DPI actuel d'un système dans l'application MFC?

J'ai une application MFC existante qui fonctionne bien en DPI par défaut (96 dpi) sous Windows 7. Mais lorsque j'augmente le DPI de 150%, l'interface utilisateur est déformée. J'ai des problèmes fixes à l'aide de barres de défilement à certains niveaux et de référence à l'article MSDN. Je me demande comment puis-je obtenir le DPI actuel d'un système à l'aide de code MFC afin de définir la hauteur et la largeur d'une boîte de dialogue.

S'il vous plaît suggérer !!


0 commentaires

3 Réponses :


19
votes

Tout d'abord, vous devez obtenir le contexte du périphérique pour votre écran. Ceci est facile, appelez simplement getdc, comme ceci: xxx pré>

puis vous demandez les capacités de l'appareil du contexte de ce périphérique. Dans votre cas, vous avez besoin des pixels le long de l'axe X et Y par pouce: p> xxx pré>

(voir http://msdn.microsoft.com/en-us/library/dd144877 (v = vs.85) .aspx pour plus d'informations sur GetDevicecapaps). p>

Enfin, libérez le contexte de l'appareil: P>

ReleaseDC (0, screen);


0 commentaires

3
votes

Suivre la réponse de Patrick, vous pouvez également aimer lire ce didacticiel Microsoft sur l'écriture d'une interface utilisateur au courant élevé DPI:

http://msdn.microsoft.com/en-us/library/ dd464659.aspx


0 commentaires

0
votes

L'extrait de code ci-dessous m'a donné le DPI correct dans Win7

ID2D1Factory* m_pDirect2dFactory;
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);
FLOAT dpiX, dpiY;
m_pDirect2dFactory->GetDesktopDpi( &dpiX, &dpiY );


2 commentaires

Est-ce exactement le même que getDevicecaps mais Win7 + uniquement.


Non, cela fonctionne également sur Vista SP2 avec la mise à jour de la plate-forme.