次の方法で共有


PhysicalToLogicalPointForPerMonitorDPI 関数 (winuser.h)

呼び出し元の 1 インチあたりのドット数 (dpi) の認識に関係なく、ウィンドウ内のポイントを物理座標から論理座標に変換します。 DPI 認識レベルの詳細については、「 PROCESS_DPI_AWARENESS」を参照してください。

構文

BOOL PhysicalToLogicalPointForPerMonitorDPI(
  [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_PER_MONITOR_AWARE アプリは、スケール ファクターが 200% (192 DPI) の単一のモニターにウィンドウを作成します。 両方のアプリがこのウィンドウで GetWindowRect を呼び出すと、異なる値を受け取ります。 PROCESS_DPI_UNAWARE アプリは 96 DPI 座標に基づいてリクトを受け取り、PROCESS_PER_MONITOR_AWARE アプリはモニターの実際の DPI に一致する座標を受け取ります。 PROCESS_DPI_UNAWAREPROCESS_PER_MONITOR_AWARE アプリに返された修正が必要な場合は、その rect の角に対して LogicalToPhysicalPointForPerMonitorDPI を呼び出し、ハンドルをPROCESS_PER_MONITOR_AWARE アプリのウィンドウに渡すことができます。 これにより、rect の作成に使用できる他のアプリの認識に基づいてポイントが返されます。 これは、 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 で導入)

こちらもご覧ください

LogicalToPhysicalPointForPerMonitorDPI

PROCESS_DPI_AWARENESS