您的位置:首页 > 其它

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)若有建议,请留言,在此先感谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: