用wxWindows编程 -----第一步!(系列1)


简要说明:

       为了毕业设计需要构建跨平台应用,近来一直在研究wxWidgets,觉得是很不错的图形包,所以开始着手对它进行研究,现把我最近的相关翻译文章陆续放到本专题中,由于本人翻译水平有限,有些地方欠妥,请有同好的朋友不吝指教!谢!
       本篇作品英文原站:http://www.bzzt.net/~wxwidgets/icpp_wx1.html
       学习对象:初中级学者

介绍

  我们现在着眼于另一个更友好的方式来构建窗口程序,我们使用一个类库集叫做wxWindows。严格来说,wxWindows绝不仅仅是类库,它是一个应用程序框架,这意味它在开发完整应用程序时提供一个使用类的构架。使用wxWindows的好处不停留在此,它还是一个跨平台的库。用wxWindows作者的话来讲:

什么是wxWindows

wxWindows给你一个简单,易用的API在多种平台上写GUI应用程序。为你的平台(Windows/Unix/Mac)连接适当的库然后编译(几乎所有流行的C++编译器),并且你的应用程序将采取相应平台的视觉外观。另外,对于大部分GUI功能性,wxWindows给你:在线帮助,网络编程,流,剪切板和拖放,多线程,多种格式的图片加载与保存,数据库访问,HTML视图与打印,还有很多很多。

wxWindows是一个很高品质工作接口,的确,有人使用术语“商业性质”来描述wxWindows,意味着为它而付出,值得!这当然不错,但如果有一评论对于wxWindows的构造,即,对于初学者,可能难以应付:开始的学习阶段有一点复杂。对于这一评论,乐观的反映表明:一旦编程人员领会wxWindows的架构,如它的类,函数和方法,写有用的应用程序是一件值得并相对来说是简单的过程。在财务开支上也值得,wxWindows是如此的一个富框架以致于几乎任何的应用领域都派得上用场。

 

你在阅读的同时,可能已猜到,我是一个忠实的wxWindows支持者。没错,我愿意把我对wxWindows所有热情同你交流,通过网络,网页。

我的计划是开始于一些非常基础,通过一系列的例子程序,解释wxWindows的架构,介绍wxWindows中的类库。当你完成这些,你应该已经对wxWindows有一个很好的领会。

开始之前,我有一些要强调的注意事项:

1)        我没有把我自己当成是一位特别优秀的程序员,也不是wxWindows特别的精通者,但我有一个好的表达方式,我确信我能够把复杂的主题解释清楚。

2)        你需要理解CC++但没必要很详尽。你在CC++上的能力随着你学习wxWindows会有所扩展。如果你已学过本网站上大部分C++资料,并且能够理解它,我认为你没问题了。

3)        你需要理解面向对象编程和类。同样,本网站大部分材料对你都很有帮助。

4)        开始的工作是在Windows平台上进行的,Win95.Win98Win2K都可以用。随wxWindowsMinGW包提供了开发环境。

如果你在C++编程上是一位初学者,这些包对你会很有用,但你想使用wxWidgets快速进入开发GUI程序的真实世界。进一步努力吧!

wxWidgets架构和第一个程序

这是切入点,刚开始时,我让所有事情简单点。

对于wxWidgets框架的第一印象是保持那种最简单的观念。随着我们开发的深入,我们对于这个框架的认识会变得更详细。


一个wxWidgets GUI程序的组成:

用wxWindows编程 -----第一步!(系列1)_第1张图片

1)        一个应用程序(application)对象--一个wxApp 类的实例

2)        一个框架(frame)对象一个wxFrame类的实例。框架包含象菜单条(menubar),状态条(statusbar),图标(icon)等等。

3)        框架(frame)可能包含很多其它的对象像文本控件(text controls),按钮组(buttons),分隔条(splitters)等等。

我所拥有的最简单的程序仅仅是一个空的框架,在我们看来,这只是第一个基本的例子。对于想了解可能的用途是什么,这是合理的。如果没有其它的东西,并且展示了我们为什么第一次这样看它,是不是觉得很受益呢!你将看到它展示了常见的视窗应用所有行为。它有一个系统标标题,能够到处移动,可以改变大小并且可以被关闭。

用wxWindows编程 -----第一步!(系列1)_第2张图片



我知道它看起来不太好但它是我们的!它还给我们展示了程序穿上了本地GUI的衣着。上面的图是在Windows98下的,不过别忘了wxWidgets是一个跨平台的框架,能够用来开发其它平台像Linux,OS2,Mac等等平台的应用程序。

第一个例子的源代码如下:

 1  #ifndef BASIC_H                                                //这是头文件。在这个基本框架中,我们声明了两个类:
 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"

你可能感兴趣的:(用wxWindows编程 -----第一步!(系列1))