1

我一直在使用 xna Mouse 类,我能够让每帧鼠标移动的唯一方法是每次将鼠标重置到屏幕的中心,然后在将其放回中心之前测量位移. 这看起来非常骇人听闻,而且我的鼠标支持 5700dpi 的分辨率,当 xna 返回屏幕位置的整数时,我肯定不会得到。

4

2 回答 2

1

如果使用Mouse.SetPosition和测量偏移量对您不起作用,您将需要使用 XNA 以外的 API。

您要使用的 API 是WM_INPUT. 这是您可以通过挂钩消息循环来接收的消息。(注意:XNA 的 API 等价于WM_MOUSEMOVE,所以不要使用它。)

这个 MSDN 页面有一些关于 API 选择的介绍性细节,并且有一些示例代码(在 C++ 中)用于使用它进行鼠标输入。

如果您不熟悉 Windows 消息循环,不妨从Wikipedia开始。它基本上是一个本机 (C/C++) API,因此您必须做一些工作才能从 C# 中使用它。

我自己没有任何方便的代码来做这件事,但这里有一个链接到某人挂钩消息循环以便他们可以处理WM_CHAR,这可能是一个很好的起点。

于 2013-06-04T05:02:38.100 回答
0

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

于 2015-02-11T00:43:20.053 回答