V—用于 X 的免费 C++ GUI 框架
我喜欢 Linux 作为一个开发平台——它拥有我多年来一直使用的所有 Unix 工具。除了使用 X 开发图形用户界面 (GUI) 之外,Linux 在各方面都是一个卓越的开发平台。在一段时间内,使用 Microsoft Windows 的程序员可以选择使用 Microsoft 的 MFC 或 Borland 的 OWL 来开发 C++ GUI 应用程序。然而,Linux 在图形领域已经赶上来了,因为现在有一些非常好的免费 C++ GUI 框架可用于 X 和 Linux。本文是关于我编写的 GUI 框架 V。
我最初开发 V 是作为一个 C++ 书籍的教程示例。我的教程已经变成了一个非常完整、易于使用的 C++ GUI 框架,适用于开发几乎任何 GUI 应用程序。它与 X 和 Linux 配合使用,并使用标准的 X Athena 工具包,因此一切都保持免费。V 使用了一些定制版本的免费 Athena 3D 部件集,因此 V 应用程序具有非常美观的 3D 外观。V 也适用于 Microsoft Windows,因此您在 Linux 上使用 V 构建的应用程序可以轻松移植到 MS-Windows 以及其他 X 平台。V 根据 GNU Library General Public License 分发,因此您可以自由使用 V 开发其他免费软件或专有应用程序(只要您向最终用户提供 V 的源代码)。
另外两个优秀的框架是 wxWindows 和 YACL。虽然这两个程序都有其优点,但我认为 V 更易于使用,并且应用程序更用户友好。有关更多详细信息,V 和其他框架的比较发布在我的网页上 (http://www.cs.unm.edu/~wampler/)。这三个程序都提供了商业框架(如 MFC 或 OWL)的大部分功能。
如果您不使用 GUI 库或框架,您将被迫使用原生 X 工具包来开发您的 GUI,要么直接使用 X(非常困难),要么使用 Xt Athena 或 Motif 部件集(稍微容易一些)。虽然您可以使用这些工具包直接开发非常好的界面,但学习曲线陡峭。一个优秀的程序员至少需要一个月的稳定努力才能使用 Xt Athena 或 Motif 编写程序,并且应用程序仅限于 X 平台。原生 X 工具包的一个问题是它们被设计为完全灵活,并且可以处理几乎任何界面设计。这种非常通用性使得它们难以学习和使用。对于大多数应用程序,您根本不需要那么多的灵活性。
另一方面,V 从一开始就以易于编程为设计理念。我收到了新 V 用户的报告,说他们能够在短短四五个小时内启动并运行他们的第一个 V 应用程序,从下载 V 发行版到最终得到一个运行的应用程序。在一周内,程序员就能够充分利用 V 的几乎所有功能。即使是我在新墨西哥大学课堂上没有经验的程序员也在一周内学会了使用 V 进行编程。
这种易于编程的代价相当小。首先,您必须使用 V 对 GUI 元素的定义。当您使用 V 时,您最终会得到与标准 Motif 或 Microsoft Windows 应用程序非常相似的界面。此外,您还失去了一些在使用低级工具包时所拥有的低级访问和灵活性。对于绝大多数应用程序来说,这种损失并不显着。V 确实提供了获取一些低级细节的钩子,但我听说它们唯一的用途是与 OpenGL 和 Mesa 接口。
图 1 显示了 V 发行版中包含的 V 图标编辑器。图标编辑器是典型 V 应用程序的代表。主要用户界面元素是 命令窗口。命令窗口有一个菜单栏,它是大多数 Motif 和 Windows 应用程序上常见的下拉菜单。菜单栏下方是一个或多个工具栏,使您可以轻松使用最常用的命令。当前的趋势是在工具栏上放置带有小图标的按钮;使用 V,您可以在工具栏上使用任何标准控件对象。工具栏下方是绘图画布,您的应用程序在其中显示数据,例如文本信息、图形信息,或者在本例中是要编辑的图标。绘图画布可以有滚动条,用户使用鼠标或键盘与画布上显示的数据进行交互。绘图画布下方是状态栏,用于显示有用的信息,例如鼠标位置。
对话框是大多数 GUI 程序的重要组成部分。图 2 显示了 V 图标编辑器使用的颜色选择非模态对话框。V 支持模态和非模态对话框,并具有完整的控件集。
我希望您同意这个 V 应用程序的外观与您在 Linux 上看到的任何其他 X 应用程序一样好。图标编辑器也可以在 Microsoft Windows 中编译,而无需单个 #ifdef,并且看起来就像一个标准的 Windows 应用程序。
V 是一个 C++ 框架,因此,它由几个 C++ 基类组成,您可以用来派生自己的类。核心类是 vApp,它被用作应用程序其余部分的主要基础。一个最小的应用程序有一个从 vCommandWindow 类派生的命令窗口,其中至少包含一个菜单和一个绘图画布。命令窗口还可以包含工具栏和状态栏。当用户选择菜单项或激活工具栏上的命令对象时,V 会向您派生的 vCommandWindow 对象发送消息,您的程序随后会解释这些消息。您的程序通常会在从 vCanvas 类派生的画布对象上显示其输出。鼠标输入通过向您派生的画布类发送消息来处理。
虽然仅使用 vApp、vCommandWindow 和 vCanvas 类构建应用程序是可能的,但大多数应用程序也会使用对话框。V 当前支持的对话框控件包括
标准按钮
带有图标和颜色的按钮
切换按钮
标签
图标
复选框
单选按钮
组合框
列表
微调器
滑块
进度条
文本输入
多行文本
框架 (框)
切换框架(类似于选项卡)
对话框中控件的布局是通过指定每个控件相对于对话框中其他控件的位置来确定的。例如,您可以指定一个控件位于另一个控件的右侧和下方。所有对话框控件也可以在命令窗口的工具栏上使用。
V 还包括几个实现常见操作的标准对话框。其中最有用的是文件打开对话框,它允许用户交互式地选择文件和目录。由于不存在标准的 X 文件打开对话框,V 实现了自己的对话框。MS-Windows 版本的 V 使用标准的 Windows 文件对话框。其他标准对话框包括字体选择、是/否响应和消息框。使用标准对话框有助于确保您的应用程序与原生平台的外观和风格相匹配。
使用 V 的第一步是获取最新版本。V 的主要来源是我的网页 http://www.cs.unm.edu/~wampler/。 V 也可通过匿名 ftp 从 ftp://ftp.cs.unm.edu/pub/wampler 获取。解压缩发行版,决定要将源代码和库放在哪里,修改 makefile 以反映此决定并执行 make。
构建 V 后,阅读文档。您可以打印它,或者使用 xdvi 或 ghostscript 查看提供的 dvi 或 ps 文件。然后,您通常通过修改提供的示例来启动您自己的应用程序。大多数新 V 用户发现修改示例以很好地开始他们自己的工作非常容易。几个当前的 V 用户(已经熟悉 Internet、Linux 和 C++)在短短四五个小时内完成了下载、构建、阅读手册和构建第一个自定义 V 应用程序的整个过程。
Bruce E. Wampler, PhD (wampler@cs.unm.edu) 自 PC 行业早期就参与其中。事实上,他创立了两家成功的软件公司 Aspen Software 和 Reference Software International,并且是著名的语法检查器 Grammatik 的首席设计师和作者。他目前是新墨西哥大学的计算机科学兼职教授。