我有一个应用程序(游戏),我需要隐藏光标,因为玩家应该用鼠标控制实体。我还必须锁定光标(在mousemove事件处理程序中使用SetCursorPos设置屏幕位置的中间位置)。
有跟踪鼠标移动的可行且简单的解决方案吗?
现在我有一个bool值的黑客,它允许我在调用SetCursorPos方法后立即忽略下一个事件处理程序。但我不喜欢它并且它不能正常工作 - 鼠标移动不准确。
唉,我不能在这个项目中使用DirectInput。
答案 0 :(得分:-1)
我使用了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;
}