Mostrar correctamente en una pantalla de valores altos de PPP
Aunque Direct2D soluciona muchos problemas de valores altos de PPP, hay dos pasos que debe seguir para asegurarse de que la aplicación funciona correctamente en pantallas con valores altos de PPP.
Paso 1: Usar el propio PPP de la ventana después de crearla
La función GetDpiForWindow recupera los puntos por pulgada (ppp) de una ventana especificada. Para usar ese valor para establecer el ancho de una ventana, use la fórmula siguiente:
< DPI> * <ancho, en píxeles> / <PPP predeterminado>
... donde PPP es el valor reintentado por GetDpiForWindow y el valor predeterminado de PPP es 96 (definido como USER_DEFAULT_SCREEN_DPI
en el winuser.h
encabezado). La fórmula es similar para el eje vertical:
< DPI> * <alto, en píxeles> / <PPP vertical predeterminado>
El ejemplo de código del paso 2.3 de Creación de una aplicación simple de Direct2D recupera el PPP de una ventana y, a continuación, establece su tamaño en 640 × 480, escalado a ppp.
Nota:
Para una aplicación Plataforma universal de Windows (UWP), puedes usar la propiedad DisplayInformation::LogicalDpi.
Paso 2: Declarar que la aplicación es compatible con PPP
Cuando una aplicación se declara que es compatible con PPP, es una instrucción que especifica que la aplicación se comporta bien en la configuración de PPP de hasta 200 PPP. En Windows Vista y Windows 7, cuando se habilita la virtualización de PPP, se escalan las aplicaciones que no son compatibles con PPP y las aplicaciones reciben datos virtualizados de las API del sistema, como la función GetSystemMetric . Para declarar que la aplicación es compatible con PPP, complete los pasos siguientes.
Cree un archivo denominado DeclareDPIAware.manifest.
Copie el siguiente xml en el archivo y guárdelo:
<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>
En el archivo .vcproj del proyecto, agregue la siguiente entrada dentro de cada elemento Configuration en VisualStudioProject/Configurations:
<Tool Name="VCManifestTool" AdditionalManifestFiles="DeclareDPIAware.manifest" />