我怎样才能在 FLTK 中离开 Fl_Button?
How can I tab away from a Fl_Button in FLTK?
我有一个扩展 Fl_Button
的自定义 class、CustomButton
。在我的屏幕上有一堆 Fl_Input
和 CustomButton
小部件,我希望能够使用 Tab 键在它们之间导航。输入字段之间的 Tab 键工作正常,但一旦 CustomButton
获得焦点,我似乎无法离开它。
这是我的句柄函数
int CustomButton::handle ( int event )
{
int is_event_handled = 0;
switch (event)
{
case FL_KEYBOARD:
// If the keypress was enter, toggle the button on/off
if (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)
{
// Do stuff...
}
is_event_handled = 1;
break;
case FL_FOCUS:
case FL_UNFOCUS:
// The default Fl_Button handling does not allow Focus/Unfocus
// for the button so mark the even as handled to skip the Fl_Button processing
is_event_handled = 1;
break;
default:
is_event_handled = 0;
break;
}
if ( is_event_handled == 1 ) return 1;
return Fl_Round_Button::handle ( event );
}
我正在使用 fltk 1.1.10。
有关演示如何控制焦点的非常简单、最小的示例,请查看 navigation.cxx 测试文件。
也许您的小部件确实获得了焦点(使用 Fl::focus() 检查),但它没有显示出来(您需要处理 FL_FOCUS and/or FL_UNFOCUS 事件)?
我的问题是我的 CustomButton::handle()
在 FL_KEYBOARD
事件后返回 1
而没有实际使用 Tab 键按下。
将 is_event_handled = 1
移动到 if 语句中让我仅使用 FL_Enter
按键并让其他小部件(即控制导航的 Fl_Group )接受任何其他按键。
或者删除 if
并替换为
switch(Fl::event_key())
{
case FL_Enter:
case FL_KP_Enter:
// Do stuff
is_event_handled = 1;
break;
default:
is_event_handled = 0;
break;
}
我有一个扩展 Fl_Button
的自定义 class、CustomButton
。在我的屏幕上有一堆 Fl_Input
和 CustomButton
小部件,我希望能够使用 Tab 键在它们之间导航。输入字段之间的 Tab 键工作正常,但一旦 CustomButton
获得焦点,我似乎无法离开它。
这是我的句柄函数
int CustomButton::handle ( int event )
{
int is_event_handled = 0;
switch (event)
{
case FL_KEYBOARD:
// If the keypress was enter, toggle the button on/off
if (Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter)
{
// Do stuff...
}
is_event_handled = 1;
break;
case FL_FOCUS:
case FL_UNFOCUS:
// The default Fl_Button handling does not allow Focus/Unfocus
// for the button so mark the even as handled to skip the Fl_Button processing
is_event_handled = 1;
break;
default:
is_event_handled = 0;
break;
}
if ( is_event_handled == 1 ) return 1;
return Fl_Round_Button::handle ( event );
}
我正在使用 fltk 1.1.10。
有关演示如何控制焦点的非常简单、最小的示例,请查看 navigation.cxx 测试文件。
也许您的小部件确实获得了焦点(使用 Fl::focus() 检查),但它没有显示出来(您需要处理 FL_FOCUS and/or FL_UNFOCUS 事件)?
我的问题是我的 CustomButton::handle()
在 FL_KEYBOARD
事件后返回 1
而没有实际使用 Tab 键按下。
将 is_event_handled = 1
移动到 if 语句中让我仅使用 FL_Enter
按键并让其他小部件(即控制导航的 Fl_Group )接受任何其他按键。
或者删除 if
并替换为
switch(Fl::event_key())
{
case FL_Enter:
case FL_KP_Enter:
// Do stuff
is_event_handled = 1;
break;
default:
is_event_handled = 0;
break;
}