実際のhWnd(コントロールの/フォームのハンドル)からカーソルを取得するにはSlimDX.RawInput を使用して、あなたは "user32.dllの"
- BOOL GetCursorPos(LPOINT lpPoint)からのextern関数に必要
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アドレスを取得してもBOOLを返すScreenToClient(HWND hWndを、LPPOINT lpPoint)にそれを渡しますデスクトップ画面 次の上のカーソルの実際の位置を取得します。
[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のオーバーライドでいくつかのコーディングを行うことができます.WindProcプログラマがちょうどそれに慣れていて、それと面倒な書き込みをするメッセージを処理するのに使用されています。しかし、あなたが持っているより多くのコントロールを下に行く。 私は、すべての情報を元に戻すが、マウスの位置はハンドラのMouseInputEventArgsから取得すると言った。私はWndProcコールバックを介して処理されたメッセージをチェックするほうが良いことがわかります。