设为首页 加入收藏

TOP

12.3 消息和回调函数
2013-10-12 06:47:56 来源: 作者: 【 】 浏览:99
Tags:12.3 消息 函数

12.3  消息和回调函数

图形用户界面的程序是事件驱动的程序。程序进入gtk_main函数后,等待事件的发生,一旦发生某个事件,相应的信号将产生。如果程序中定义了相应的消息处理函数,系统会自动进行调用。消息处理函数(或称回调函数)的原型是:

void callback_func(GtkWidget *widget,gpointer func_data);

参数widget指向要接收消息的控件,参数func_data指向消息产生时传递给该函数的数据。

函数g_signal_connect在控件和消息处理函数间建立关联,该函数的原型是:

gulong g_signal_connect(GtkObject *object,gchar *name
Gcallback callback_func,gpointer func_data);

各参数说明如下。

object:指向产生消息的控件。

name:消息或事件的名称。

callback_func:事件发生后要执行的回调函数。

func_data:传递给回调函数的数据,与callback_func()的第二个参数相同。

该函数的返回值用于区分一个控件的一个事件对应的多个处理函数。一个控件上可以发生多个事件,比如单击一个按钮,双击一个按钮。对于一个控件上的每个事件可以有0个、1个或多个处理函数。该事件发生时,将按声明的顺序逐个调用这些函数。对应于某个事件,如果控件没有定义处理函数,那么事件发生时将没有响应,系统忽略此事件。

还有一个与g_signal_connect()类似的函数:

gint g_signal_connect_swapped(GtkObject *object,gchar *name
GCallback callback_func,GtkObject *slot_object);

它的第四个参数指向一个GTK+控件的指针。它与g_signal_connect()的区别在于相应的回调函数只有一个参数:

void callback_func(GtkObject *object);

通常object指向一个控件。

可以在上一节的例子中"gtk_container_add(GTK_CONTAINER(window),button);"之前加上一条语句:

g_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT(window));

则对应于button按钮的"clicked"事件有两个处理函数,一个是程序中定义的回调函数hello,还有一个是GTK+预定义的gtk_widget_destroy()。gtk_widget_destroy()的作用与程序中的destroy()相同。编译运行程序,如果单击按钮,系统先调用hello函数(因为它先与button控件建立关联)在命令行上打印出一行消息,然后调用gtk_widget_destroy()退出程序。

如果要删除控件和消息处理函数的关联,可以调用g_signal_disconnect(),该函数的原型是:

void g_signal__handler _disconnect(GtkObject *object ,gulong id);

参数说明如下。

object:要删除消息处理函数的控件。

id:g_signal_connect()或g_signal_connect_swapped()函数的返回值。

下面这个函数可以删除某控件的所有消息处理函数:

void g_signal_handlers_destroy(GtkObject *object);

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.1.1 Qt和GTK+ 下一篇12.2 一个简单的例子

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: