## 1.4FLTK事件處理
對于一般構件的如按鈕,菜單等常用事件的處理一般可以使用回調函數實現,回調函數的原型是:
```
void XXX_callback( Fl_Widget *w,void *data )
{
//添加自己處理的內容
}
```
使用F1_Widget->callback( XXX_callback, data) 注冊回調函數
```
/***************************************************************
按鈕事件例子
***************************************************************/
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_ask.H>
void Btn01_cb(Fl_Widget *w, void *data)
{
((Fl_Button *)w)->label((char *)data);
fl_alert("Hello");
}
int main(int argc, char **argv)
{
char *buff ="Hello";
Fl_Window* w = new Fl_Window(272, 144);
Fl_Button* Btn01 = new Fl_Button(85, 50, 105, 25, "&Test callback");
Btn01->shortcut(FL_ALT+'t'); //定義按鈕的快捷鍵
Btn01->callback((Fl_Callback*)Btn01_cb,buff); //調用處理函數 buff作為參數
w->end();
w->show(argc, argv);
return Fl::run();
}
```
編譯運行程序,鼠標點擊按鈕,按鈕標簽會發生改變,并且會彈出提示框。
通常的callback是當構件的value改變時調用,可以使用when()改變為其他事件發生調用回調函數,主要事件有以下事件
| 事件 | 說明 |
| --- | --- |
| FL_WHEN_NERVER | 從不調用回調函數 |
| FL_WHEN_CHANGED | 當構件值改變時調用 |
| FL_WHEN_RELEASE | 當釋放按鍵或者鼠標并且構件值改變 |
| FL_WHEN_RELEASE_ALWAYS | 當釋放按鍵或者鼠標,即使構件值沒有改變 |
| FL_WHEN_ENTER_KEY | 按下Enter鍵并且構件值改變 |
| FL_WHEN_ENTER_KEY_ALWAYS | 按下Enter鍵,即使構件值沒有改變 |
通過使用F1_Widget->when(FL_WHEN_XXXX)來改變回調事件。
```
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_ask.H>
void Btn01_cb(Fl_Widget *w, void *data)
{
fl_alert("Hello");
}
int main(int argc, char **argv)
{
char *buff = "Hello";
Fl_Window* w = new Fl_Window(272, 144);
Fl_Button* Btn01 = new Fl_Button(85, 50, 105, 25, "&Test callback");
Btn01->shortcut(FL_ALT + 't');
Btn01->callback((Fl_Callback*) Btn01_cb, buff);
Btn01->when(FL_WHEN_RELEASE_ALWAYS);
w->end();
w->show(argc, argv);
return Fl::run();
}
```
編譯運行程序,在按鈕上按下鼠標左鍵,移動到按鈕外,松開鼠標按鍵,仍然會彈出對話框,對比上面的兩程序,看看有什么不同。
- 第一章: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畫控件