【问题标题】:Get raw mouse movement (not screen position)获取原始鼠标移动(不是屏幕位置)
【发布时间】:2013-06-03 22:41:27
【问题描述】:

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

【问题讨论】:

  • 不,这正是我不想要的......

标签: c# .net xna


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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多