次の方法で共有


LogicalToPhysicalPoint 関数 (winuser.h)

ウィンドウ内のポイントの論理座標を物理座標に変換します。

構文

BOOL LogicalToPhysicalPoint(
  [in]      HWND    hWnd,
  [in, out] LPPOINT lpPoint
);

パラメーター

[in] hWnd

型: HWND

変換に変換が使用されるウィンドウへのハンドル。 最上位レベルのウィンドウは完全にサポートされています。 子ウィンドウの場合、親ウィンドウと子ウィンドウの間の重複領域のみが変換されます。

[in, out] lpPoint

種類: LPPOINT

変換する論理座標を指定する POINT 構造体へのポインター。 関数が成功すると、新しい物理座標がこの構造体にコピーされます。

戻り値

なし

解説

Windows Vista では、物理座標の概念が導入されています。 デスクトップ ウィンドウ マネージャー (DWM) は、ディスプレイが高 dpi の場合、1 インチあたりのドット数 (dpi) に対応しないウィンドウをスケーリングします。 画面に表示されるウィンドウは、物理的な座標に対応しています。 アプリケーションは引き続き論理空間で動作します。 したがって、アプリケーションのウィンドウビューは、画面に表示されるビューとは異なります。 スケーリングされたウィンドウでは、論理座標と物理座標が異なります。

LogicalToPhysicalPoint は、自身を dpi 対応として宣言するプロセスによって呼び出すことができる変換 API です。 関数は、 hWnd パラメーターで識別されるウィンドウと POINT 構造体で指定された論理座標を使用して、物理座標を計算します。

LogicalToPhysicalPoint 関数は、POINT 構造体の論理座標を物理座標に置き換えます。 物理的な座標は、画面の左上隅を基準にしています。 座標は hWnd のクライアント領域内にある必要があります。

すべてのプラットフォームで、 LogicalToPhysicalPoint は幅が 0 または高さのウィンドウで失敗します。アプリケーションでは、 まず MoveWindow などを呼び出して、0 以外の幅と高さを確立する必要があります。 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 を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-window-l1-1-1 (Windows 8.1 で導入)