回 目 录
上 一 章 下 一 章

# 第十九章：开发工具库和扩展组件库

  通过以上章节，你现在知道CURSES姊妹库的威力了吧？你现在一定卷起袖子准备开发一个规模宏大的项目了。不过先打住…如果只是直接使用NCURSES库或者其姊妹库，编写这些代码并维护其中的窗口组件仍然是件相当痛苦的事。以下会介绍一些组件工具库和扩展组件库。这些库中包含了一些可以直接使用的工具和常用组件，可以用来替代你自己编写的组件，你可以直接使用它们，或从这些组件的代码中汲取编程灵感，甚至还可以自己来扩展这些组件的功能。

### 19.1. CDK (Curses Development Kit)

  在这里先引用作者的话：

CDK是CURSES开发包（Curses Development Kit）的缩写，目前包含21个可以用来迅速开发CURESES程序的常用组件。

  这个工具包提供了一些可以直接应用到程序中的常用组件。这些组件的源代码都有良好的编码风格和非常详细的文档。示例目录中的例子会给CURSES的初学者很好的开始。CDK可以从官方网站http://www.vexus.ca/products/CDK/cdk.tar.gz下载（译者注：也可以从Poet项目的站点http://poet.cosoft.org.cn/downloads/develop/cdk.tar.gz下载）。你可以根据tar包中的README文件提示安装它。

#### 19.1.1. 组件列表

  下面这个列表就是CDK中的组件列表，旁边有这个组件的说明：

组件 | 简要说明
Alphalist | 允许用户从一个单词列表中选择一个单词，并且能够通过键入单词的前几个字符来缩短搜索列表。
Buttonbox | 创建按钮。
Calendar | 创建一个简单日历。
Dialog | 创建一个让用户通过按钮响应的对话框。
Entry | 允许用户可以输入各种类型的数据。
File Selector | 一个用CDK基本组件建立组成的文件选择器。这个例子展示了怎样用CDK基本组件创建一个复杂的对话框。
Graph | 画一个图标
Histogram | 画一个柱状图
Item List | 创建一个可以供用户选择的弹出式区域。对于选择日期来说是个非常有用的组件。
Label | 显示一个弹出式信息框，它的标签可以被看作窗口的一部分。
Marquee | 显示一个可以滚动的选取框。
Matrix | 创建一个由很多选项组合的复杂矩阵。
Menu | 创建一个下拉式菜单。
Multiple Line Entry | 一个多行的输入区域，对于输入多行的数据（例如描述文本）很有用。
Radio List | 创建一个单选按钮列表。
Scale | 产生一个数值范围让用户在限定的范围内(用方向键等)从中选定一个数值。
Scrolling List | 创建一个滚动列表/菜单。
Scrolling Window | 创建一个可滚动的日志文件查看器。你可以在它运行时向窗口中添加数据。这是一个很不错的用来显示某些进度的组件。（类似一个控制台窗口）
Selection List | 创建一个多选项菜单。
Slider | 像Scale组件一样，这个组件提供一个可视的滑块用来显示数值。
Template | 创建一个预先设置输入文字的敏感区域，常被用作输入日期、电话号码等预先设置好格式的输入区域。
Viewer | 这是一个文件/信息查看器。在你要从某个文件读取信息时将会非常有用。

#### 19.1.2. 一些吸引人的功能

  CDK除了让基于CURSES的程序便于开发和维护。CDK还解决了很多复杂的CURSES处理问题。例如打印混合颜色的字符串，使字符串看起来更雅致。你也可以向CDK的某些函数传递带修饰标记字符串：

例如：

  "</B/1>This line should have a yellow foreground and a blue background.<l;!1>"

  当你将这些参数传给newCDKLabel()函数，它将打印一行蓝色背景的黄色字符串。当然，还有很多修饰标记，让字符看起来更加美观和精致。你可以通过查阅man文档中的cdk_display(3X)页找到更多详细的资料。这页给出了很多非常不错的例子来说明它的用法。

#### 19.1.3. 总结

  总而言之，CDK包含了很多编码风格良好的扩展组件。适当的使用这些组件可以很方便的构建一个强大、稳定的工作框架。尤其是编写一个比较复杂的图形用户界面。

### 19.2. 对话组件

  很久以前，也就是1994年的9月，那时Linux还鲜有人知，Jeff Tranter就在Linux Journal发表了一篇关于人机对话的文章。这篇文章的开头是这样写的：

  Linux是基于Unix的操作系统，但是它的内核和应用程序中很多独特且实用的功能却超过了Unix 下某些常用的东西。其中一个鲜为人知的亮点就是“dialog”：一个可以不用编写shell脚本就可以创建专业效果的对话框的部件。这篇文章仅仅作为一个指南，介绍dialog并通过例子告诉你何时何地可以用到它……

  就像他说明的，dialog是一个真正的亮点。它可以简单的创造出专业效果的对话框。它可以创建多种多样的对话框，比如：带菜单的、带选项列表的等等。它应该是缺省安装的，如果你的机器上没有，你可以点击ibiblio linux archive.下载

  上面的文章给出了dialog的作用和能力的概览。man文档还有更多关于dialog详细的资料。它可以应用在更多的情况下。Linux内核的文本模式就是一个很好应用dialog的例子。Linux的内核用不同版本的dialog定制自己所需要的东西。

  dialog最初是为shell脚本代码的使用而设计的。如果你想将它应用到你的C程序中，你可以使用lobdialog。但是关于libdialog的文档非常稀少。最权威的参考是这个库的dialog.h头文件。你也许需要去改动它已得到自己想要的输出。非常幸运，它的源代码很容易定制。我已经多次成功地通过自己修改这些代码应用于不同的应用场合。

### 19.3. Perl中的CURSES模块

  Perl中的CURSES模块：Curses::Form 和Curses::Widgets用来从Perl中访问Curses。如果你已经安装了Curses和Perl，你就可以从CPAN 模块页的“Curses”的类别中下载这三个压缩的模块。当你安装这些模块后，就可以像在Perl中用其他模块那样使用。如果你需要更多详细资料可以参看perlmod man文档。以上的模块都包含很不错的说明文档，而且包含了一些演示脚本来测试这些功能。虽然widgets模块还很原始，但这些模块提供从Perl中访问curses很好的途径。

  如果需要更多的资料可以参看man页Curses(3)，Curses::Form(3)和Curses::Widgets(3)这些页只有安装以上的模块才可以被安装。
回 目 录
上 一 章 下 一 章