如何使用WM_INPUT检测连续鼠标点击?

时间:2014-01-07 19:44:52

标签: c++ c windows opengl raw-input

我正在使用WM_INPUT来检测我的鼠标更新,当我单击鼠标按钮1时,我会检测到按钮1已关闭。但是,如果我按住按钮,鼠标的后续更新将显示按钮1未被按下。

MSDN表明usButtonFlags可以检测鼠标按钮的转换状态。这意味着rawinput可以在按下和释放时检测鼠标,但无法检测鼠标按钮的按下或释放状态。

但是rawinput是否可以检测鼠标按钮的按下或释放状态而不是过渡状态?

我使用OSG渲染全屏幕场景,因此,所有鼠标点击都应与当前窗口关联。我使用osgViewer :: Viewer的eventTraversal函数来更新原始输入数据:

class CustomViewer : public osgViewer::Viewer
{
public:
    CustomViewer() : osgViewer::Viewer() {}
    virtual ~CustomViewer() {}

    virtual void eventTraversal()
    {
        RawInputEventRegistry::instance()->updateState( _eventQueue.get() );
        osgViewer::Viewer::eventTraversal();

    }
}

void RawInputEventRegistry::updateState( osgGA::EventQueue* eventQueue )
{
    MSG msg;
    if( GetMessage( &msg, c_handle, WM_INPUT, WM_INPUT ) != -1)
    { 
        HRAWINPUT test = (HRAWINPUT)msg.lParam;
               add_to_raw_mouse_x_and_y((HRAWINPUT)msg.lParam);

    } 

    osg::ref_ptr<RawInputEvent> event = new RawInputEvent;
    event->SetMouseData(raw_mice);
    eventQueue->userEvent( event.get() );
}

add_to_raw_mouse_x_and_y()函数负责按钮点击检查,例如:

if (raw->data.mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_DOWN) raw_mice[i].buttonpressed[0] = 1;

0 个答案:

没有答案