GTK+浅谈之二信号回调和事件
2015-09-06 11:03
183 查看
一、简介
因为GTK+是一个面向对象的构件集,它有一个继承的层次,这个继承机制也应用于信号。例如,destroy信号是由GtkObject而不是GtkWidget发出的,但因为GtkWidget继承了GtkObject,所以GtkObject派生的窗口小部件或对象都可以发出destroy信号。回调表的使用很容易,如果回调表中有:show void GtkWidget *widget,gpointer data,则为了处理show,将需要一个回调函数:void MyCallBack(GtkWidget *widget, gpointer data)。
二、详解
1、Gtk+构件层次树
2、Gtk+信号
3、Gtk+事件
事件不同于信号,信号一般是在较低的层次(如X Window System)上发布的,而事件基本上是由GTK+、GDK或GNOME(主要是GDK)产生的定制信号,处理事件可能比处理信号涉及的工作更多。所有事件处理程序都传递一个指向GdkEvent的指针(使用事件的关键)。把该指针转换成特定的类型是由自己的代码负责。
通用的GdkEvent结构如下:
为了确定触发的是何种事件,可检查类型成员DdkEventType。比如为了确定刚发生的事件是键入事件,可以判断:if (event->type == GDK_KEY_PRESS){}。
所有事件处理程序都有一个Boolean返回值,用它指出你的代码是否处理了相应的事件。如果代码确实处理了该事件,返回TRUE;若事件程序返回FALSE,则Gtk+和Gdk以通常的方式处理该事件。如处理delete_event信号的事件处理程序返回TRUE,则不在继续处理,若返回FLASE,则Gtk+和Gdk将发布一个destroy信号给窗口,关闭它。
在确定了产生的事件类型后,关于该事件的信息可通过传入相应的处理程序的GdkEvent指针转换为一个专用于该事件类型的GDK事件结构来查看。
三、总结
(1)常常会出现一个与实际所完全不同的调用,虽然仍可编译,但若一个回调函数的参数比实际传递给它的少,会有损坏内存的危险;同样,若回调函数指定的参数比实际传递给它的多,则会使回调函数中某些参数所含的信息作废。因此处理信号应使用正确的回调,已避免代码产生不可预测的影响。(2)Gtk+和Gdk的信号与标准的POSIX信号没有任何关系。
(3)若有建议,请留言,在此先感谢!
相关文章推荐
- C++三大继承构造函数的执行顺序详解
- 第一次作业 黄学才
- Excel 返回第2大的值
- Balanced Lineup(树状数组 POJ3264)
- oracle数据库导入导出命令!
- Android 蓝牙4.0 BLE 理解
- 【白书之路】455 - Periodic Strings KMP next 数组 求 循环节
- CSS伪类和伪元素
- zabbix 添加账号和权限
- 前端学习指导
- C++要掌握的知识点
- 在VS2008环境下的C++异常处理
- MyBaties
- VBA 检查模块中是否有某个函数
- 【C++】继承中的隐藏与覆盖
- Data Mining
- SQL语句基本结构
- 企业级分布式搜索平台Solr视频教程
- Android中dp和px之间进行转换
- ZOJ 3662 Math Magic(12年长春现场赛 H)