无法将键盘事件注入FLTK

时间:2014-03-06 21:30:08

标签: events fltk

我的系统没有键盘。我可以连接键盘,但最终输入来自不是HID设备的自定义键盘,它发送我可以解释和解码的串行数据,以确定用户是按下Up,Down,Left,Right还是Enter。 / p>

现在我所拥有的只是一个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)

那不编译,告诉我它“无法在没有对象的情况下调用成员函数virtual int Fl_Window :: handle(int)”

我认为“int事件”实际上应该是FL_KEYDOWN。

这个逻辑让我想知道我如何“设置”event_key()。例如,有一个API函数可以在有一个处理程序时得到它,但我不希望得到它;我希望这一事件能够发生。

我唯一的选择是弄清楚如何模拟HID或制作某种类型的虚拟HID,然后我会导致键盘事件发生?

我觉得我的应用程序中不需要处理程序函数,我对发生的默认行为很好,并导致我的回调函数被调用。我的问题是我不能“导致”这些事件的发生。

1 个答案:

答案 0 :(得分:1)

您需要将所需的密钥分配给:email,然后使用e_keysym发送FL_KEYDOWN个活动。 (Fl::handle_()不会生成后续Fl::handle()事件。)

FL_SHORTCUT
相关问题