共用方式為


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 不再轉換點。 系統會將所有點傳回至其本身座標空間中的應用程式。 此行為會保留大部分應用程式的功能,但有一些例外狀況,您必須進行變更,以確保應用程式如預期般運作。 在這些情況下,請使用 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)