• 用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程序的组成:


    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"5050450300);
     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"

  • 相关阅读:
    复制带中文的公式贴到通达信公式中显示乱码解决方案
    命令指定线程个数
    随机姓名
    将二维list某列组成新的list
    jenkins配置小结
    jmeter5.0 while controller使用总结
    centos7 桌面化配置
    django study1 数据库
    centos7 安装firefox
    python之self
  • 原文地址:https://www.cnblogs.com/BoyeeStudio/p/303786.html
Copyright © 2020-2023  润新知