使用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回調來檢查處理過的消息。