Visualizzazione corretta in un display DPI elevato
Anche se Direct2D risolve molti problemi con dpi elevati per l'utente, è necessario eseguire due passaggi per assicurarsi che l'applicazione funzioni correttamente nei display con valori DPI elevati.
Passaggio 1: Usare la dpi della finestra dopo la creazione
La funzione GetDpiForWindow recupera il valore dei punti per pollice (dpi) per una finestra specificata. Per usare tale valore per impostare la larghezza di una finestra, usare la formula seguente:
< DPI> * <larghezza, in pixel/<DPI predefinita>>
... dove DPI è il valore retrived by GetDpiForWindow e DPI predefinito è 96 (definito come USER_DEFAULT_SCREEN_DPI
nell'intestazione winuser.h
). La formula è simile per l'asse verticale:
< DPI> * <altezza, in pixel> / <DPI verticale predefinito>
L'esempio di codice nel passaggio 2.3 di Creare un'applicazione Direct2D semplice recupera la DPI di una finestra e quindi imposta la dimensione su 640 × 480, ridimensionata in DPI.
Nota
Per un'app UWP (Piattaforma UWP (Universal Windows Platform)), è possibile usare la proprietà DisplayInformation::LogicalDpi.
Passaggio 2: Dichiarare che l'applicazione è con riconoscimento DPI
Quando un'applicazione dichiara di essere con riconoscimento DPI, è un'istruzione che specifica che l'applicazione si comporta correttamente in impostazioni DPI fino a 200 DPI. In Windows Vista e Windows 7, quando la virtualizzazione DPI è abilitata, le applicazioni non con riconoscimento DPI vengono ridimensionate e le applicazioni ricevono dati virtualizzati dalle API di sistema, ad esempio la funzione GetSystemMetric . Per dichiarare che l'applicazione è con riconoscimento DPI, completare la procedura seguente.
Creare un file denominato DeclareDPIAware.manifest.
Copiare il codice XML seguente nel file e salvarlo:
<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>
Nel file vcproj del progetto aggiungere la voce seguente all'interno di ogni elemento Configuration in VisualStudioProject/Configurations:
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />