## 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畫控件