博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

寻觅

笨笨的小窝
benbenxiaobai.cublog.cn


GTK的消息处理机制
1.GTK的消息处理机制
下面我们先看一个基本的例子,该例子产生一个200×200像素的窗口。它不能自己退出,只能通过shell来杀死进程(调用kill命令)。
/*例子 base.c */
#include
int main( int argc,char *argv[ ] ){
GtkWidget *window;
gtk_init (&argc, &argv); /* 初始化显示环境 */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* 创建一个新的窗口*/
gtk_widget_show (window); /*显示窗口*/
gtk_main (); /*进入睡眠状态,等待事件激活*/
return(0);
}
从上面的程序可以看出,GTK是一个事件驱动工具包,当它运行到gtk_main()函数时会自动睡眠,直到有事件发生,控制权转让给相应的函数调用,在该函数中可以用标准C写出相应的事物逻辑。这与windows 上的程序处理是一样的。
对窗口对象上发生的事件(如按下鼠标,激活键盘等),GTK也有相应的消息信号产生。这时就需要程序员创建一个信号处理器来捕获该信号,并告诉GTK程序事件发生后调用哪个回调函数。信号处理器的创建函数定义如下:
gint gtk_signal_connect( GtkObject *object, gchar *name,GtkSignalFunc callback_func, gpointer func_data );
返 回值是一个区分同一对象中的事件与不同回调函数的关联标签。这样可以做到一个对象的一个信号就有任意多个回调函数,并且每一个都会按照声明的顺序执行。函 数调用的第一个参数是产生信号的widget组件(即按钮等窗口构件)而name则是希望捕获的信号或事件的名称,callback_func则是事件 发生后所调用的回调函数名称,而第四个参数func_data则是传递给回调函数的参数
回调函数要定义在主程序的前面,它们的一般格式都如下所示:
void callback_func( GtkWidget *widget, gpointer func_data );
调用下面这个方法将允许你将回调函数与事件的关联断开:
void gtk_signal_disconnect( GtkObject *object, gint id );
该函数的
第二个参数就是上述gtk_signal_connect()函数的返回值,即关联标签
第一个参数指向了去除关联的对象名称。这样可以做到断开事件与回调函数的关联,使得事件发生后,不会调用相关的回调函数。

发表于: 2007-12-25 ,修改于: 2007-12-25 13:34,已浏览163次,有评论0条 推荐 投诉


网友评论

发表评论