## 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,父控件将会把该事件发送给其他控件。
- 第一章:FLTK编程模型
- 1.1FLTK功能简介
- 1.2搭建FLTK开发环境
- 1.3FLTK构件简介
- 1.4FLTK事件处理
- 1.5FLTK消息处理
- 1.6OpenGL编程
- 第二章:常用的控件和属性
- 2.1按钮
- 2.2文本
- 2.3颜色
- 2.4Box类型
- 第三章:FLTK的画图函数
- 3.1何时可以画图
- 3.2 FLTK的画图函数
- 3.3剪切
- 3.4颜色
- 3.5设置线条的属性
- 3.6画一般的图形函数
- 3.7画封闭的线,一次连接个顶点
- 3.8画三边形或四边形,并填充内部
- 3.9复杂图形函数
- 3.10字体
- 3.11覆盖画图函数
- 第四章:在FLTK中自定义控件
- 4.1定制图形控件说明
- 4.2如何开发一个控件的子类
- 4.3处理事件
- 4.4画控件