MapWindowPoints 関数 (winuser.h)
MapWindowPoints 関数は、1 つのウィンドウを基準とした座標空間から別のウィンドウに対する座標空間に、一連のポイントを変換 (マップ) します。
構文
int MapWindowPoints(
[in] HWND hWndFrom,
[in] HWND hWndTo,
[in, out] LPPOINT lpPoints,
[in] UINT cPoints
);
パラメーター
[in] hWndFrom
ポイントの変換元となるウィンドウへのハンドル。 このパラメーターが NULL またはHWND_DESKTOPの場合、ポイントは画面座標内にあると推定されます。
[in] hWndTo
ポイントが変換されるウィンドウへのハンドル。 このパラメーターが NULL またはHWND_DESKTOPの場合、ポイントは画面座標に変換されます。
[in, out] lpPoints
変換するポイントのセットを含む POINT 構造体の配列へのポインター。 ポイントはデバイス単位です。 このパラメーターは RECT 構造体を指すこともできます。この場合、 cPoints パラメーターを 2 に設定する必要があります。
[in] cPoints
lpPoints パラメーターが指す配列内の POINT 構造体の数。
戻り値
関数が成功した場合、戻り値の下位ワードは、各変換元ポイントの水平方向の座標を計算するために、各ソース ポイントの水平座標に加算されるピクセル数です。 (それに加えて、正確に hWndFrom と hWndTo の 1 つがミラー化されている場合、結果の各水平座標に -1 が乗算されます)。高次ワードは、各変換元ポイントの垂直方向の座標を計算するために、各ソース ポイントの垂直座標に追加されるピクセル数です。
関数が失敗した場合は、0 を返します。 このメソッドを呼び出す前に SetLastError を呼び出して、エラーの戻り値と正当な "0" の戻り値を区別します。
注釈
hWndFrom または hWndTo (またはその両方) がミラー化されたウィンドウ (つまり、WS_EX_LAYOUTRTL拡張スタイルを持つ) であり、正確に 2 つのポイントが lpPoints で渡される場合、MapWindowPoints はこれら 2 つのポイントを RECT として解釈し、その四角形の左右のフィールドを自動的に入れ替えて、左が右より大きくならないようにします。 lpPoints で 2 以外のポイントが渡された場合、MapWindowPoints は各ポイントの座標を個別に正しくマップするため、lpPoints 内の複数の四角形の配列へのポインターを渡すと、新しい四角形の左フィールドが右より大きくなる可能性があります。 したがって、四角形座標の正しい変換を保証するには、次の例に示すように、一度に 1 つの RECT ポインターを使用して MapWindowPoints を呼び出す必要があります。
RECT rc[10];
for(int i = 0; i < (sizeof(rc)/sizeof(rc[0])); i++)
{
MapWindowPoints(hWnd1, hWnd2, (LPPOINT)(&rc[i]), (sizeof(RECT)/sizeof(POINT)) );
}
また、2 つの独立したポイントを正確にマップする必要があり、MapWindowPoints によって RECT ロジックを適用したくない場合は、次の例に示すように、一度に 1 つの POINT ポインターを使用して MapWindowPoints を呼び出す必要があります。
POINT pt[2];
MapWindowPoints(hWnd1, hWnd2, &pt[0], 1);
MapWindowPoints(hWnd1, hWnd2, &pt[1], 1);
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
API セット | ext-ms-win-ntuser-window-l1-1-2 (Windows 10 バージョン 10.0.10240 で導入) |