GTK简介 - 层次、信号、事件

来源:互联网 发布:网络传销为什么没人管 编辑:程序博客网 时间:2024/04/30 16:15


下面的内容是初学GTK时给同学做的一个介绍内容,更为详细的可以参考:http://apps.hi.baidu.com/share/detail/19271271


要弄懂GTK,我们先从GTK的层次下手,先是几个概念:


XWindow系统


GDK


GLib


GTK+



XWindow系统:


X Window,即X Windows图形用户接口,它并不是一个软件,而是一个协议;



在最底层,X包括一种存在与客户端和服务器间的协议。X服务器是响应客户端请求并向用户提供可交互桌面的软件。

客户端可以发送请求来创建窗口,绘制文本和图形,这些窗口、文本和图形都会显示在服务器上;


一旦用户移动鼠标、按下按键或者单击鼠标,X服务器就会向客户端发送事件通知客户端;



客户就是通过Xlib提供的API向X服务器发送请求,并从X服务器那里接受错误消息和事件;



客户端和X服务器可以存在于一台计算机上,也可以在网络上的不同计算机上运行;


GDK:


GDK是标准Xlib函数调用的一个基本封装(wrapper);



Glib:


提供了一系列封装的函数和定义,以及对一些C标准库函数的封装,用于对上层绘图等的支持。



GTK+:


一个小型而高效的控件库,包含GTK与GDK层,GTK层封装了大量的Widget及相关操作,GDK层则如上所述,是对Xlib的封装。



下面介绍一下GTK的信号与回调函数原理,并从中解析GTK是如何工作的:


GTK是一个事件驱动的工具包,意味着它会等在gtk_main()那里,直到下一个事件发生,才把控制权传给适当的函数。

控制权的传递是使用“信号”的办法来完成的。当一个事件发生时,如按一下鼠标键,所按的构件会“发出”适当的信号。这就是GTK的工作机制。

有所有构件都继承的信号,如"destroy",有构件专有的信号,如开关(toggle)按钮发出的"toggled"信号。



上面提到了两个概念:事件与信号,无论在MFC,或者GTK中,这两个概念都有类似的区别,在GTK中:


“信号(Signals)和事件(events)有关是因为GTK控件 (GtkWidget)通常收到一个事件的时候发出一个信号。

事件驱动着Gtk的主循环,”等待事件,然后处理它”。GTK 是一个事件驱动的工具包,意味着它会等在gtk_main() 那里,直到下一个事件发生,

才把控制权传给适当的函数。

信号只是保持了一个回调函数列表,然后调用回调函数(就是发出信号)。这样的作用是:控制权的传递是使用“信号”的办法来完成的。


说到这里,对于GTK的整体层次结构及工作原理,大家都应该有了一个简单的了解,具体工程应用,可以参考我上传的一份帮助文档,相信会有帮助:

http://download.csdn.net/detail/crazyingbird/4002710