共用方式為


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 或高度的窗口上失敗;應用程式必須先呼叫 來建立非 0 寬度和高度,例如 MoveWindow。 在某些版本的 Windows (上,包括 Windows 7) ,如果呼叫具有 SH_HIDE的 ShowWindow 之後呼叫 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)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-window-l1-1-1 (於 Windows 8.1)