ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 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,父控件将会把该事件发送给其他控件。