Función LogicalToPhysicalPointForPerMonitorDPI (winuser.h)

Convierte un punto en una ventana de coordenadas lógicas en coordenadas físicas, independientemente de los puntos por pulgada (ppp) del autor de la llamada. Para obtener más información sobre los niveles de reconocimiento de PPP, consulte PROCESS_DPI_AWARENESS.

Sintaxis

BOOL LogicalToPhysicalPointForPerMonitorDPI(
  [in]      HWND    hWnd,
  [in, out] LPPOINT lpPoint
);

Parámetros

[in] hWnd

Identificador de la ventana cuya transformación se usa para la conversión.

[in, out] lpPoint

Puntero a una estructura POINT que especifica las coordenadas lógicas que se van a convertir. Las nuevas coordenadas físicas se copian en esta estructura si la función se realiza correctamente.

Valor devuelto

Devuelve TRUE si se ejecuta correctamente o FALSE de lo contrario.

Comentarios

En Windows 8, las aplicaciones compatibles con PPP del sistema se traducen entre el espacio físico y lógico mediante PhysicalToLogicalPoint y LogicalToPhysicalPoint. En Windows 8.1, la virtualización adicional del sistema y las comunicaciones entre procesos significa que, para la mayoría de las aplicaciones, no necesita estas API. Como resultado, en Windows 8.1, estas API ya no transforman puntos. El sistema devuelve todos los puntos a una aplicación en su propio espacio de coordenadas. Este comportamiento conserva la funcionalidad de la mayoría de las aplicaciones, pero hay algunas excepciones en las que debe realizar cambios para asegurarse de que la aplicación funciona según lo previsto.

Por ejemplo, una aplicación podría necesitar recorrer todo el árbol de ventanas de otro proceso y pedir al sistema información dependiente de PPP sobre la ventana. De forma predeterminada, el sistema devolverá la información basada en el reconocimiento de PPP del autor de la llamada. Esto es ideal para la mayoría de las aplicaciones. Sin embargo, es posible que el autor de la llamada necesite la información basada en el reconocimiento de PPP de la aplicación asociada a la ventana. Esto puede ser necesario porque las dos aplicaciones envían información dependiente de PPP entre sí directamente. En este caso, la aplicación puede usar LogicalToPhysicalPointForPerMonitorDPI para obtener coordenadas físicas y, a continuación, usar PhysicalToLogicalPointForPerMonitorDPI para convertir las coordenadas físicas en coordenadas lógicas basadas en el reconocimiento de PPP del HWND proporcionado.

Considere dos aplicaciones, una tiene un valor de PROCESS_DPI_AWARENESS de PROCESS_DPI_UNAWARE y la otra tiene un valor de PROCESS_PER_MONITOR_AWARE. La aplicación PROCESS_DPI_UNAWARE crea una ventana en un solo monitor donde el factor de escala es del 200 % (192 PPP). Si ambas aplicaciones llaman a GetWindowRect en esta ventana, recibirán valores diferentes. La aplicación PROCESS_DPI_UNAWARE recibirá una corrección basada en coordenadas de 96 PPP, mientras que la aplicación PROCESS_PER_MONITOR_AWARE recibirá coordenadas que coincidan con el PPP real del monitor. Si el PROCESS_PER_MONITOR_AWARE necesita el rect que el sistema devolvió a la aplicación de PROCESS_DPI_UNAWARE , podría llamar a LogicalToPhysicalPointForPerMonitorDPI para las esquinas de su rect y pasar el identificador a la ventana de la aplicación de PROCESS_DPI_UNAWARE . Esto devolverá puntos en función del reconocimiento de la otra aplicación que se puede usar para crear un rect.

Sugerencia  

Dado que una aplicación con un valor de PROCESS_DPI_AWARENESS de PROCESS_PER_MONITOR_AWARE usa el PPP real del monitor, las coordenadas físicas y lógicas son las mismas para esta aplicación.

 

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]
Plataforma de destino Windows
Encabezado winuser.h
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-window-l1-1-4 (introducido en Windows 10, versión 10.0.14393)

Consulte también

PROCESS_DPI_AWARENESS

PhysicalToLogicalPointForPerMonitorDPI