LogicalToPhysicalPoint 函数 (winuser.h)
将窗口中点的逻辑坐标转换为物理坐标。
语法
BOOL LogicalToPhysicalPoint(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
参数
[in] hWnd
类型:HWND
其转换用于转换的窗口的句柄。 完全支持顶级窗口。 对于子窗口,仅转换父窗口和子窗口之间的重叠区域。
[in, out] lpPoint
类型: LPPOINT
指向 POINT 结构的指针,该结构指定要转换的逻辑坐标。 如果函数成功,则新的物理坐标将复制到此结构中。
返回值
无
备注
Windows Vista 引入了物理坐标的概念。 桌面窗口管理器 (DWM) 当显示器为高 dpi 时,) 感知窗口 (dpi 缩放非点/英寸。 屏幕上看到的窗口对应于物理坐标。 应用程序继续在逻辑空间中工作。 因此,应用程序的窗口视图不同于屏幕上显示的视图。 对于缩放窗口,逻辑坐标和物理坐标是不同的。
LogicalToPhysicalPoint 是一个转换 API,可由声明自身为 dpi 感知的进程调用。 函数使用 由 hWnd 参数标识的窗口和 POINT 结构中给定的逻辑坐标来计算物理坐标。
LogicalToPhysicalPoint 函数将 POINT 结构中的逻辑坐标替换为物理坐标。 物理坐标相对于屏幕的左上角。 坐标必须位于 hWnd 的工作区内。
在所有平台上, LogicalToPhysicalPoint 将在宽度为 0 或高度的窗口上失败;应用程序必须先通过调用 MoveWindow 等来建立非 0 宽度和高度。 在某些版本的 Windows ((包括 Windows 7) )上,如果在调用 Show SH_HIDE Window 并隐藏窗口后调用 MoveWindow,LogicalToPhysicalPoint 仍将失败。
在 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 ( |