2013-06-03 124 views
1

我一直在使用XNA Mouse類和我已經能夠讓鼠標移動每幀鼠標重置每次屏幕中心的唯一途徑然後在將其置回中心之前測量位移。這看起來很糟糕,而且我的鼠標支持5700dpi的分辨率,當xna爲屏幕位置返回一個整數時,我大多肯定沒有獲得這個分辨率。獲取原始鼠標移動(不是屏幕上的位置)

+0

可能重複? http://stackoverflow.com/questions/2150448/vb-net-mouse-coordinates – Rob

+0

不,這正是我不想要什麼? –

回答

1

如果使用Mouse.SetPosition和測量偏移不爲你工作,你需要使用比其他XNA的API。

要使用的API是WM_INPUT這是您可以通過掛鉤消息循環接收的消息。 (注:XNA的API相當於WM_MOUSEMOVE,所以不要使用)

This MSDN page有關於API選擇一些介紹細節,並且有一些示例代碼(C++),將其用於鼠標輸入。

如果你不熟悉Windows的消息循環,也許就Wikipedia啓動。它基本上是一個本地(C/C++)API,所以你必須做一些工作才能在C#中使用它。

我沒有任何代碼方便我自己做,但here is a link有人掛鉤的消息循環,以便他們可以處理WM_CHAR,這也許是一個很好的起點。

0

我最近從MouseMove事件畸形交換掉自己,發現這是很有幫助的。然而,看起來SharpDX已經將其大部分包裝在RawInput模塊中,所以這對我來說已經足夠好了。除此之外,可以通過重寫WndProc來掛鉤Windows.System.Forms的消息循環; WM_INPUT是消息ID 0x00FF;在.NET中聲明工會很棘手,需要[StructLayout]屬性。