Compartir a través de


Descripción de los problemas de escalado de pantalla

Windows Vista y versiones posteriores del sistema operativo permiten a los usuarios cambiar la configuración de puntos por pulgada (ppp) para que la mayoría de los elementos de la interfaz de usuario de la pantalla aparezcan más grandes. En versiones anteriores de Windows, las aplicaciones tenían que implementar el escalado. En Windows Vista y versiones posteriores, el Administrador de ventanas de escritorio (DWM) realiza el escalado predeterminado para todas las aplicaciones que no controlan su propio escalado. Las aplicaciones cliente de Microsoft Automatización de la interfaz de usuario deben tener en cuenta esta característica.

Este tema contiene las siguientes secciones:

Escalado en Windows Vista y versiones posteriores

La configuración de ppp predeterminada es 96, lo que significa que 96 píxeles ocupan el ancho o el alto de una pulgada teórica. La medida exacta de una "pulgada" depende del tamaño y de la resolución física del monitor. Por ejemplo, en un monitor de 12 pulgadas de ancho, con una resolución horizontal de 1280 píxeles, una línea horizontal de 96 píxeles se amplía aproximadamente 9/10 de una pulgada.

Cambiar la configuración de ppp no es lo mismo que cambiar la resolución de pantalla. Con el ajuste de escala ppp , el número de píxeles físicos de la pantalla sigue siendo el mismo. Sin embargo, se aplica el ajuste de escala al tamaño y a la ubicación de los elementos UI. Este escalado se puede realizar automáticamente mediante DWM para el escritorio y para las aplicaciones que no solicitan explícitamente que no se escalen.

En efecto, cuando el usuario establece el factor de escala en 120 ppp, una pulgada vertical u horizontal en la pantalla aumenta en un 25 por ciento. Todas las dimensiones se escalan en consecuencia. El desplazamiento de una ventana de aplicación desde el borde superior y el borde izquierdo de la pantalla aumenta en un 25 %. Si el ajuste de escala de aplicación está habilitado y la aplicación no es para ppp, el tamaño de la ventana aumenta en la misma proporción, junto con los desplazamientos y los tamaños de todos los elementos UI que contiene.

Nota

De forma predeterminada, DWM no realiza el escalado de las aplicaciones no compatibles con ppp cuando el usuario establece el valor de ppp en 120, pero realiza el escalado cuando el valor de ppp se establece en un valor personalizado de 144 o superior. Sin embargo, el usuario puede invalidar el comportamiento predeterminado.

 

El escalado de pantalla crea nuevos desafíos para las aplicaciones a las que les preocupa de cualquier manera las coordenadas de pantalla. La pantalla contiene ahora dos sistemas de coordenadas: físico y lógico. Las coordenadas físicas de un punto son el desplazamiento real en píxeles desde la esquina superior izquierda del punto de origen. Las coordenadas lógicas son los desplazamientos de la manera que serían si se escalaran los propios píxeles.

Supongamos que diseña un cuadro de diálogo con un botón en las coordenadas (100, 48). Cuando este cuadro de diálogo se muestre en el ppp 96 predeterminado, el botón se encuentra en las coordenadas físicas (100, 48). En 120 ppp, se encuentra en las coordenadas físicas (125, 60). Sin embargo, las coordenadas lógicas son las mismas en cualquier configuración ppp: (100, 48).

Las coordenadas lógicas son importantes, ya que hacen que el comportamiento del sistema operativo y las aplicaciones sean coherentes, independientemente de la configuración de ppp. Por ejemplo, normalmente, la función GetCursorPos devuelve las coordenadas lógicas. Si mueve el cursor sobre un elemento de un cuadro de diálogo, se devuelven las mismas coordenadas, independientemente de la configuración de ppp. Si dibuja un control en (100, 100), se dibuja con esas coordenadas lógicas y ocupará la misma posición relativa en cualquier configuración ppp.

Escalado en los clientes de automatización de la interfaz de usuario

La API de UI Automation no usa coordenadas lógicas. Los métodos y propiedades siguientes devuelven coordenadas físicas o toman coordenadas físicas como parámetros.

De forma predeterminada, Automatización de la interfaz de usuario aplicaciones que se ejecutan en un entorno que no está establecido en 96 ppp no obtendrán resultados correctos de estos métodos y propiedades. Por ejemplo, dado que la posición del cursor está en coordenadas lógicas, el cliente no puede pasar estas coordenadas a IUIAutomation::ElementFromPoint para obtener el elemento que está debajo del cursor. Además, la aplicación no podrá colocar correctamente ventanas fuera de su área de cliente.

La solución tiene dos partes.

En primer lugar, haga que la aplicación cliente sea para ppp. Para ello, llame a la función SetProcessDPIAware en el inicio. Esta función hace que todo el proceso sea para ppp, lo que significa que todas las ventanas que pertenecen al proceso sean sin escala.

En segundo lugar, para obtener coordenadas del cursor, llame a la función GetPhysicalCursorPos .