GTK+浅谈之二信号回调和事件
来源:互联网 发布:java 定义泛型返回值 编辑:程序博客网 时间:2024/05/21 10:35
一、简介
因为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)若有建议,请留言,在此先感谢!
- GTK+浅谈之二信号回调和事件
- gtk 事件信号,和回调
- GTK GDK 事件 信号
- Gtk事件与信号关系
- GTK简介 - 层次、信号、事件
- gtk gdk 事件 信号分析
- GTK+浅谈之总结
- C/C++回调方式系列之二class接口回调和lambda程式
- asio学习之二:多线程同步回调和访问资源问题
- 浅谈语音信号处理系列之二 语音信号处理的基础
- 浅谈语音信号处理系列之二 语音信号处理的基础
- Unity3D Animator 动态添加事件回调和替换动画
- 高级事件和信号处理@GTK+ 2.0 中文教程连载
- GTK+ 中的事件(events)和信号(signals)
- GTK+ 中的事件(events)和信号(signals)
- GTK+浅谈之三简单计算器
- GTK+浅谈之四定时器的应用
- GTK+浅谈之五等待旋转动画
- Android android:windowSoftInputMode 属性整理
- Android Studio上Git使用指南
- 关于conversion from string to type date is not valid错误
- drawInRect:withFont:lineBreakMode:alignment:' is deprecated: warning 和动态获取label的高度
- C++
- GTK+浅谈之二信号回调和事件
- [案例讲解]拆解完整案例 领悟云表神奇(前言)
- How to Delete From or Add Resource to OCR in Oracle Clusterware (文档 ID 1069369.1)
- Servlet中的过滤器Filter详解
- sql 函数记录
- Combinations
- hdu 1237 简单计算器(数组模拟栈,队列)
- python中json到dict转换
- 【学习总结】总结一些书籍、Blog、网站等资料汇总