4.3处理事件

虚拟函数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,父控件将会把该事件发送给其他控件。