我的系统没有键盘。我可以连接键盘,但最终输入来自不是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,然后我会导致键盘事件发生?
我觉得我的应用程序中不需要处理程序函数,我对发生的默认行为很好,并导致我的回调函数被调用。我的问题是我不能“导致”这些事件的发生。
答案 0 :(得分:1)
您需要将所需的密钥分配给:email
,然后使用e_keysym
发送FL_KEYDOWN
个活动。 (Fl::handle_()
不会生成后续Fl::handle()
事件。)
FL_SHORTCUT