在win32 / Opengl中捕获鼠标移动

时间:2013-10-27 08:39:44

标签: c++ c winapi opengl

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

3 个答案:

答案 0 :(得分:2)

对于游戏和实时DirectInput非常合适,使用起来非常困难。

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

SetCapture然后WM_MOUSEMOVE,您致电SetCursorPos。 设置光标位置的目的是为移动提供空间,这样您就可以获得增量,即自上次更新后光标移动的数量,然后将光标放回窗口的中心。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您最好的选择是使用DirectInput(设置可能有点痛苦)或RawInput

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