wxWindows 跨平台编码
从 Redmond 的大厅到开源倡议,多平台开发在过去几年中已成为主流词汇。这个词组的用法似乎都围绕着 Java、.NET、V 和 Qt 等事物;然而,我们不要忘记 wxWindows。
无论您是要将一些 MFC 代码移植到 Linux,还是仅仅想让您的应用程序对最广泛的用户群体可用,wxWindows 都能满足要求。奇怪的是,似乎没有多少人听说过它,但希望本文能帮助使信息更易于获取。
为什么要选择 wxWindows 而不是其他开发工具?这是一个合理的问题,对于每种工具,答案都不同。
虽然 Qt 是构建 KDE 应用程序的标准,但也可以使用 wxWindows。Qt 的 Microsoft Windows 版本不是免费用于商业用途的,但 wxWindows 是,并且 Qt 需要一个特殊的预处理器用于事件系统。
Microsoft 的 .Net 和 Ximian 的 Mono,以及 Java,与其说是工具包,不如说是技术。这些技术在应用程序中添加了一个层,可能会降低应用程序的性能。这可以被争论为一个“开发时间与性能”的问题,并且根据应用程序的生命周期而有所不同。与其陷入另一场语言战争,我们不如简单地说,“您的结果可能会有所不同。”
V 不如 wxWindows 灵活;它不支持那么多编译器。
在将 wxWindows 与这些其他多平台开发工具和语言进行比较时,重要的是要提及 wxWindows 本身就具有优点,并且不限于这些比较。
使用 wxWindows,您可以获得通常的开源自由——免费使用、自由修改以及免受供应商消失(或更新其库或工具以至于您必须购买新的)的风险。此外,您可以自由地在各种操作系统上运行应用程序,包括 UNIX/Linux、Windows、Mac OS 9、Mac OS X 和 OS2。更重要的是,它在每个操作系统上都为您提供原生的外观和感觉。wxWindows 的许可证非常灵活,并已获得开源促进会 (Open Source Initiative) 的批准。
wxWindows 已经有大约 11 年的历史,是一个稳定、成熟的开发库,通过网站 wxWindows.org 上的主要邮件列表提供实时支持。通过 300 多个类和 5,000 个函数,可以实现许多功能。使用此库从 MFC 移植应用程序也很简单。
一些主要公司正在使用 wxWindows,包括 AMD、英特尔图形实验室 (Intel Graphics Lab)、康柏 Alpha 微处理器开发组 (Compaq Alpha Microprocessor Development Group)、Netscape 和洛克希德·马丁 (Lockheed Martin)。开源应用基金会 (Open Source Applications Foundation) 正在其新程序 Chandler 中实现它(使用 wxPython),用于管理个人信息和与他人协作。
Helpblocks (www.helpblocks.com) 是一款创建多平台帮助文件的应用程序,使用在 Windows 和 Linux 上运行的 wxWindows 库开发。其他应用程序包括 Vulcan 3-D(矿业建模软件等)、SciTech 的 Display Doctor、Intuitive Works 的 Intuitive MX(具有混合阶段 3-D 表示的多轨音频混音器)和 Geneva Aerospace 的 Ground Control Station。您的应用程序可能是列表中的下一个。
您需要 GCC,也可以使用 gdb、ddd、Emacs 和 IDE(例如 Anjuta)等工具。要在 Windows 上编译,您可能需要交叉编译器。最重要的是,您需要 wxWindows 库本身,也可以在 wxWindows 网站上下载或购买 CD。撰写本文时,最新的稳定版本是 2.4.0 版。
尽管我们中的许多人这样做,但最好阅读库包中找到的与 Linux 开发相关的文档。
此外,明智的做法是订阅 wx-user 邮件列表(在 wxWindows.org 的支持下找到),以防您遇到困难。最合理的做法是搜索档案,看看您的问题是否已经被问过。
该库本身附带 70 多个示例应用程序,演示了您想用它做的几乎所有可以想象的事情;这些本身可能就是最好的文档,因为您可以修改一个工作应用程序并了解它是如何完成的。一旦您获得了该库并熟悉了如何将其与您的工具一起使用,您就可以开始编码了。
创建一个简单的应用程序类很容易。列表 1 提供了一个创建 wxApp 类的基本示例。
如您所见,创建一个主要的 wxWindows 应用程序相当容易,而熟悉 MFC 的人可能会若有所思地摸着下巴。您会很高兴知道其中没有 MFC,将来也不会有 MFC,但是这些类是从 MFC 简单过渡而来的。它有一些 MFC 没有的东西,并且不支持 OLE。
列表 1 中存在一个空的事件表,它允许您处理事件,例如鼠标单击或按键或您自己的自定义事件。当然,这段代码显示了一个相当无聊的主应用程序,它坐在那里盯着您,甚至不眨一下眼。
库中有很多工作示例;似乎每个类都有一个示例演示其用法。一个示例是事件处理示例,由 Vadim Zeitlin 提供。之所以使用此示例,是因为许多开始使用 wxWindows 库的开发人员似乎在事件方面遇到了一些问题;现在您将领先一步。您需要 wxWindows 库来尝试此操作,如果您这样做,您将在 Samples 目录下获得它的完整源代码。
甚至还有一个从该站点链接到的 Wiki,因此您可以快速访问最新的文档,甚至在发现要添加的内容时对其进行更正。
除了成千上万的人之外,核心开发团队应获得特别提及和感谢
Julian Smart,www.anthemion.co.uk
Robin Dunn,www.python.org
Vadim Zeitlin,www.tt-solutions.com
Stefan Csomor,www.advanced.ch
Vaclav Slavik,sourceforge.net/users/vaclavslavik
Robert Roebling,www.roebling.de
这些开发人员经常在 wx-user 邮件列表中每天甚至每小时都在帮助 wxWindows 库的用户。
在 wxWindows 库 2.4.0 版发布之后,开发团队征集了他们希望在 3.0 版中看到的内容。新的端口总是在开发中,下一个版本应该也不例外。预期的端口之一是 Marco Cavallini 和 Robert Roebling 的 Windows CE 端口。
Winelib 支持也即将推出,由 Winelib 团队提供,Julian Smart 和 Stefan Csomor 正在开发用于从 MFC 移植到 wxWindows 的专有工具。
随着越来越多的公司想要使用 Linux,他们将寻找将 MFC 代码移植到 Linux 的方法,其中最简单的方法之一是使用 wxWindows 库。仅成本就使其值得。由于库本身的简单性,从 MFC 移植的开发问题被最小化。因此,如果一家公司希望从基于 Windows 的系统更改为基于 Linux 的系统,他们可以期望轻松移植他们拥有的任何代码。wxNet 端口也在进行中。
也许您可以为使用 wxWindows 完成的众多应用程序添加一些内容。wxWindows 应用程序的最新列表可在 wxWindows.org 上找到。

Taran Rampersad 是一位拥有 14 年经验的软件开发人员,目前在特立尼达和多巴哥从事咨询、开发和写作工作。他积极参与当地计算机协会、流程管理,并协助组织加勒比 FLOS 会议 (floscaribbean.org)。他的个人网站是 KnowProSE.com。