信号和回调函数的原理@GTK+ 2.0 中文教程连载
2010-12-15 16:18
344 查看
信号和回调函数的原理
在 2.0 版,信号系统已从 GTK 移到 GLib,因此在函数和类型的说明中有前缀 "g_" 而不是 "gtk_"。我们不打算介绍 GLib 2.0 信号系统相对 GTK 1.2 信号系统扩展的细节。 |
程序之前,我们会讨论信号和回调函数。GTK 是一个事件驱动的工具包,意味着它会等在 gtk_main() 那里,直到下一个事件发生,才把控制权传给适当的函数。
控
制权的传递是使用“信号”的办法来完成的。(注意这里的信号并不等同于 Unix 系统里的信号,并且也不是用它们实现的,虽然使用的术语是一样的。)
当一个事件发生时,如按一下鼠标键,所按的构件会“发出”适当的信号。这就是 GTK 的工作机制。有所有构件都继承的信号,如
"destroy",有构件专有的信号,如开关 (toggle) 按钮发出的 "toggled" 信号。
要使一个按钮执行一个动作,我们需设置信号和信号处理函数之间的连接。可以这样使用函数来设置连接:
gulong g_signal_connect( gpointer *object, const gchar *name, GCallback func, gpointer func_data ); |
第三个参数指定的函数叫做回调函数,一般为下面的形式:
void callback_func( GtkWidget *widget, gpointer callback_data ); |
注意上面回调函数的声明只是一般的形式,有些构件的特殊信号会用不同的调用参数。
另一个在 helloworld
示例中使用的调用,是:
gulong g_signal_connect_swapped( gpointer *object, const gchar *name, GCallback func, gpointer *slot_object ); |
void callback_func( GtkObject *object ); |
示例中那样。
拥
有两个函数来设置信号连接的目的只是为了允许回调函数有不同数目的参数。GTK
库中许多函数仅接受一个单独的构件指针作为其参数,所以对于这些函数你要用
g_signal_connect_swapped(),然而对你自己定义的函数,你可能需要附加的数据提供给你的回调函数。
<<< Previous | Home | Next >>> |
编译 Hello World 程序 | Up | 事件 |
相关文章推荐
- GTK 信号@GTK+ 2.0 中文教程连载
- 高级事件和信号处理@GTK+ 2.0 中文教程连载
- GTK+ 2.0 教程--信号和回调函数的原理
- 信号的发射和传播@GTK+ 2.0 中文教程连载
- 构件概述@GTK+ 2.0 中文教程连载
- 键盘和鼠标绑定@GTK+ 2.0 中文教程连载
- 教程的版权和许可声明@GTK+ 2.0 中文教程连载
- 构件的组织@GTK+ 2.0 中文教程连载
- 深入的学习@GTK+ 2.0 中文教程连载
- 菜单构件/手工创建菜单@GTK+ 2.0 中文教程连载
- 涂鸦板,一个简单的绘图程序@GTK+ 2.0 中文教程连载
- 深入探索信号处理函数@GTK+ 2.0 中文教程连载
- 手工菜单示例@GTK+ 2.0 中文教程连载
- GLib单向链表@GTK+ 2.0 中文教程连载
- 事件处理@GTK+ 2.0 中文教程连载
- 无窗口构件@GTK+ 2.0 中文教程连载
- 工具提示对象 The Tooltips Object@GTK+ 2.0 中文教程连载
- 使用套件示例@GTK+ 2.0 中文教程连载 现在我们已经介绍了难的办法,这里介绍怎样用 gtk_item_factory 调用来做。
- GLib存储管理@GTK+ 2.0 中文教程连载
- 无文档构件。。。。。。@GTK+ 2.0 中文教程连载