从今天开始读这本《LINUX应用程序开发指南:使用GTK+ GNOME库》, 边读边记录其要点,也希望这个读书笔记能对其他人有所帮助。
自由软件社区的一批计算机专家开始了 KDE项目(K Desktop Environment, K桌面环境),目的是提供一个开放源代码的图形用户接口和开发环境。该项目取得了极大的成功, K D E成为许多 L i n u x发布版本的首选桌面环境。 G N U / L i n u x项目因此而得到蓬勃发展。但是,KDE是基于Troll Technologies公司的Qt库的。Qt库是一个跨平台的 C++类库,可以用于多种Unix、Linux、Win32等操作系统。Qt并不是遵从 GPL或LGPL协议的软件包。它的许可条件是:如果使用它的免费版本开发应用程序或程序库,则所开发的软件必须开放源代码;如果使用它的商用版本,则可以用以开发私有的商用软件。另外, Qt库是属于 Troll公司的产品,一旦Troll公司破产,或者被收购,自由软件事业将受到严重打击。
1 9 9 7年由墨西哥国立自治大学的 Miguel de Icaza 领导的项目组开始了 G n o m e开发计划。Gnome是GNU Network Object Model Environment(GNU,网络对象模型环境)的缩写。该计划的最初目的是创建一种基于应用程序对象的架构,类似于微软公司的 OLE和 COM技术。然而,随着项目的进展,项目的范围也迅速地扩大;项目开发过程中有数百名程序员加入进来,编
写了成千上万行的源代码。该项目进展很快, 1998年发布了Gnome 1.0。目前的最新版本是于1 9 9 9年1 0月发布的 October Gnome。现在, G n o m e已成为一个强劲的 G U I应用程序开发框架,并且可以在任何一种 U n i x系统下运行。 G n o m e使用的图形库是 G t k + — 最初为了编写 G I M P而创建的一套构件库,它是基于 L G P L创建的,可以用它来开发开放源代码的自由软件,也可以开发不开放源代码的商用软件。 G n o m e的界面与 K D E的界面是类似的( G n o m e的目的之一就是创建一套类似 K D E的桌面环境),熟悉 K D E的用户无需学习就能够使用 G n o m e。由于以上几个原因,Gnome已经成为大多数 Linux发布版本的首选桌面环境。
由于G n o m e项目的成功, 1 9 9 8年11月Q t库的开发者 Tr o l l公司宣布修改许可证协议, Q t库将成为自由软件。但是获取 Q t库的许可证很不方便,况且 G n o m e的进展也很不错,因而,只要有可能,应该避免使用 Qt库以及KDE。
从用户的角度看, G n o m e是一个集成桌面环境和应用程序的套件。从程序员的角度看,它是一个应用程序开发框架 (由数目众多的实用函数库组成 )。即使用户不运行 Gnome桌面环境,用G n o m e编写的应用程序也可以正常运行,但是这些应用程序是可以很好地和 G n o m e桌面环境集成的。 G n o m e桌面环境包含文件管理器,它用于任务切换、启动程序以及放置其他程序的“面板” “控制中心” (包括配置系统的程序以及一些小东西 )等。这些程序在易用的图形界 、面背后隐藏了传统的 UNIX Shell。G n o m e的开发结构使开发一致的、易用的和可互相操作的应用程序成为可能。
这个函数把指定在options里的所有命令行选项解析并放入options结构指定的变量里面,例如,
static int greet_mode = FALSE;
.................................................
struct poptOption options[] = {
{
"greet",
‘g’,
POPT_ARG_NONE,
&greet_mode,
0,
N_("Say hello to specific people listed on the command line"),
NULL
}
.................................................
gnome_init_with_popt_table(PACKAGE, VERSION, argc, argv,
options, 0, &pctx);
由于指针的强大功能,这个函数调用后,变量greet_mode会被自动计算,根据是是否有-g或者--greet被指定在命令行上。
这个函数把所有非选项的参数提取出来放到args里。
1. 初始化库
2. 用popt分析参数
3. 国际化
4. 保存配置信息
5. 会话管理
6. 特殊的回调函数
1) 退出函数
2) Timeout函数
3) idle函数
4) 输入函数
1. autoconf
2. automake
3. libtool
这些工具使用还不是很熟练,需要进一步查寻文档,进一步的学习才可以。
这一章描述了gkt+的基础库glib, 主要涉及的概念有,
1. glib特有类型的定义
2. glib的调试宏,校验宏
3. 内存管理
4. 字符串的处理/GString
5. 数据 结构(链表,树,哈希表)
这是一个十分优雅而又适用的数据结构基础库,应该深入的学习,甚至应该阅读其整个源代码。参考文档在,
http://library.gnome.org/devel/glib/stable/
GdkWindow是指X Server上的窗口划分,代表着X Server上的一个真正的窗口,大多数GtkWidget都对应一个GdkWindow. 然后,有一些轻量级的组件(GtkLabel)则没有相对应的GdkWindow, 他们是被绘制在父窗口上的。
这和Windows实现是一样的,Windows上大多数组件都对应着一个相应的窗口句柄。像Label这样的轻量级组件也不需要一个标准的窗口句柄,所以,也是画在父窗口上的。
/ *显示构件,当构件的父构件(向上递归直到最高级别构件)显示时,
*构件将显示在屏幕上, */
void gtk_widget_show(GtkWidget* widget)
/ *隐藏构件,构件的 G d k W i n d o w依然存在*/
void gtk_widget_hide(GtkWidget* widget)
(Call) =============================>>
/ *映射构件,构件的 G d k W i n d o w显示在窗口上 */
void gtk_widget_map(GtkWidget* widget)
/ *反映射构件,隐藏构件的 G d k W i n d o w。注意,构件的 G d k W i n d o w还存在*/
void gtk_widget_unmap(GtkWidget* widget)
(Call) =============================>>
/* 显现一个构件,创建该构件的 G d k W i n d o w * /
void gtk_widget_realize(GtkWidget* widget)
/* 反显现构件,销毁该构件的 G d k W i n d o w * /
void gtk_widget_unrealize(GtkWidget* widget)
GTK会检查是否有哪个父窗口没有被map到X Server的窗口上去,如果存在这样的窗口,然后,就会map这个窗口,直到所有的父窗口都map,然后,标记这个窗口处于显示状态,但是这个窗口可能没有被立即显示,直到所有的父窗口都被显示后,这个窗口才能真正的被显示。
1) GtkWindow
2) GtkBox(GtkHBox, GtkVBox)
3) GtkTable
4) GtkFixed
5) GtkLayout