前言 1
第1部分 编程入门 5
第1章 什么是GNOME 7
1.1 GNOME各种软件之间的关系 7
1.1.1 软件层次 8
1.1.2 命名约定 9
1.2 编写代码的各种方式 9
1.3 C对象运行 10
1.3.1 封装 10
1.3.2 继承 10
1.3.3 方法 11
1.5 信号和回调 12
1.4 小部件的作用 12
1.6 GIMP的glib库 13
1.6.1 基本数据类型 13
1.6.2 glib的工具函数 15
1.7 细读源代码 17
1.8 小结 18
第2章 窗口显示 19
2.1 开始 19
2.2 Hello World程序 19
2.3 GTK+的窗口 23
2.4 关闭窗口 25
2.5 回调和事件 27
2.6 带按钮的窗口 27
2.7 GNOME窗口 29
2.8 开始编写GNOME应用程序 32
2.9 小结 35
第3章 显示弹出式对话框 37
3.1 弹出式窗口、对话框和窗口小部件 37
3.2 对话框的工作方式 38
3.3 GNOME定义的对话框 38
3.3.1 做一个简单的声明 38
3.3.2 询问一个简单的问题 41
3.3.3 确定对话框类型 44
3.3.4 键盘输入 46
3.3.5 传给回调的数据 50
3.3.6 进度条 53
3.4 创建弹出式窗口和对话框 55
3.5 弹回之后销毁 56
3.6 通过隐藏来弹回窗口 60
3.7 数据输出和输入 62
3.8 小结 66
第4章 在窗口中规划小部件 67
4.1 框的放置 67
4.1.1 垂直放置框 67
4.1.2 水平放置框 70
4.1.3 水平框选项 71
4.1.4 垂直框选项 75
4.1.5 在框中分隔小部件 78
4.1.6 框中的框 82
4.2.1 放置一个小表格 85
4.2 表放置 85
4.2.2 表格上的三个按钮 89
4.2.3 选项设置 92
4.2.4 重叠小部件 96
4.3 把框和表结合起来 98
4.4 小结 102
第5章 小部件包含小部件 103
5.1 固定容器 103
5.2 对齐容器 106
5.3 框架容器 109
5.4 外观框架容器 114
5.5 窗格容器 117
5.6 布局容器 120
5.7 滚动窗口容器 125
5.8 记事本容器 128
5.9 按钮框 132
5.10 小结 139
第6章 事件、信号和回调 141
6.1 读事件队列 141
6.2 事件处理的顺序 142
6.3 发送你自己的信号 142
6.4 信号的名称和ID 145
6.5 回调函数的形式 145
6.6 空闲时的后台处理 155
6.7 定时器 157
6.8 从文件或套接字读取输入 160
6.9 小结 163
7.1 两种图形 165
第7章 位图、像素图和光标 165
7.2 XPM格式 166
7.3 从数据显示XPM 168
7.4 从文件显示XPM 170
7.5 用XPM来装饰按钮 171
7.6 XBM格式 173
7.7 位图工具 173
7.8 显示XBM光标 174
7.9 创建光标 180
7.10 从XPM创建光标 183
7.11 小结 188
8.1 菜单创建的机制 189
第8章 菜单和工具条 189
8.2 菜单类型和宏 195
8.3 标准GNOME菜单布局 198
8.4 帮助文件 204
8.5 弹出式菜单 205
8.6 创建一个工具条 208
8.7 库存图标 210
8.8 非标准图标 216
8.9 禁用和启用菜单项 219
8.10 禁用和启用工具条项 221
8.11 隐藏和显示菜单项 224
8.12 隐藏和显示工具条项 226
8.13 菜单中的单选按钮 228
8.14 工具条中的单选按钮 231
8.15 菜单中的开关按钮 234
8.16 工具条中的开关按钮 237
8.17 小结 240
第2部分 循序渐进 241
第9章 GnomeCanvas小部件 243
9.1 GnomeCanvas小部件 243
9.2 鼠标、事件以及栈顺序 247
9.3 传递给画布项目的事件 250
9.4 移动画布项目 258
9.5 画布图像 261
9.6 画布文本 266
9.7 画布上项目的组合 269
9.8 在画布上添加小部件 273
9.9 在画布上画多边形 276
9.10 画布仿射变换 278
9.11 GdkEvent 281
9.11.1 公用字段 283
9.11.2 GdkEvent 285
9.11.3 GdkEventAny 286
9.11.4 GdkEventButton 286
9.11.5 GdkEventClient 287
9.11.6 GdkEventConfigure 287
9.11.7 GdkEventCrossing 287
9.11.10 GdkEventFocus 289
9.11.9 GdkEventExpose 289
9.11.8 GdkEventDND 289
9.11.11 GdkEventKey 290
9.11.12 GdkEventMotion 290
9.11.13 GdkEventNoExpose 291
9.11.14 GdkEventProperty 291
9.11.15 GdkEventProximity 291
9.11.16 GdkEventtSelection 292
9.11.17 GdkEventVisibility 292
9.12 小结 293
第10章 绘图区与图形元素 295
10.1 绘图区基础 295
10.2 画一个像素 298
10.3 绘画以及填充矩形 301
10.4 绘画以及填充多边形 304
10.5 画圆、椭圆以及弧线 308
10.6 描绘文本 311
10.7 描绘位图 315
10.8 调整绘图区大小 319
10.9 在内存上绘图和制作动画 322
10.10 小结 326
第11章 颜色与图形上下文 327
11.1 颜色的体系结构 327
11.2 图形上下文 331
11.3 小部件颜色的设置 338
11.4 图形上下文中的线型 341
11.5 点画法 349
11.6 在GTKGC中设置值的函数 354
11.7 选择颜色对话框 358
11.8 关于GtkStyle的一些说明 363
11.9 小结 364
第12章 鼠标和键盘 365
12.1 对鼠标事件的响应 365
12.2 获取和释放鼠标 371
12.3 从键盘读入字符 375
12.4 GNOME的命令行选项 381
12.5 添加命令行选项 383
12.6 小结 387
13.1 对字体的解析 389
第13章 字体 389
13.2 字体的命名 390
13.3 字体选择器 392
13.4 字体的大小和放置 395
13.5 小结 403
第14章 小部件技巧 405
14.1 探索小部件 405
14.2 与小部件对话 409
14.3 监听小部件 413
14.4 创建、实现、映射和显示 417
14.4.1 创建和撤消 417
14.4.5 显示和隐藏一个按钮 418
14.4.4 实现和取消 418
14.4.3 映射和取消映射 418
14.4.2 显示和隐藏 418
14.5 小部件的风格 421
14.6 设置小部件风格 425
14.7 小结 428
第15章 applet 429
15.1 一个简单的applet 429
15.2 一个启动应用程序的applet 431
15.3 显示更新信息 432
15.4 applet菜单 435
15.5 面板定位 438
15.6 小结 440
16.1 简单文本拖动-放置 441
第16章 拖放、复制、剪切和粘贴 441
16.2 应用程序之间图形数据的移动 445
16.3 剪切和粘贴 452
16.4 小结 455
第17章 多文档界面 457
17.1 一个简单的多文档界面 457
17.2 MDI菜单和显示模式 460
17.3 带工具条的MDI窗口 466
17.4 小结 471
第18章 创建自己的小部件 473
18.1 条形图小部件 473
18.2 使用AgBargraph小部件 474
18.3 AgBargraph头文件 475
18.4 AgBargraph小部件 478
18.5 小部件的修改和更新 493
18.6 小结 494
第19章 配置和国际化 495
19.1 环境控制 495
19.1.1 配置文件格式 495
19.1.2 配置文件位置 496
19.1.3 读写配置文件 497
19.1.4 保存和获取向量 499
19.1.5 配置文件的数据类型 500
19.2 国际化 503
19.3 小结 506
第3部分 参考与机制 507
20.1 安装GNOME源码 509
第20章 配置与编译 509
20.2 建立开发目录 510
20.3 宏 510
20.4 configure.in文件 511
20.5 文本文件 513
20.6 acconfig.h文件 514
20.7 autogen.sh脚本 514
20.8 Makefile.am主文件 515
20.9 源代码目录 516
20.10 Makefile.am从属文件 516
20.11 运行autogen.sh脚本 517
20.12 小结 518
第21章 GTK+的小部件 519
21.1 GtkAccelLabel 520
21.2 GtkAdjustment 521
21.3 GtkAlignment 522
21.4 GtkArrow 523
21.5 GtkAspectFrame 524
21.6 GtkBin 525
21.7 GtkBox 525
21.8 GtkButton 526
21.9 GtkButtonBox 526
21.10 GtkCalendar 527
21.11 GtkCheckButton 528
21.12 CtkCheckMenuItem 529
21.13 GtkCList 530
21.14 GtkClock 534
21.15 GtkColorSelection 535
21.16 GtkColorSelectionDialog 536
21.17 GtkCombo 537
21.18 GtkContainer 538
21.19 GtkCTree 540
21.20 GtkCurve 545
21.21 GtkData 547
21.22 GtkDial 547
21.23 GtkDialog 548
21.24 GtkDrawingArea 550
21.25 GtkEditable 550
21.26 GtkEntry 551
21.27 GtkEventBox 552
21.28 GtkFileSelection 553
21.29 GtkFixed 555
21.30 GtkFontSelection 555
21.31 GtkFontSelectionDialog 557
21.32 GtkFrame 559
21.33 GtkGammaCurve 560
21.34 GtkHandleBox 560
21.35 GtkHBox 562
21.36 GtkHButtonBox 562
21.37 GtkHPaned 563
21.38 GtkHRuler 563
21.39 GtkHScale 564
21.40 GtkHScrollbar 565
21.41 GtkHSeparator 566
21.42 GtkImage 567
21.43 GtkInputDialog 568
21.44 GtkInvisible 569
21.45 GtkItem 570
21.46 GtkItemFactory 570
21.47 GtkLabel 572
21.48 GtkLayout 573
21.49 GtkList 574
21.50 GtkListItem 576
21.51 GtkMenu 577
21.52 GtkMenuBar 579
21.53 GtkMenuItem 580
21.55 GtkMisc 581
21.54 GtkMenuShell 581
21.56 GtkNotebook 582
21.57 GtkObject 584
21.58 GtkOptionMenu 586
21.59 GtkPacker 587
21.60 GtkPaned 590
21.61 GtkPixmap 590
21.62 GtkPixmapMenuItem 591
21.63 GtkPlug 591
21.64 GtkPreview 592
21.65 GtkProgress 594
21.66 GtkProgressBar 594
21.67 GtkRadioButton 596
21.68 GtkRadioMenuItem 598
21.69 GtkRange 599
21.70 GtkRuler 600
21.71 GtkScale 601
21.72 GtkScrollbar 601
21.73 GtkScrolledWindow 602
21.74 GtkSeparator 603
21.75 GtkSocket 603
21.76 GtkSpinButton 603
21.77 GtkStatusbar 605
21.78 GtkTable 606
21.79 GtkTearOffMenuItem 607
21.81 GtkText 608
21.80 GtkTed 608
21.82 GtkTipsQuery 609
21.83 GtkToggleButton 610
21.84 GtkToolbar 610
21.85 GtkTooltips 613
21.86 GtkTree 614
21.87 GtkTreeItem 616
21.88 GtkVBox 617
21.89 GtkVButtonBox 617
21.90 GtkViewport 618
21.91 GtkVPaned 618
21.92 GtkVRuler 619
21.94 GtkVScrollbar 620
21.93 GtkVScale 620
21.95 GtkVSeparator 621
21.96 GtkWidget 622
21.97 GtkWindow 627
21.98 小结 628
第22章 GNOME的小部件 629
22.1 GnomeAbout 629
22.2 GnomeAnimator 630
22.3 GnomeApp 633
22.4 GnomeAppBar 634
22.5 GnomeCalculator 635
22.6 GnomeCanvas 636
22.9 GnomeCanvasImage 638
22.8 GnomeCanvasGroup 638
22.7 GnomeCanvasEllipse 638
22.10 GnomeCanvasItem 639
22.11 GnomeCanvasLine 640
22.12 GnomeCanvasPolygon 641
22.13 GnomeCanvasRE 641
22.14 GnomeCanvasRect 641
22.15 GnomeCanvasText 642
22.16 GnomeCanvasWidget 642
22.17 GnomeClient 642
22.18 GnomeColorPicker 647
22.19 GnomeDEntryEdit 648
22.20 GnomeDialog 650
22.21 GnomeDock 653
22.22 GnomeDockBand 657
22.23 GnomeDockItem 659
22.24 GnomeDockLayout 660
22.25 GnomeEntry 661
22.26 GnomeFileEntry 662
22.27 GnomeFontPicker 664
22.28 GnomeFontSelector 665
22.29 GnomeGuru 666
22.30 GnomeHRef 667
22.31 GnomeIconEntry 668
22.32 GnomeIconSelection 670
22.33 GnomeLess 671
22.34 GnomeMDI 672
22.35 GnomeMDIChild 673
22.36 GnomeMDIGenericChild 674
22.37 GnomeMessageBox 675
22.38 GnomeNumberEntry 677
22.39 GnomePaperSelector 678
22.40 GnomePixmap 680
22.41 GnomePixmapEntry 682
22.42 GnomeProcBar 683
22.43 GnomePropertyBox 685
22.44 GnomeScores 689
22.45 GnomeSpell 690
22.46 GnomeStock 691
22.48 小结 693
22.47 GnomeStockPixmapWidget 693
第23章 一些Linux机制 695
23.1 Linux错误代码 695
23.2 生成进程 696
23.3 执行命令行 698
23.4 管道 699
23.5 时间 700
23.6 文件信息 704
23.7 系统信息 706
23.8 小结 709
第24章 Win32和GNOME的比较与剖析 711
24.1 Win32程序 711
24.2 GNOME程序 714
24.3 详细比较 716
24.3.1 初始化 717
24.3.2 主窗口 717
24.3.3 响应事件 717
24.3.4 主循环 718
24.3.5 程序的关闭 718
24.3.6 全局数据 718
24.4 小结 719
附录A 光盘上的内容 721
A.1 光盘上的内容目录 721
A.2 示例 722
A.3 GNOME 722
A.4 工具 723
附录B 设置软件开发环境 725
B.1 Linux 725
B.2 gcc(egcs) 726
B.3 Xfree86 726
B.4 autoconf和automake 726
B.5 GNOME、glib、GDK及GTK+ 726
B.5.1 从源代码安装GTK+ 727
B.5.2 获取GTK+和GNOME源文件 727
附录C 继承 731
附录D arg设置与获取 737
附录E 枚举类型 745
附录F 信号 759
附录G 返回型函数 767