简要说明:
为了毕业设计需要构建跨平台应用,近来一直在研究wxWidgets,觉得是很不错的图形包,所以开始着手对它进行研究,现把我最近的相关翻译文章陆续放到本专题中,由于本人翻译水平有限,有些地方欠妥,请有同好的朋友不吝指教!谢!
本篇作品英文原站:http://www.bzzt.net/~wxwidgets/icpp_wx1.html
学习对象:初中级学者
介绍
什么是wxWindows?
wxWindows给你一个简单,易用的API在多种平台上写GUI应用程序。为你的平台(Windows/Unix/Mac)连接适当的库然后编译(几乎所有流行的C++编译器),并且你的应用程序将采取相应平台的视觉外观。另外,对于大部分GUI功能性,wxWindows给你:在线帮助,网络编程,流,剪切板和拖放,多线程,多种格式的图片加载与保存,数据库访问,HTML视图与打印,还有很多很多。
wxWindows是一个很高品质工作接口,的确,有人使用术语“商业性质”来描述wxWindows,意味着为它而付出,值得!这当然不错,但如果有一评论对于wxWindows的构造,即,对于初学者,可能难以应付:开始的学习阶段有一点复杂。对于这一评论,乐观的反映表明:一旦编程人员领会wxWindows的架构,如它的类,函数和方法,写有用的应用程序是一件值得并相对来说是简单的过程。在财务开支上也值得,wxWindows是如此的一个富框架以致于几乎任何的应用领域都派得上用场。
你在阅读的同时,可能已猜到,我是一个忠实的wxWindows支持者。没错,我愿意把我对wxWindows所有热情同你交流,通过网络,网页。
我的计划是开始于一些非常基础,通过一系列的例子程序,解释wxWindows的架构,介绍wxWindows中的类库。当你完成这些,你应该已经对wxWindows有一个很好的领会。
开始之前,我有一些要强调的注意事项:
1) 我没有把我自己当成是一位特别优秀的程序员,也不是wxWindows特别的精通者,但我有一个好的表达方式,我确信我能够把复杂的主题解释清楚。
2) 你需要理解C和C++但没必要很详尽。你在C和C++上的能力随着你学习wxWindows会有所扩展。如果你已学过本网站上大部分C++资料,并且能够理解它,我认为你没问题了。
3) 你需要理解面向对象编程和类。同样,本网站大部分材料对你都很有帮助。
4) 开始的工作是在Windows平台上进行的,Win95.Win98和Win2K都可以用。随wxWindows的MinGW包提供了开发环境。
如果你在C++编程上是一位初学者,这些包对你会很有用,但你想使用wxWidgets快速进入开发GUI程序的真实世界。进一步努力吧!
wxWidgets架构和第一个程序
这是切入点,刚开始时,我让所有事情简单点。
对于wxWidgets框架的第一印象是保持那种最简单的观念。随着我们开发的深入,我们对于这个框架的认识会变得更详细。
一个wxWidgets GUI程序的组成:
1) 一个应用程序(application)对象--一个wxApp 类的实例
2) 一个框架(frame)对象—一个wxFrame类的实例。框架包含象菜单条(menubar),状态条(statusbar),图标(icon)等等。
3) 框架(frame)可能包含很多其它的对象像文本控件(text controls),按钮组(buttons),分隔条(splitters)等等。
我所拥有的最简单的程序仅仅是一个空的框架,在我们看来,这只是第一个基本的例子。对于想了解可能的用途是什么,这是合理的。如果没有其它的东西,并且展示了我们为什么第一次这样看它,是不是觉得很受益呢!你将看到它展示了常见的视窗应用所有行为。它有一个系统标标题,能够到处移动,可以改变大小并且可以被关闭。
我知道它看起来不太好但它是我们的!它还给我们展示了程序穿上了本地GUI的衣着。上面的图是在Windows98下的,不过别忘了wxWidgets是一个跨平台的框架,能够用来开发其它平台像Linux,OS2,Mac等等平台的应用程序。
第一个例子的源代码如下:
2 #define BASIC_H //1) BasicApplication 继承自wxApp
3 class BasicApplication : public wxApp //2) BasicFrame 继承自 wxFrame
4 {
5 public:
6 virtual bool OnInit();
7 };
8 class BasicFrame : public wxFrame
9 {
10 public:
11 BasicFrame( const wxChar *title,
12 int xpos, int ypos,
13 int width, int height);
14 ~BasicFrame();
15 };
16 #endif
17
//*****************************************************************************
//*我们为BasicFrame声明了一个构造函数和析构函数但我们为BasicAppliation做的唯一一件事是重载
//*OnInit()方法 注意:我们正在重载我们所声明的方法是虚函数。
//****************************************************************************
//这是实现代码,类定义在上面的basic.h中。首先要注意的是宏:IMPLEMENT_APP(BasicApplication),
//这个,从我们的观点上看,是构造一个BasicApplication对象并为我们的应用程序提供main切入点。它
//事实上取代前面我们在int WINAPI WinMain(...)函数中所做的所有的工作。
//OnInit()方法创建一个BasicFrame的实例,具有默认的参数x,y,width,height和一个标题。
//然后调用Show()方法显示框架。如果你看看wxFrame类,你不会发现Show()方法,wxFrame继承自
//wxWindows,Show()方法是wxWindows的一个成员函数。作为初学者,你必须对此牵记在心---因为
//很多这样的类继承自其它类不能不注意到在父类中用到的方法。
//OnInit()同进还调用SetTopWindow() 这个wxApp中的一个成员。
//构造函数和析构函数没有在我们的BasicFrame类中添加任何的新的行为。
//最后一个相关的文件是资源文件。在这个简单的例子中,我们没有添加任何我们自己的资源,但你
//应该总在最后添加一行,其中包含要用的资源文件:
//#include "wx/msw/wx.rc"
//在以后的例子中,我们添加进我们自己的资源。
//****************************************************************************
1 #include <wx/wx.h>
2 #include "basic.h"
3 IMPLEMENT_APP(BasicApplication)
4 bool BasicApplication::OnInit()
5 {
6 BasicFrame
7 *frame = new BasicFrame("Basic", 50, 50, 450, 300);
8 frame->Show(TRUE);
9 SetTopWindow(frame);
10 return TRUE;
11 }
12 BasicFrame::BasicFrame
13 (const wxChar *title,
14 int xpos, int ypos,
15 int width, int height)
16 : wxFrame
17 ( (wxFrame *) NULL,
18 -1,
19 title,
20 wxPoint(xpos, ypos),
21 wxSize(width, height)
22 )
23 {
24 }
25 BasicFrame::~BasicFrame()
26 {
27 }
28
29 #include "wx/msw/wx.rc"