Affichage correct sur un affichage haute résolution
Bien que Direct2D traite de nombreux problèmes de haute résolution pour vous, vous devez suivre deux étapes pour vous assurer que votre application fonctionne correctement sur les affichages haute résolution :
- Étape 1 : utiliser la résolution système en cas de création de Windows
- Étape 2 : déclarer que l’application prend en charge DPI
- Rubriques connexes
Étape 1 : utiliser la résolution système en cas de création de Windows
L’interface ID2D1Factory fournit la méthode GetDesktopDpi pour récupérer la résolution du système. Il fournit les dimensions horizontales et verticales de l’affichage en points par pouce (DPI). Pour utiliser ces valeurs pour définir la largeur d’une fenêtre, utilisez la formule suivante :
<PPP > * horizontal < largeur, en pixels>/<PPP horizontal par défaut>
... où PPP horizontal est la valeur récupérée par GetDesktopDpi et la valeur ppp horizontale par défaut est 96. La formule est similaire pour la taille verticale :
<dpi > * vertical < hauteur, en pixels>/<dpi vertical par défaut>
... où la valeur PPP verticale est la valeur récupérée par la méthode GetDesktopDpi et la valeur ppp verticale par défaut est 96.
Le code suivant utilise la méthode GetDesktopDpi pour récupérer la valeur PPP du système, puis crée une fenêtre 640 × 480, mise à l’échelle en dpi système.
// Because the CreateWindow function takes its size in pixels,
// obtain the system DPI and use it to scale the window size.
FLOAT dpiX, dpiY;
// The factory returns the current system DPI. This is also the value it will use
// to create its own windows.
m_pDirect2dFactory->GetDesktopDpi(&dpiX, &dpiY);
// Create the window.
m_hwnd = CreateWindow(
L"D2DDemoApp",
L"Direct2D Demo App",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
static_cast<UINT>(ceil(640.f * dpiX / 96.f)),
static_cast<UINT>(ceil(480.f * dpiY / 96.f)),
NULL,
NULL,
HINST_THISCOMPONENT,
this
);
Notes
à partir de Windows 8, vous pouvez utiliser la classe Windows :: graphics ::Ds ::D isplayproperties pour récupérer la valeur ppp du système.
Étape 2 : déclarer que l’application est DPI-Aware
Quand une application se déclare être prise en charge DPI, il s’agit d’une instruction spécifiant que l’application se comporte correctement aux paramètres ppp jusqu’à 200 ppp. dans Windows Vista et Windows 7, lorsque la virtualisation DPI est activée, les applications qui ne prennent pas en charge dpi sont mises à l’échelle, et les applications reçoivent des données virtualisées à partir des api système, telles que la fonction GetSystemMetric . Pour déclarer que votre application prend en charge DPI, procédez comme suit.
Créez un fichier appelé DeclareDPIAware. manifest.
Copiez le code XML suivant dans le fichier et enregistrez-le :
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > <asmv3:application> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application> </assembly>Dans le fichier. vcproj du projet, ajoutez l’entrée suivante dans chaque élément de configuration sous VisualStudioProject/configurations :
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />