光标在屏幕上锁定时如何获得鼠标移动
问题描述:
我有一个应用程序(游戏),我需要光标隐藏,因为玩家应该用鼠标控制一个实体。我还必须锁定光标(在mousemove事件处理程序中使用SetCursorPos设置屏幕位置的中间位置)。光标在屏幕上锁定时如何获得鼠标移动
跟踪鼠标移动是否存在可行且简单的解决方案?
现在我有一个拙劣的布尔值破解,它允许我在调用SetCursorPos方法后忽略下一个事件处理函数。但我不喜欢它,它不能正常工作 - 鼠标移动不准确。
唉,我不能在这个项目中使用DirectInput。
答
我用GetRawInputData
代替鼠标屏幕坐标。它像一个魅力。
在事件处理程序
LRESULT CALLBACK Application::StaticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
...
case WM_INPUT:
{
UINT dwSize = 40;
static BYTE lpb[40];
GetRawInputData((HRAWINPUT)lParam, RID_INPUT,
lpb, &dwSize, sizeof(RAWINPUTHEADER));
RAWINPUT* raw = (RAWINPUT*)lpb;
if (raw->header.dwType == RIM_TYPEMOUSE)
{
int xPosRelative = raw->data.mouse.lLastX;
int yPosRelative = raw->data.mouse.lLastY;
GameState::Instance()->MoveCursor(xPosRelative, yPosRelative);
RECT rect;
//resetting cursor to stay in center
if(GetWindowRect(Application::Instance()->m_hWnd, &rect))
SetCursorPos((rect.right - rect.left)/2, (rect.bottom - rect.top)/2);
}
break;
}