GetMouseMovePointsEx 関数 (winuser.h)
マウスまたはペンの最大 64 個の以前の座標の履歴を取得します。
構文
int GetMouseMovePointsEx(
[in] UINT cbSize,
[in] LPMOUSEMOVEPOINT lppt,
[out] LPMOUSEMOVEPOINT lpptBuf,
[in] int nBufPoints,
[in] DWORD resolution
);
パラメーター
[in] cbSize
型: UINT
MOUSEMOVEPOINT 構造体のサイズ (バイト単位)。
[in] lppt
種類: LPMOUSEMOVEPOINT
有効なマウス座標 (画面座標内) を含む MOUSEMOVEPOINT 構造体へのポインター。 タイム スタンプを含めることもできます。
GetMouseMovePointsEx 関数は、マウス座標履歴内のポイントを検索します。 関数は、ポイントを見つけた場合、指定されたポイントを含む前の最後 の nBufPoints を返します。
アプリケーションでタイム スタンプが提供されている場合、 GetMouseMovePointsEx 関数はそれを使用して、異なる時刻に記録された 2 つの等しいポイントを区別します。
アプリケーションでは、 WM_MOUSEMOVE メッセージから受信したマウス座標を使用してこの関数を呼び出し、それらを画面座標に変換する必要があります。
[out] lpptBuf
種類: LPMOUSEMOVEPOINT
ポイントを受け取るバッファーへのポインター。 サイズは 少なくとも cbSize* nBufPoints である必要があります。
[in] nBufPoints
型: int
取得するポイントの数。
[in] resolution
型: DWORD
必要な解像度。 このパラメーターには、次の値のいずれかを指定できます。
値 | 意味 |
---|---|
|
表示解像度を使用してポイントを取得します。 |
|
高解像度ポイントを取得します。 ポイントの範囲は、x 座標と y 座標の両方で 0 から 65,535 (0xFFFF) です。 これは、描画タブレットなどの絶対座標ポインティング デバイスによって提供される解像度です。 |
戻り値
型: int
関数が成功した場合、戻り値はバッファー内のポイント数です。 それ以外の場合、関数は –1 を返します。 拡張エラー情報については、アプリケーションで GetLastError を呼び出すことができます。
注釈
システムは、最後の 64 個のマウス座標とそのタイム スタンプを保持します。 アプリケーションが GetMouseMovePointsEx にマウス座標を指定し、その座標がシステムのマウス座標履歴に存在する場合、関数はシステムの履歴から指定した数の座標を取得します。 また、履歴内の同じポイントを区別するために使用されるタイム スタンプを指定することもできます。
GetMouseMovePointsEx 関数は、呼び出し元のスレッドだけでなく、他のスレッドにも最終的にディスパッチされたポイントを返します。
GetMouseMovePointsEx は、次の場合に失敗するか、エラー値を返す可能性があります。
- MOUSEMOVEPOINT 構造体に負の座標が渡される場合。
- GetMouseMovePointsEx が負の値を持つ座標を取得する場合。
- SM_XVIRTUALSCREEN、
- SM_YVIRTUALSCREEN、
- SM_CXVIRTUALSCREEN、および
- SM_CYVIRTUALSCREEN。
int nVirtualWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN) ;
int nVirtualHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN) ;
int nVirtualLeft = GetSystemMetrics(SM_XVIRTUALSCREEN) ;
int nVirtualTop = GetSystemMetrics(SM_YVIRTUALSCREEN) ;
int cpt = 0 ;
int mode = GMMP_USE_DISPLAY_POINTS ;
MOUSEMOVEPOINT mp_in ;
MOUSEMOVEPOINT mp_out[64] ;
ZeroMemory(&mp_in, sizeof(mp_in)) ;
mp_in.x = pt.x & 0x0000FFFF ;//Ensure that this number will pass through.
mp_in.y = pt.y & 0x0000FFFF ;
cpt = GetMouseMovePointsEx(&mp_in, &mp_out, 64, mode) ;
for (int i = 0; i < cpt; i++)
{
switch(mode)
{
case GMMP_USE_DISPLAY_POINTS:
if (mp_out[i].x > 32767)
mp_out[i].x -= 65536 ;
if (mp_out[i].y > 32767)
mp_out[i].y -= 65536 ;
break ;
case GMMP_USE_HIGH_RESOLUTION_POINTS:
mp_out[i].x = ((mp_out[i].x * (nVirtualWidth - 1)) - (nVirtualLeft * 65536)) / nVirtualWidth ;
mp_out[i].y = ((mp_out[i].y * (nVirtualHeight - 1)) - (nVirtualTop * 65536)) / nVirtualHeight ;
break ;
}
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
関連項目
概念
参照