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隐藏窗口后调用 MoveWindow,PhysicalToLogicalPoint 仍将失败。
在 Windows 8 中,系统 DPI 感知应用程序使用 PhysicalToLogicalPoint 和 LogicalToPhysicalPoint 在物理空间和逻辑空间之间进行转换。 在 Windows 8.1 中,系统的额外虚拟化和进程间通信意味着,对于大多数应用程序,你不需要这些 API。 因此,在 Windows 8.1 中,PhysicalToLogicalPoint 和 LogicalToPhysicalPoint 不再转换点。 系统将所有点返回到应用程序在其自己的坐标空间中。 此行为保留了大多数应用程序的功能,但有一些例外情况,你必须进行更改以确保应用程序按预期工作。 在这些情况下,请使用 PhysicalToLogicalPointForPerMonitorDPI 和 LogicalToPhysicalPointForPerMonitorDPI。
要求
最低受支持的客户端 | 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 ( |