LogicalToPhysicalPointForPerMonitorDPI 関数 (winuser.h)
呼び出し元のドット/インチ (dpi) の認識に関係なく、ウィンドウ内のポイントを論理座標から物理座標に変換します。 DPI 認識レベルの詳細については、「 PROCESS_DPI_AWARENESS」を参照してください。
構文
BOOL LogicalToPhysicalPointForPerMonitorDPI(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
パラメーター
[in] hWnd
変換に変換が使用されるウィンドウへのハンドル。
[in, out] lpPoint
変換する論理座標を指定する POINT 構造体へのポインター。 関数が成功すると、新しい物理座標がこの構造体にコピーされます。
戻り値
成功した場合は TRUE 、それ以外の場合 は FALSE を 返します。
注釈
Windows 8では、システム DPI 対応アプリケーションは、PhysicalToLogicalPoint と LogicalToPhysicalPoint を使用して物理空間と論理空間の間で変換されます。 Windows 8.1では、システムとプロセス間通信の仮想化が追加されるため、ほとんどのアプリケーションでは、これらの API は必要ありません。 その結果、Windows 8.1では、これらの API はポイントを変換しなくなります。 システムは、独自の座標空間内のアプリケーションへのすべてのポイントを返します。 この動作では、ほとんどのアプリケーションの機能が保持されますが、アプリケーションが期待どおりに動作するように変更を加える必要がある例外がいくつかあります。
たとえば、アプリケーションで別のプロセスのウィンドウ ツリー全体を確認し、システムにウィンドウに関する DPI に依存する情報を確認する必要がある場合があります。 既定では、システムは呼び出し元の DPI 認識に基づいて情報を返します。 これは、ほとんどのアプリケーションに最適です。 ただし、呼び出し元には、ウィンドウに関連付けられているアプリケーションの DPI 認識に基づく情報が必要な場合があります。 これは、2 つのアプリケーションが相互に DPI に依存する情報を直接送信するため、必要になる場合があります。 この場合、アプリケーションは LogicalToPhysicalPointForPerMonitorDPI を使用して物理座標を取得し、 PhysicalToLogicalPointForPerMonitorDPI を使用して、指定された HWND の DPI 認識に基づいて物理座標を論理座標に変換できます。
2 つのアプリケーションについて考えてみます。1 つは PROCESS_DPI_AWARENESS 値 が PROCESS_DPI_UNAWARE で、もう 1 つは PROCESS_PER_MONITOR_AWARE の値です。 PROCESS_DPI_UNAWARE アプリは、スケール ファクターが 200% (192 DPI) の単一のモニターにウィンドウを作成します。 両方のアプリがこのウィンドウで GetWindowRect を呼び出すと、異なる値を受け取ります。 PROCESS_DPI_UNAWARE アプリは 96 DPI 座標に基づく修正を受け取り、PROCESS_PER_MONITOR_AWARE アプリはモニターの実際の DPI と一致する座標を受け取ります。 システムが PROCESS_DPI_UNAWAREアプリに 返した修正がPROCESS_PER_MONITOR_AWAREに必要な場合は、その rect の角に LogicalToPhysicalPointForPerMonitorDPI を呼び出し、ハンドルを PROCESS_DPI_UNAWARE アプリのウィンドウに渡すことができます。 これにより、他のアプリの認識に基づいて、rect の作成に使用できるポイントが返されます。
PROCESS_DPI_AWARENESS値が PROCESS_PER_MONITOR_AWARE のアプリケーションではモニターの実際の DPI が使用されるため、このアプリの物理座標と論理座標は同じです。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 8.1 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 R2 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h |
Library | User32.lib |
[DLL] | User32.dll |
API セット | ext-ms-win-ntuser-window-l1-1-4 (Windows 10 バージョン 10.0.14393 で導入) |