GTK+3系列教程4:添加事件处理

每天进步一点点,用实际行动实现你伟大的梦想。

老规矩,先上代码。

GTK+3系列教程4:添加事件处理_第1张图片
代码
运行截图

这节就讲一个函数就ok了,这个牛逼的函数就是g_signal_connect();  此函数将控件和事件处理函数联系起来。上面代码中g_signal_connect(button1, "clicked", G_CALLBACK (button1_handler), NULL); 就是将button1这个控件和button1_handler这个事件处理函数联系起来。这个函数的API参考如下:

GTK+3系列教程4:添加事件处理_第2张图片
g_signal_connect()参考用法

  第一个参数是控件实例,这里是button1,第二个参数是信号实例clicked,第三个参数是事件处理函数GCallback,这里是button1_handler,最后一个参数是额外数据NULL。

其中需要注意的是第三个参数这里写的是G_CALLBACK (button1_handler)因为button1_handler本质上只是一个函数而不是GCallback,我们先搞清楚GCallback是什么,参考官方文档如下:

GTK+3系列教程4:添加事件处理_第3张图片
GCallback官方参考

  注意看最后一句话,使用G_CALLBACK()将回调函数转换为GCallback。我们继续看G_CALLBACK()

GTK+3系列教程4:添加事件处理_第4张图片
G_CALLBACK()官方参考

  原来G_CALLBACK()是用于将函数转换成GCallback的宏定义。

  g_print("Hello World\n");  是将参数输出到stdout(标准输出),需要自行添加\n来实现分行,也不适合用于(debug)调试。参考文档如下。

GTK+3系列教程4:添加事件处理_第5张图片
g_print()官方参考

  下面再来深入分析下g_signal_connect()和事件处理函数之间的关系,上图。

GTK+3系列教程4:添加事件处理_第6张图片
关系图

  图中箭头双方都是相互关联的。现在就很清楚了吧。

  下节教程将介绍各种布局的使用。

你可能感兴趣的:(GTK+3系列教程4:添加事件处理)