Compartir a través de


Función PhysicalToLogicalPoint (winuser.h)

Convierte las coordenadas físicas de un punto de una ventana en coordenadas lógicas.

Sintaxis

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

Parámetros

[in] hWnd

Tipo: HWND

Identificador de la ventana cuya transformación se usa para la conversión. Las ventanas de nivel superior son totalmente compatibles. En el caso de las ventanas secundarias, solo se convierte el área de superposición entre el elemento primario y la ventana secundaria.

[in, out] lpPoint

Tipo: LPPOINT

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

Valor devuelto

None

Observaciones

Windows Vista presenta el concepto de coordenadas físicas. El Administrador de ventanas de escritorio (DWM) escala ventanas que no son puntos por pulgada (ppp) cuando la pantalla es de valores altos de ppp. La ventana que se ve en la pantalla corresponde a las coordenadas físicas. La aplicación sigue funcionando en el espacio lógico. Por lo tanto, la vista de la aplicación de la ventana es diferente de la que aparece en la pantalla. En el caso de las ventanas escaladas, las coordenadas lógicas y físicas son diferentes.

La función usa la ventana identificada por el parámetro hWnd y las coordenadas físicas dadas en la estructura POINT para calcular las coordenadas lógicas. Las coordenadas lógicas son las coordenadas sin escala que aparecen en la aplicación de forma programática. En otras palabras, las coordenadas lógicas son las coordenadas que reconoce la aplicación, que pueden ser diferentes de las coordenadas físicas. A continuación, la API reemplaza las coordenadas físicas por las coordenadas lógicas. Las nuevas coordenadas están en las coordenadas del mundo cuyo origen es (0, 0) en el escritorio. Las coordenadas que se pasan a la API deben estar en hWnd.

Las coordenadas de origen están en unidades de dispositivo.

En todas las plataformas, PhysicalToLogicalPoint producirá un error en una ventana que tenga 0 ancho o alto; En primer lugar, una aplicación debe establecer un ancho y alto distinto de 0 llamando a, por ejemplo, MoveWindow. En algunas versiones de Windows (incluido Windows 7), PhysicalToLogicalPoint seguirá produciendo un error si se ha llamado a MoveWindow después de llamar a ShowWindow con SH_HIDE ha ocultado la ventana.

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, PhysicalToLogicalPoint y LogicalToPhysicalPoint 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. En esos casos, use PhysicalToLogicalPointForPerMonitorDPI y LogicalToPhysicalPointForPerMonitorDPI.

Requisitos

   
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluir Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-window-l1-1-1 (introducido en Windows 8.1)