PhysicalToLogicalPoint 函数 (winuser.h)

将窗口中点的物理坐标转换为逻辑坐标。

语法

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

参数

[in] hWnd

类型:HWND

窗口的句柄,该窗口的转换用于转换。 完全支持顶级窗口。 对于子窗口,仅转换父窗口和子窗口之间的重叠区域。

[in, out] lpPoint

类型: LPPOINT

指向 POINT 结构的指针,该结构指定要转换的物理/屏幕坐标。 如果函数成功,则新的逻辑坐标将复制到此结构中。

返回值

备注

Windows Vista 引入了物理坐标的概念。 桌面窗口管理器 (DWM) 当显示器为高 dpi 时,) 感知窗口 (dpi 缩放非每英寸点数。 屏幕上看到的窗口对应于物理坐标。 应用程序继续在逻辑空间中工作。 因此,应用程序的窗口视图不同于屏幕上显示的视图。 对于缩放窗口,逻辑坐标和物理坐标是不同的。

函数使用 由 hWnd 参数标识的窗口和 POINT 结构中给出的物理坐标来计算逻辑坐标。 逻辑坐标是以编程方式向应用程序显示的 未缩放 坐标。 换句话说,逻辑坐标是应用程序识别的坐标,它可以与物理坐标不同。 然后,API 会将物理坐标替换为逻辑坐标。 新坐标位于桌面上原点为 (0, 0) 的世界 坐标中。 传递给 API 的坐标必须在 hWnd 上。

源坐标以设备单位为单位。

在所有平台上,在宽度或高度为 0 的窗口上, PhysicalToLogicalPoint 将失败;应用程序必须首先通过调用 MoveWindow 等来建立非 0 宽度和高度。 在某些版本的 Windows ((包括 Windows 7) )上,如果在调用 ShowWindow 并SH_HIDE隐藏窗口后调用 MoveWindowPhysicalToLogicalPoint 仍将失败。

在 Windows 8 中,系统 DPI 感知应用程序使用 PhysicalToLogicalPoint 和 LogicalToPhysicalPoint 在物理空间和逻辑空间之间进行转换。 在 Windows 8.1 中,系统的额外虚拟化和进程间通信意味着,对于大多数应用程序,你不需要这些 API。 因此,在 Windows 8.1 中,PhysicalToLogicalPoint 和 LogicalToPhysicalPoint 不再转换点。 系统将所有点返回到应用程序在其自己的坐标空间中。 此行为保留了大多数应用程序的功能,但有一些例外情况,你必须进行更改以确保应用程序按预期工作。 在这些情况下,请使用 PhysicalToLogicalPointForPerMonitorDPILogicalToPhysicalPointForPerMonitorDPI。

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8.1) 中引入的 ext-ms-win-ntuser-window-l1-1-1 (