2013-06-03 126 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]属性。