1

目前我只是使用 WM_MOUSEMOVE 消息,但它将鼠标移动限制在最大分辨率。那么用 Win32(在 OpenGL 窗口上)捕获鼠标的最佳方法是什么?我不想使用 freeglut 或任何额外的库。

4

3 回答 3

1

对于游戏和实时DirectInput非常合适,它的使用难度适中。

那不是核心win32 api,获取输入的winapi方式是由您自己的更新循环驱动的GetCursorPos / SetCursorPos,因此您可以使用自己的频率进行查询和重置。

SetCapture,然后在WM_MOUSEMOVE上调用SetCursorPos。设置光标位置的目的是为移动留出空间,这样您就可以获得增量,即自上次更新以来光标移动的量,然后将光标放回窗口的中心。

于 2013-10-27T09:10:22.567 回答
0

如果您希望能够在鼠标存在窗口后捕获鼠标事件,那么您可能需要查看SetCapture函数

如果您的问题是您想要制作 FPS 游戏并且您希望您的角色能够以连续动作旋转,那么您希望在每次鼠标移动事件后将鼠标位置设置为窗口的中心并处理基于输入关于触发鼠标移动事件时光标位置与屏幕中心之间的差异。要设置鼠标的位置,您可以使用SetCursorPos函数。

于 2013-10-27T09:01:55.837 回答
0

您最好的选择是使用DirectInput(设置起来可能有点麻烦)或RawInput

使用 RawInput页面中提供了一个相当全面的示例(参见示例 2)。

于 2013-10-27T09:12:48.493 回答