• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
King.c.Tan's Column

-------I'm a bat,a bat with my sense

flying in the dark!

博客园    首页    新随笔    联系   管理    订阅  订阅
用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)        你需要理解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等等平台的应用程序。

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

 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"

posted on 2005-12-24 11:13  BoyeeStudio  阅读(7593)  评论(5)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3