У меня есть система без клавиатуры. Я могу подключить клавиатуру, но в конечном итоге входы поступают с пользовательской клавиатуры, которая не является устройством HID, она отправляет последовательные данные, которые я могу интерпретировать и декодировать, чтобы определить, нажата ли кнопка «Вверх», «Вниз», «Влево», «Вправо» или «Ввод».Ошибка при вводе событий клавиатуры в FLTK
Сейчас у меня есть Fl_Window с двумя виджетами Fl_Button. Фокус установлен для одной из кнопок, и для этих кнопок определены обратные вызовы. Я знаю, что если я присоединяю настоящую клавиатуру и использую клавиши со стрелками, я могу сменить фокус с кнопки на кнопку. Мне нужно нажать SPACE, чтобы активировать кнопку.
Моя проблема заключается в определении того, как вызвать эти нажатия клавиш, используя код, когда я декодирую результат из встроенной клавиатуры. Потому что в развертывании не будет реальной клавиатуры.
То, что я пробовал, заключается в том, чтобы вызывать int Fl_Window :: handle (int) и не имел успеха. Я также пытался вызвать int Fl :: handle (int, Fl_Window *) и не имел успеха.
Вот примеры кода:
if((ret = Fl::handle(FL_Left, window)) == 0)
Это компилирует, но я считаю, что я получаю нулевой обратно, это означает, что он не обработал событие.
if((ret = Fl_Window::handle(FL_Right)) == 0)
Это не компилируется, сообщив мне, что он «не может вызвать функцию член виртуального Int Fl_Window :: Handle (INT) без объекта»
Я имею в виду, что «ИНТ событие» на самом деле должен FL_KEYDOWN.
Эта логика оставляет мне удивление, хотя я «задал» event_key(). Например, есть функции API, чтобы получить это, когда у вас есть обработчик, но я не хочу этого делать; Я хочу, чтобы это событие произошло.
Является ли мой единственный вариант здесь, чтобы выяснить, как эмулировать HID или сделать какой-то виртуальный HID, где я тогда буду вызывать события клавиатуры?
Я не чувствую, что мне требуется функция обработчика в моем приложении, я в порядке с поведением по умолчанию, которое происходит, и вызывают мои функции обратного вызова. Моя проблема в том, что я не могу «вызвать» эти события.
Посмотрите на «Продемонстрировать клавиатуры нажатие/отпускание» в http://seriss.com/people/erco/fltk/#KeyPressRelease – cup
Вы можете вызвать события, связанные с использованием send. – cup
Спасибо за цитирование примера, я думаю, что он показывает, как писать пользовательский обработчик, я не думаю, что мне это нужно, мне просто нужно знать, как вызвать события. Я вижу следующий комментарий о send(); и в документации FLTK указано, что она является предпочтительной оболочкой для handle(). Хорошо, пытаясь использовать это, я не могу найти синтаксис и примеры. Я не могу его скомпилировать, если объявить его как Fl_Widget :: send(), Fl_Window :: send() или Fl :: send(). – RTM