C++;WinAPI-草率的鼠标输入 P> >我用OpenGL做C++游戏,我希望我的光标停留在屏幕的中间。< /P>

C++;WinAPI-草率的鼠标输入 P> >我用OpenGL做C++游戏,我希望我的光标停留在屏幕的中间。< /P>,c++,winapi,C++,Winapi,在每帧开始时,我调用 POINT pt; pt.x = 400; pt.y = 300; ClientToScreen(hWnd, &pt); SetCursorPos(pt.x, pt.y); 然后,在WM_MOUSEMOVE事件中,我会 POINT p; GetCursorPos(&p); ScreenToClient(hWnd, &p); dx = p.x - 400; dy = p.y - 300; 窗口是800x600,所以我只写了这些数字,以后会有明显的变

在每帧开始时,我调用

POINT pt;
pt.x = 400;
pt.y = 300;
ClientToScreen(hWnd, &pt);
SetCursorPos(pt.x, pt.y);
然后,在WM_MOUSEMOVE事件中,我会

POINT p;
GetCursorPos(&p);
ScreenToClient(hWnd, &p);
dx = p.x - 400;
dy = p.y - 300;
窗口是800x600,所以我只写了这些数字,以后会有明显的变化


这是可行的,但它很马虎。就像某些帧会被丢弃一样。

您可以尝试通过(传递
WH\u MOUSE
或者甚至可能
WH\u MOUSE\u LL
)安装一个钩子,并在相应的窗口消息被发送之前丢弃所有移动事件。

您可以使用来限制鼠标的移动。在释放指定矩形之前,鼠标将无法移动到指定矩形之外。

不要尝试这样做。鼠标及其光标是一种共享资源,不适合单个应用程序重复移动鼠标。如果你想让一个看起来像鼠标光标的东西出现在你的窗口中间,然后隐藏真正的光标并画出你想要的东西。我想把光标包含在窗口中,这样我就可以用第一个摄像机中的移动参数来移动相机,你仍然可以做威尔所说的。隐藏光标,但使用鼠标移动消息来操纵相机。但是,如果鼠标离开窗口,它将不会收到任何输入。让用户无限地向右旋转相机的预期方式是什么?好的,它可以工作,但是如果鼠标位于边界,我该如何处理?我也想旋转,如果它在边缘。因为现在如果我向外移动客户端,它不会消失,因此没有增量,但我想旋转相机,使剪辑矩形比窗口大一点,然后使用
SetCapture()
接收鼠标消息,如
WM_MOUSEMOVE
WM_LBUTTONUP
,即使鼠标在你的窗口之外。或者,只需忘记使用
ClipCursor()
并单独使用
SetCapture()
,这样用户就有了更多的自由活动空间。无论哪种方式,当按下窗口上的左键时捕获鼠标,然后在松开按钮时释放捕获。可以根据消息之间的移动或鼠标消息坐标与窗口坐标之间的距离来计算增量。