Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

GTK入门导引

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  2.2 编译Hello World

  用以下命令来编译:


gcc -Wall -g helloworld.c -o hello_world -L/usr/X11R6/lib 
-lglib -lgdk -lgtk -lX11 -lXext -lm

  函数库必须在内定的搜寻路径内, 如果找不到, -L<library directory> 则gcc会去找这些目录, 看看所需要的函数库是否找得到. 例如, 在我的Debian Linux系统中, 我已经增加了 -L/usr/X11R6/lib用来寻找X11函数库.

  以下函数库是很重要的. linker在处理之前, 必须知道什麽函数要用那一个函数库.

  函数库如下:

  glib函数库(-lglib), 包含一些有用的函数, 这个例子中只用到g_print(), 因为GTK是建在glib之上, 所以您几乎都一定会用到它. 详见glib一段.

  GDK函数库(-lgdk), Xlib的包装程式.

  GTK函数库(-lgtk), 视窗物件函数库, 基於GDK之上.

  xlib函数库(-lXlib) 基本上为GDK所用.

  Xext函数库(-lXext). 包含了shared memory pixmaps及其它的一些X extensions.

  math函数库(-lm). 为GTK所用, 有多方面用途.

  2.3 Signals及Callbacks的原理

  在我们更进一步探讨hello world之前, 我们要讲一下事件(events)及回呼函数(callbacks). GTK本身是个事件驱动的工具, 这意味著它会在gtk_main进入停歇状态, 一直到一个事件发生, 并且将控制交给适当的函数来处理.

  控制权的交出是由"signals"来决定的. 当事件发生, 诸如按下滑鼠的一个按键, 对应的信号会由该视窗物件所送出. 这便是GTK的主要工作. 要使一个按下的动作执行一个命令, 我们设定一个信号处理函数来撷取这个信号, 并且呼叫适当的函数. 这工作是由像以下的函数来完成的:


gint gtk_signal_connect (GtkObject *object,
 gchar *name,
 GtkSignalFunc func,
 gpointer func_data);

  其第一个参数是会送出信号的物件, 第二个是希望接取的信号名称. 第三个是当信号送出时的接取函数, 第四个则是要送给该函数的资料.

  第三个参数被称为"callback function", 而且必需是以下的形式:


void callback_func(GtkWidget *widget, gpointer *callback_data);

  第一个参数是指向该物件的指标, 第二个是在gtk_signal_connect()的最後一个参数.

  另外一个在hello world中有用到的函数是:


gint gtk_signal_connect_object (GtkObject *object,
gchar*name,
GtkSignalFunc func,
GtkObject *slot_object);

  gtk_signal_connect_object()跟gtk_signal_connect()一样, 除了callback函术只有一个参数, 一个指向GTK物件的指标. 所以当使用这个函数来接到信号时, 该callback函数必须是以下形式:


void callback_func (GtkObject *object);

  一般这个object是个widget(物件). 我们一般不设定callback给gtk_signal_connect_object. 他们是用来呼叫GTK函数来接受单一物件(widget or object)做为参数.

  有两个函数来连接信号的目的只是希望允许callbacks可以有不同数量的参数. 许多GTK函数仅接受一个GtkWidget指标做为参数, 所以您可以使用gtk_signal_connect_object()来使用这些函数, 而在您的函数里面, 您会需要额外的资料提供给callback.

[

  aidcode]2.4 步过Hello World

  现在您知道这些理论了, 我们现在来根据这些理论, 把"hello world"这个范例弄清楚.

  这是个当按钮被按下时, 会被呼叫到的callback函数. 参数的资料没有被用到.


void hello (GtkWidget *widget, gpointer *data)
{
g_print ("Hello World
");
}

  这是另一个callback函数, 它会呼叫gtk_main_quit()来离开程式.


void destroy (GtkWidget *widget, gpointer *data)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{

  下个部份, 宣告一个指标给GtkWidget. 这是准备用来产生视窗及按钮的.


GtkWidget *window;
GtkWidget *button;

  这里是我们的gtk_init. 设定GTK toolkit初始值.


gtk_init (&argc, &argv);

  产生新视窗. 这是蛮直接的. 记忆体配置给GtkWidget * window使其成为有效的资料. 它设定一个新的视窗, 但在我们呼叫gtk_widget_show(window)之前不会显示.


window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  这里是将object(window)连接到信号处理器的范例. 此处"destroy"是该信号. 该信号是window manager要销去这个视窗时, 或我们送出gtk_widget_destroy()时会产生的. 当我们这样设定时, 我们可同时处理两种状况. 这里我们使用destroy函数, 这使我们可以使用window manager来离开这个程式.

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 下一页


上一篇:GTK+/Gnome应用开发   下一篇:GTK v1.2 Tutorial(英文)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
·Motorola微处理器bootloader分析与应用
·Fedora Core5 NFS服务器搭建过程介绍
·Linux系统:让内存不再泄漏的实用技巧
·新手看招 手把手教你安装VMware虚拟机
·“侵权事件” 红帽称微软企图干扰用户
·删除Linux后 如何找回Windows启动菜单
·菜鸟乐园 Linux中常见文件系统格式介绍
·Linux操作系统下IPTables配置方法详解
·实用技巧 Linux系统的经典使用技巧八则
·Linux系统文件优化及磁盘检查方法介绍
推荐文章
·和luster一起学习系统调用(5)
·Java入门(2) 面向对象的程序设计
·Linux 99问(四)
·Enhydra入门-走进中国的Enhydra
·Servlet、Jsp性能优化
·解读Linux文件权限的设置方法
·了解你的敌人:Statistics
·在LINUX下安装 Sybase ASE 11.0.3.
精彩文章
·读核日记(一)
·活用Linux的后台任务
·如何配置Linux操作系统安全管理服务
·UW IMAP 服务器的性能优化
·在linux下如何使用USB盘
·怎样设置一个档案来作为 linux 的转
·Red Hat测试新版Linux 支持Xen虚拟
·Linux Remote-Boot mini-HOWTO
·GAWK 手册(七)
·RedHat环境下使用APT在线更新系统
·系统管理进阶-用户管理
·Linux命令Man解释:usermod:修改使用
·X-Window中如何设置字体
·基于IPsec的虚拟专用网在Linux上的
·Linux下的IP隧道研究(2)
·Linux下新手装网卡指南
·Linux 网管 123 --- 第9章. 各种杂
·设置一个高容量的Linux POP3服务器
·Linux指令大全
·Ethernet HOWTO Linux以太网-HOWTO
·FreeBSD 5.0 硬盘安装指南
·Java入门(8) 创建新类
·进程vs线程,如何选择?
·网站综合实例
·搭建基于Linux桌面环境的影音平台
·提升PHP速度全攻略
Power by linux-cn.com 粤ICP备05006655号