Как использовать WM_INPUT для обнаружения непрерывных щелчков мышью?

Я использую WM_INPUT для обнаружения обновлений мыши, когда я нажимаю кнопку мыши 1, я обнаруживаю, что кнопка 1 нажата. Однако, если я удерживаю кнопку, последующие обновления для мыши покажут, что кнопка 1 не нажата.

MSDN показывает, что usButtonFlags может определять переходное состояние кнопок мыши. Это означает, что rawinput может обнаруживать мышь во время нажатия и отпускания, но не может обнаружить нажатие или отпускание состояния кнопок мыши.

Но возможно ли для rawinput обнаружить нажатие или отпускание состояния кнопок мыши вместо состояния перехода?

Я использовал OSG для рендеринга полноэкранной сцены, поэтому все щелчки мыши должны быть связаны с текущим окном. Я использую функцию eventTraversal osgViewer :: Viewer для обновления необработанных входных данных:

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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]