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