PROCESS_DPI_AWARENESS enumeración (shellscalingapi.h)
Identifica los valores de reconocimiento de puntos por pulgada (ppp). El reconocimiento de PPP indica cuánto trabajo de escalado realiza una aplicación para PPP frente a cuánto hace el sistema.
Los usuarios tienen la capacidad de establecer el factor de escala de PPP en sus pantallas independientemente entre sí. Algunas aplicaciones heredadas no pueden ajustar su escalado para varias configuraciones de PPP. Para que los usuarios usen estas aplicaciones sin que el contenido aparezca demasiado grande o pequeño en las pantallas, Windows puede aplicar virtualización de PPP a una aplicación, lo que hace que el sistema la escale automáticamente para que coincida con el PPP de la pantalla actual. El valor de PROCESS_DPI_AWARENESS indica qué nivel de escalado controla la aplicación por sí solo y cuánto proporciona Windows. Tenga en cuenta que las aplicaciones escaladas por el sistema pueden aparecer borrosas y leerán datos virtualizados sobre el monitor para mantener la compatibilidad.
Syntax
typedef enum PROCESS_DPI_AWARENESS {
PROCESS_DPI_UNAWARE = 0,
PROCESS_SYSTEM_DPI_AWARE = 1,
PROCESS_PER_MONITOR_DPI_AWARE = 2
} ;
Constantes
PROCESS_DPI_UNAWARE Valor: 0 PPP no es consciente. Esta aplicación no se escala para los cambios de PPP y siempre se supone que tiene un factor de escala del 100 % (96 PPP). El sistema escalará automáticamente en cualquier otra configuración de PPP. |
PROCESS_SYSTEM_DPI_AWARE Valor: 1 Reconocimiento de PPP del sistema. Esta aplicación no se escala para los cambios de PPP. Consultará el PPP una vez y usará ese valor durante la vigencia de la aplicación. Si cambia el VALOR de PPP, la aplicación no se ajustará al nuevo valor de PPP. El sistema la escalará o reducirá verticalmente automáticamente cuando cambie el valor del sistema. |
PROCESS_PER_MONITOR_DPI_AWARE Valor: 2 Compatible con PPP por monitor. Esta aplicación comprueba el valor de PPP cuando se crea y ajusta el factor de escala cada vez que cambia el PPP. El sistema no escala automáticamente estas aplicaciones. |
Comentarios
Las versiones anteriores de Windows requerían establecer el reconocimiento de PPP para toda la aplicación. Ahora el reconocimiento de PPP está vinculado a subprocesos, procesos o ventanas individuales. Esto significa que el reconocimiento de PPP puede cambiar mientras se ejecuta la aplicación y que varias ventanas pueden tener sus propios valores de reconocimiento de PPP independientes. Consulte DPI_AWARENESS para obtener más información sobre cómo funciona actualmente el reconocimiento de PPP. Las recomendaciones siguientes sobre cómo establecer el reconocimiento de PPP en el manifiesto de aplicación siguen siendo compatibles, pero la recomendación actual es usar el DPI_AWARENESS_CONTEXT.
Si la aplicación está PROCESS_DPI_UNAWARE, no es necesario establecer ningún valor en el manifiesto de aplicación. PROCESS_DPI_UNAWARE es el valor predeterminado para las aplicaciones a menos que se especifique otro valor.
En versiones anteriores de Windows, no había ninguna configuración para PROCESS_PER_MONITOR_DPI_AWARE. Las aplicaciones no eran conscientes de PPP o de PPP. Las aplicaciones heredadas clasificadas como compatibles con PPP antes de Windows 8.1 se consideran que tienen una configuración de PROCESS_DPI_AWARENESS de PROCESS_SYSTEM_DPI_AWARE en las versiones actuales de Windows.
Una aplicación que sea PROCESS_DPI_UNAWARE siempre usará un factor de escalado del 100 % (96 PPP). En este escenario, se crea una ventana de PROCESS_DPI_UNAWARE con un tamaño de 500 por 500. En la pantalla A, se representará de forma nativa sin escalado. En las pantallas B y C, el sistema escalará verticalmente automáticamente por un factor de 2 y 3 respectivamente. Esto se debe a que un PROCESS_DPI_UNAWARE siempre supone un VALOR de PPP de 96 y el sistema lo tiene en cuenta. Si la aplicación consulta el tamaño de la ventana, siempre obtendrá un valor de 500 por 500 independientemente de la presentación en la que se muestre. Si esta aplicación fuera a pedir el PPP de cualquiera de los tres monitores, recibirá 96.
Ahora considere una aplicación que se PROCESS_SYSTEM_DPI_AWARE. Recuerde que en la muestra, el valor de PPP del sistema es del 200 % o 192 PPP. Esto significa que las ventanas creadas por esta aplicación se representarán de forma nativa en la pantalla B. La ventana se mueve para mostrar A, se reducirá verticalmente automáticamente por un factor de 2. Esto se debe a que una aplicación de PROCESS_SYSTEM_DPI_AWARE en este escenario supone que el PPP siempre será 192. Consulta el PPP en el inicio y, a continuación, nunca lo cambia. El sistema se adapta automáticamente al reducir verticalmente cuando se mueve para mostrar A. Del mismo modo, si la ventana se mueve para mostrar C, el sistema se escalará verticalmente automáticamente por un factor de 1,5. Si la aplicación consulta el tamaño de la ventana, siempre obtendrá el mismo valor, similar a PROCESS_DPI_UNAWARE. Si solicita el PPP de cualquiera de los tres monitores, recibirá 192.
A diferencia de los demás valores de reconocimiento, PROCESS_PER_MONITOR_DPI_AWARE debe adaptarse a la pantalla en la que está activada. Esto significa que siempre se representa de forma nativa y nunca se escala mediante el sistema. La responsabilidad está en la aplicación para ajustar el factor de escala al recibir el mensaje de WM_DPICHANGED . Parte de este mensaje incluye una corrección sugerida para la ventana. Esta sugerencia es la ventana actual que se escala desde el valor de PPP anterior al nuevo valor de PPP. Por ejemplo, una ventana que es de 500 a 500 en la pantalla A y que se mueve a la pantalla B recibirá una corrección de ventana sugerida que es de 1000 a 1000. Si se mueve esa misma ventana para mostrar C, la ventana sugerida adjunta a WM_DPICHANGED será de 1500 a 1500. Además, cuando esta aplicación consulta el tamaño de la ventana, siempre obtendrá el valor nativo real. Del mismo modo, si solicita el PPP de cualquiera de los tres monitores, recibirá 96, 192 y 288 respectivamente.
Debido a la virtualización de PPP, si una aplicación consulta otra con un nivel de reconocimiento diferente para la información dependiente de PPP, el sistema escalará automáticamente los valores para que coincidan con el nivel de reconocimiento del autor de la llamada. Un ejemplo de esto es si llama a GetWindowRect y pasa una ventana creada por otra aplicación. Con la situación descrita anteriormente, supongamos que una aplicación de PROCESS_DPI_UNAWARE creó una ventana de 500 a 500 en la pantalla C. Si consulta la ventana de una aplicación diferente, el tamaño de la corrección variará en función del reconocimiento de PPP de la aplicación.
PROCESS_DPI_UNAWARE | Obtendrá un 500 por 500 rect porque el sistema asume un PPP de 96 y escalará automáticamente el rectán real por un factor de 3. |
PROCESS_SYSTEM_DPI_AWARE | Obtendrá una corrección de 1000 a 1000 porque el sistema asume un PPP de 192 y escalará automáticamente el rectán real por un factor de 3/2. |
PROCESS_PER_MONITOR_DPI_AWARE | Obtendrá una corrección de 1500 en 1500 porque el sistema usará el PPP real de la pantalla y no realizará ningún escalado en segundo plano. |
Ejemplos
En este fragmento de código se muestra cómo establecer un valor de PROCESS_SYSTEM_DPI_AWARE en el manifiesto de aplicación.
<dpiAware>true</dpiAware>
En este fragmento de código se muestra cómo establecer un valor de PROCESS_PER_MONITOR_DPI_AWARE en el manifiesto de aplicación.
<dpiAware>true/PM</dpiAware>
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8.1 [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2012 R2 [solo aplicaciones de escritorio] |
Encabezado | shellscalingapi.h |