光标锁定在屏幕上时如何使鼠标移动

时间:2014-02-18 06:06:08

标签: c++ windows

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

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

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

唉,我不能在这个项目中使用DirectInput。

1 个答案:

答案 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;
}