第一章 简介 (1)

10 views
Skip to first unread message

xunj...@gmail.com

unread,
Apr 9, 2006, 10:06:57 AM4/9/06
to wxLife
第一章 简介

在本章中,我们将回答诸如wxWidgets是什么,它与其它的解决方案有什么不同等问题。我们将介绍该项目的历史,wxWidgets社区如何运行,wxWidgets的版权以及它的整体架构等等。

wxWidgets是什么?

wxWidgets是一个用于编写带图形用户界面的桌面或者移动应用程序的工具包,它还是一个framework,包装了许多编写应用程序中所必须的烦琐的工作。wxWidgets库中包含了数量众多的类和方法供程序员们使用。一个应用程序通常包含这些工作,显示窗口,使用标准控件,还可能绘制一些图形和图像,并响应来自鼠标、键盘或者其它来源的输入。换而言之,wxWidgets使得程序员们编写一个现代程序的工作简化了。虽然wxWidgets常被称为是一个图形用户界面开发工具包,它实际还包含了更多的应用程序开发中的内容。这是因为所有的wxWidgets程序都需要移植到各种不同的系统平台上,而不仅仅是GUI部分。wxWidgets提供了许多类,例如:文件和流、多线程、应用程序的设置,进程间通讯、在线帮助、数据库访问等等。
为什么使用wxWidgets?

与MFC、OWL等框架相比,wxWidgets是一个跨平台的框架。另一方面,wxWidgets在各种平台上提供了完全相同或者说几乎完全相同的API。这意味着你可以在Windows平台上编写程序,然后几乎不用修改就能在Linux或者Mac
OS
X平台上重新编译。这与针对每个平台单独编写一个程序版本相比有着巨大的好处。随着wxWidgets的更新,你的程序也可以移植到最新的系统中并支持新系统的特征。
与其它的跨平台框架相比,wxWidgets能使用各平台原生的控件,提供符合各平台风格的观感的用户界面,而不是象某些框架是自己模拟实现了一套控件以实现跨平台。wxWidgets在系统具有某控件时直接使用原生的控件,只有不存在时才使用自己的控件。

那为什么不使用Java呢?Java对基于web的应用程序工作得非常好,但对于桌面应用程序来说就不完全是最佳选择了。一般而言,基于C++和wxWidgets的程序运行更快,拥有与系统风格一致的界面,易于安装,因为它们不依赖于Java虚拟机。C++还允许访问系统得底层函数并易于与现有得C或C++代码融合。基于这些理由,现在真正完全用Java实现的桌面应用相当少。wxWidgets使你能够发布用户所期望的高效、原生的应用程序。

wxWidgets是一个开源项目。当然,这就意味着使用wxWidgets无须花费任何费用(除非你慷慨地给项目捐赠),但是这还是有重要的哲学和策略意义。开源软件都有一个习惯就是与对应的私有软件进行比较。作为一个使用wxWidgets的开发人员,你应该知道你所以来的代码绝不会消失。你可以自己修改代码来解决任何问题。加入到开源软件社区中会是一件比紧紧抓住软件企业的支持人员更有意思的事。开源项目的参与者都愿意呆在社区中,因为他们钟爱他们所做的事,无法停止共享知识,而企业里的支持人员常常不是如此由内心而发地做事。当你使用wxWidgets时,你进入了天才的群体中,开发人员具有各行各业的背景。许多在应用程序的开发中你必须自己手工编码的内容都已经由这些开发人员为你封装好了,你可以直接将它们加入到你的代码中。活跃的用户社区将通过邮件列表帮助你,在那里你不仅可以讨论wxWidgets的内容,也可以与那些经验丰富或者没有太多经验的开发人员一起讨论内心的问题。也许某天你也会加入成功的wxWidgets并成为一个开发贡献者。

wxWidgets具有广泛的工业支持,或者用一个流行的词,头脑共享。用户清单中包括了AOL,AMD,CALTECH,Lockheed
Martin,NASA,开源软件基金会,Xerox,以及许多其它公司。wxWidgets始终围绕着用户,从独立的开发者到大企业,从计算机系到医学研究小组,以及从生态学研究到通信工业。同时,它也在数量众多的开源项目中使用着,例如Audacity音频编辑器和pgAdmin
III数据库设计和管理系统等。

大家使用wxWidgets的目的各不相同,有简单地将它作为MFC的替代的,也有为了能将程序从Microsft
Windows移植到Unix和Mac OS
X的。wxWidgets目前正在向移动平台进军,包括嵌入式Linux,Microsoft
Pocket PC和Palm OS。

wxWidgets的简史

