4.3处理事件
优质
小牛编辑
136浏览
2023-12-01
虚拟函数int handle(int event)被用来处理任何发送给控件的事件.他能改变控件的状态
调用Fl_Widget::redraw()如果该控件需要重新显示
调用Fl_Widget::damage(n)当控件需要部分更新时(假如你在Fl_Widget::draw()函数中提供了对该函数的支持)
调用Fl_Widget::do_callback()如果一个回调函数产生时.
调用Fl_Widget::handle()对子控件
事件用一个整数来标识.最近事件产生的其他消息静态存储在本地,调用Fl::event_*()可以得到.
以下是一个利用handle()处理事件的例子,该控件的行为类似按钮同时接收x按键并调用回调函数
int MyClass::handle(int event)
{
switch(event)
{
case FL_PUSH:
highlight = 1;
redraw();
return 1;
case FL_DRAG:
{
int t = Fl::event_inside(this);
if (t != highlight)
{
highlight = t;
redraw();
}
}
return 1;
case FL_RELEASE:
if(highlight)
{
highlight = 0;
redraw();
do_callback();
// never do anything after a callback, as the callback
// may delete the widget!
}
return 1;
case FL_SHORTCUT:
if(Fl::event_key() == 'x')
{
do_callback();
return 1;
}
return 0;
default: return Fl_Widget::handle(event);
}
}
当你的handle()函数处理某事件后不能返回0,若是返回0,父控件将会把该事件发送给其他控件。