SlimDX.RawInputを使用する実際にhWnd(コントロール/フォームのハンドル)からカーソルを取得するには、「user32.dll」から関数をexternする必要があります。
- BOOL GetCursorPos(LPOINT lpPoint)
System.Runtime.InterlopおよびSystem.Drawing.Pointを使用します(代わりにPOINT構造体を作成することにした場合を除く)。
[DllImport("user32.dll",CallingConvention=CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
internal unsafe static extern bool GetCursorPos(Point* lpPoint);
これにより、デスクトップ画面上のカーソルの実際の位置がわかります。次に、lpPointアドレスを取得し、それをScreenToClient(HWND hWnd、LPPOINT lpPoint)に渡します。これもBOOLを返します。
[DllImport("user32.dll",CallingConvention=CallingConvention.StdCall,SetLastError=true)]
internal static extern int ScreenToClient(IntPtr hWnd, Point* p);
次に、次のようにポイントを取得しましょう。
public unsafe Point GetClientCurorPos(IntPtr hWnd, Point*p)
{
Point p = new Point();
if (GetCursorPos(&p))
{
ScreenToClient(hWnd, &p);
}
return p;
}
SlimDX.RawInput.Device.MouseInputハンドラーを必要に応じて使用するか、WndProcのオーバーライドでコーディングを行うことができます。これは、WINAPIプログラマー全員が慣れ親しんだメッセージの処理と面倒な記述に使用するのに適しています。それと。ただし、下に行くほど、より多くの制御が得られます。私が言ったように、あなたはすべての情報を取り戻しますが、マウスの位置はハンドラーのMouseInputEventArgsから取得します。WndProcコールバックを介して処理されたメッセージを確認する方が良いと思います。