wxWidgets项目开始于1992年,当时Julian
Smart正在爱丁堡大学创建了一个名为Hardy的用于绘制框图的工具,他不想该工具只能在Sun工作站或者PC的其中一种上使用,因此决定使用跨平台的框架进行开发。但是当时存在的跨平台框架极其有限,除了自己写一套之外几乎别无选择。1992年9月,学校方面给了他在自己系里的服务器上上载wxWidgets
1.0的权限,然后其它的开发人员也开始使用这些代码了。开始的时候,wxWidgets只基于XView和MFC
1.0;Borland的用户开始抱怨系统对MFC的需求,于是wxWidgets又被重写为只使用纯Win32函数。由于XView与Motif的关系,所以很快就产生了基于Motif的版本。随着时间的推移,wxWidgets的用户社区开始建立,邮件列表也创建了。通过社区得到了许多贡献和修正,包括由Markus
Holzem提供的Xt的移植版本。wxWidgets逐渐拥有了来自全世界的越来越多的用户:个人、学术团体、政府机关等等,用户们也发现wxWidgets提供了比他们见过的或者使用过的许多商业产品更好的产品和服务。

1997年,在Markus Holzem的帮助下,一套新的wxWidgets 2
API被设计出来了。Wolfram
Gloger建议wxWidgets应该移植到GTK+上,这是一套在GNOME桌面环境中使用的正蒸蒸日上的组件。Robert
Roebling开始成为wxGTK的领头开发者,现在这已经成为Unix/Linux平台上的主流移植了。1998年,Windows版本和GTK+版本开始合并并用CVS进行控制管理。Vadim
Zeitlin加入了项目组并贡献了大量的设计的代码,Stefan
Csomor也在1998年开始了Mac OS的移植工作。

1999年,Vaclav
Slavik加入了非凡的wxHTML类和基于HTML的帮助浏览器。2000年,SciTech赞助了wxUniversal的初始开发,这是wxWidgets自己的一套组件,用于那些没有实现相应组件的平台。wxUniversal最初用在了SciTech的针对MGL的移植上,这是他们的一个低级图形层。

2002年,Julian Smart和Robert
Roebling用wxUniversal组件实现了wxX11的移植版本。因为只需要Unix和X11,wxX11几乎适用于任意Unix环境,还可以用在一些底层的系统中。

2003年7月,wxWidgets开始在Windows CE上运行,Robert
Roebling在GPE嵌入式Linux平台上演示了wxGTK的程序。

2004年,wxWidgets由于来自微软的关于Windows商标的干涉,从原来的名称wxWindows更改为现在的名称。

还是在2004年,Stefan
Csomor和许多其他贡献者们一起实现了针对OS
X的wxMac,极大地改进了OS X程序的外观和功能。由David
Elliot领导的基于Cocoa的移植版本也在逐步的提高中。William
Osborne也开始实现Palm OS
6的移植版本,实现了wxWidgets的minimal例子程序。2005年4月,版本2.6开始发行,该版本融合了所有移植版本的主要改进。

wxWidgets将来的计划包括:

包管理器,用于简化集成第三方组件
改进对嵌入式程序的支持
替代的事件处理机制
增强的控件,例如属性控件和列表控件的组合控件等
wxHTML 2,能够在所有平台实现网页兼容
与标准(例如STL)的进一步兼容
完整的Palm OS移植版本
wxWidgets社区

wxWidgets社区是一个vibrant
one,拥有两个邮件列表:wx-users(针对用户)和wx-dev(针对开发人员)。网站上有新闻、文章和发行版的链接,还有wxWidgets
Wiki,一组谁都可以添加信息的网页。当然还有为开发者和用户服务的论坛。相关的网站资源地址如下:

http://www.wxwidgets.org wxWidgets主页
http://lists.wxwidgets.org 邮件列表存档
http://wiki.wxwidgets.org wxWidgets Wiki
http://www.wxforum.org wxWidgets论坛
与大多数开源项目类似,wxWidgets使用CVS库管理开发,CVS是一个能够跟踪所有代码变化历史的源码管理系统。为了防止完全自由带来的混乱,只有一少部分开发人员拥有库的写权限,其他人可以通过提交错误报告和补丁(目前由SourceForge跟踪器管理)的方式贡献自己的工作。开发工作在两个主要分支上进行:稳定版本分支,那里只允许提交二进制兼容的错误修正;和开发分支(CVS
Head)。稳定版本通常是偶数版本号,例如2.4.x,开发版本则是奇数版本号,例如2.5.x。用户们可以等待新版本的发布或者直接通过匿名CVS下载所需分支的代码。

API的变化和其他技术问题的决定在wx-dev邮件列表中讨论决定。与wxWidgets社区一样,还有许多其他相关的社区,例如wxPython和wxPerl(见附录E,wxWidgets的第三方工具)。

Reply all
Reply to author
Forward
0 new messages