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