У меня система без клавиатуры. Я могу подключить клавиатуру, но, в конечном счете, входные данные поступают с пользовательской клавиатуры, которая не является HID-устройством, она отправляет последовательные данные, которые я могу интерпретировать и декодировать, чтобы определить, нажал ли пользователь Вверх, Вниз, Влево, Вправо или Ввод.
Сейчас все, что у меня есть, это Fl_Window с двумя виджетами Fl_Button. Фокус установлен для одной из кнопок и для этих кнопок определены обратные вызовы. Я знаю, что если я подключу настоящую клавиатуру и буду использовать клавиши со стрелками, я смогу переключать фокус с кнопки на кнопку. Мне нужно нажать ПРОБЕЛ, чтобы активировать кнопку.
Моя проблема заключается в том, чтобы определить, как вызвать эти нажатия клавиш с помощью кода, когда я декодирую результат с встроенной клавиатуры. Потому что при развертывании не будет настоящей клавиатуры.
Я пытался вызвать 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)
Это не компилируется, сообщая мне, что «не может вызывать функцию-член virtual int Fl_Window::handle(int) без объекта»
Я думаю, что «событие int» на самом деле должно быть FL_KEYDOWN.
Эта логика заставляет меня задаться вопросом, как я «устанавливаю» event_key(). Например, есть функции API, чтобы получить это, когда у вас есть обработчик, но я не хочу этого; Я хочу, чтобы это событие произошло.
Является ли мой единственный вариант здесь, чтобы выяснить, как эмулировать HID или создать какой-либо виртуальный HID, где я затем вызываю события клавиатуры?
Я не чувствую, что мне нужна функция обработчика в моем приложении, меня устраивает поведение по умолчанию, которое происходит и вызывает вызов моих функций обратного вызова. Моя проблема в том, что я не могу «заставить» эти события произойти.