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