获取原始鼠标移动(不是屏幕位置)

时间:2013-06-03 22:41:28

标签: c# .net xna

我一直在使用xna Mouse类,我唯一​​可以让每帧移动鼠标的方法是每次将鼠标重置到屏幕中心,然后在放回之前测量位移到中心。这看起来非常糟糕,我的鼠标支持5700dpi的分辨率,当xna为屏幕位置返回一个整数时,我肯定不会得到它。

2 个答案:

答案 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,这可能是一个很好的起点。

答案 1 :(得分:0)

我最近自己切断了MouseMove的怪物,发现这很有帮助。然而,似乎SharpDX已经在其RawInput模块中包含了大部分内容,所以这对我来说已经足够好了。除此之外,可以挂钩Windows.System.Forms'覆盖WndProc的消息循环; WM_INPUT是消息ID 0x00FF;在.NET中声明联合是棘手的,需要[StructLayout]属性。

相关问题