当光标锁定在屏幕中时,如何获得鼠标移动



我有一个应用程序(游戏),我需要隐藏光标,因为玩家应该用鼠标控制实体。我还必须锁定光标(在鼠标移动事件处理程序中使用 SetCursorPos 设置屏幕位置的中间)。

是否有可行且简单的解决方案来跟踪鼠标移动?

现在我有一个布尔值的肮脏黑客,它允许我在调用 SetCursorPos 方法后立即忽略下一个事件处理程序。但我不喜欢它,它不能正常工作 - 鼠标移动不精确。

唉,我不能在这个项目中使用直接输入。

我使用了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;
}

最新更新