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 不再转换点。 系统在其自己的坐标空间中返回应用程序的所有点。 此行为保留了大多数应用程序的功能,但在某些情况下,必须进行更改以确保应用程序按预期工作。 在这些情况下,请使用 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 (