Compartir a través de


Función PhysicalToLogicalPointForPerMonitorDPI (winuser.h)

Convierte un punto de una ventana de coordenadas físicas en coordenadas lógicas, 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 PhysicalToLogicalPointForPerMonitorDPI(
  [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 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

Devuelve TRUE si es correcto o FALSE en caso 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, es posible que una aplicación tenga que 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 en función del 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.

Tenga en cuenta dos aplicaciones, una tiene un valor PROCESS_DPI_AWARENESS de PROCESS_DPI_UNAWARE y la otra tiene un valor de PROCESS_PER_MONITOR_AWARE. La aplicación PROCESS_PER_MONITOR_AWARE 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 valor real de PPP del monitor. Si el PROCESS_DPI_UNAWARE necesita la corrección que el sistema devolvió a la aplicación de PROCESS_PER_MONITOR_AWARE , podría llamar a LogicalToPhysicalPointForPerMonitorDPI para las esquinas de su rección y pasar un identificador a la ventana de la aplicación de PROCESS_PER_MONITOR_AWARE . Esto devolverá puntos en función del reconocimiento de la otra aplicación que se puede usar para crear una corrección. Esto funciona porque, dado que un PROCESS_PER_MONITOR_AWARE usa el ppp real del monitor, las coordenadas lógicas y físicas son idénticas.

Requisitos

   
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

LogicalToPhysicalPointForPerMonitorDPI

PROCESS_DPI_AWARENESS