我正在使用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;