wxWidgets体系结构

来源:互联网 发布:go 并发编程 编辑:程序博客网 时间:2024/04/28 02:36

1 体系结构

     wxWidgets的体系结构下图所示。wxWidgets的体系结构可以分为4层:wxWidgets公共API层,各个平台Port,用于各个平台的API以及操作系统。

wxWidgets体系结构

2 Libraries 列表

     从版本 2.5.0以后,wxWidgets既可以编译成单一的一个大的ibrarymonolithic build),也可以编译成几个小的librariesmultilib build)。WxWidgets默认的是编译成multilib build

     下图列出了wxWidgets libraries以及他们之间的依赖关系。

wxWidgets体系结构

     1wxAui

     包含着高级用户界面 docking library

     2wxBase

     所有wxWidgets程序都必须链接本library。包含了许多数据结构类以及其他公共基类(如wxStringwxWindowbase等)。抽象了平台间的不同。wxBase 可以用来开发控制台程序,不需要任何GUI libraries

     3wxNet

     网络开发有关类:

wxSocket(wxSocketClient, wxSocketServer 以及其他相关类)

wxSocketOutputStreamwxSocketInputStream

sockets-based IPC(wxTCPServer, wxTCPClient and wxTCPConnection)

wxURL

wxInternetFSHandler (a wxFileSystem handler)

     4wxRichText

     通用 rich text 控件。

     5WxXML

     包含解析XML文档的类。不建议使用。将来的版本将包含新的XML处理类,包含类似DOMAPI

     6wxCore

     基本GUI类,如GDI类或控件。所有wxWidgets GUI 应用程序必须引用本库。

     7wxAdvanced

     高级或是不常用的GUI类。

wxBufferedDC

wxCalendarCtrl

wxGrid classes

wxJoystick

wxLayoutAlgorithm

wxSplashScreen

wxTaskBarIcon

wxSound

wxWizard

wxSashLayoutWindow

wxSashWindow

     8wxMedia

     多媒体类。目前仅包括wxMediaCtrl ,将来将加入更多的类。

     9wxGL

     包含wxGLCanvas 集成OpenGL library。与其他类不同的是,本library不是monolithic library的一部分,而是总是编译成一个独立的library

     10wxHTML

     HTML renderer及其相关类。

     11wxODBC

     数据库类。

     12wxQA

     质量保证类库。目前仅有 wxDebugReport 以及相关类。

     13wxDbGrid

     wxDbGridTableBase 类组合了 wxGrid and wxDbTable

     14wxXRC

     包含wxXmlResource类,读取XRC 格式的XML资源文件。

 

3 内部代码组织结构

wxWidgets体系结构

 

 

 

    如图,是wxWidgets源代码组织结构,大体可以分为六层:

     1 )通用代码部分(位于common目录内)。被所有的版本使用,包括数据结构,运行期类型信息,一些被其他类继承的基类,如wxWindowBase等。

     2) 一般代码部分(位于generic目录内)。实现与平台无关的高级widgets。如 wxWizardwxCalendarCtrl等。

     3wxUniversal部分(位于univ目录内)。基本窗口控件类,可以用于不提供本地窗口控件的平台如X11MGL使用。

     4 )平台相关代码(位于gtkmsw等目录内)。使用本地API实现类。

     5 )外来代码部分,放在一个单独的目录结构中(contrib目录,本图没有列出,位于上一级目录)。

     6)第三方代码(位于jpegpngregexzlib等目录中),这些都是独立于wxWidgets的项目,但是wxWidgets使用来实现许多重要的功能。

     wxWidgets libraries 和内部代码组织具有交叉关系。如wxNet库里既包含通用代码又包括平台相关代码部分,其他的库又可能包括一般代码部分。

4 类继承关系

wxWidgets体系结构

    如图,列举了wxBasewxCore中部分类的继承关系。

     其中wxObject是其他绝大部分类的基础,是万类之首。凡派生于wxObject的类,得以继承数个面向对象的重要特性,包括RTTI(执行期类型识别),Dynamic Creation(动态生成)等。

     其中wxWindowGTKwxTopLevelWindowGTK是于平台有关的类,源码位于gtk目录下。Window下对应的类是wxWindowMSWwxTopLevelWindowMSW,位于msw目录下。当编译代码时,wxWidgets怎么知道编译哪一个类呢?主要是wxWidgets通过不同的宏定义来实现的:

    app.h中,你可以发现以下代码:

  1. #if defined(__WXPALMOS__)

  2. #include "wx/palmos/app.h"

  3. #elif defined(__WXMSW__)

  4. #include "wx/msw/app.h"

  5. #elif defined(__WXMOTIF__)

  6. #include "wx/motif/app.h"

  7. #elif defined(__WXMGL__)

  8. #include "wx/mgl/app.h"

  9. #elif defined(__WXDFB__)

  10. #include "wx/dfb/app.h"

  11. #elif defined(__WXGTK20__)

  12. #include "wx/gtk/app.h"

  13. #elif defined(__WXGTK__)

  14. #include "wx/gtk1/app.h"

  15. #elif defined(__WXX11__)

  16. #include "wx/x11/app.h"

  17. #elif defined(__WXMAC__)

  18. #include "wx/mac/app.h"

  19. #elif defined(__WXCOCOA__)

  20. #include "wx/cocoa/app.h"

  21. #elif defined(__WXPM__)

  22. #include "wx/os2/app.h"

     类似的在window.h中,你可以发现:

  1. #if defined(__WXMSW__)

  2. #define wxWindowNative wxWindowMSW

  3. #elif defined(__WXGTK__)

  4. #define wxWindowNative wxWindowGTK

  5. #elif defined(__WXMGL__)

  6. #define wxWindowNative wxWindowMGL

  7. #elif defined(__WXX11__)

  8. #define wxWindowNative wxWindowX11

  9. #elif defined(__WXMAC__)

  10. #define wxWindowNative wxWindowMac

  11. #endif

  12. class WXDLLEXPORT wxWindow : public wxWindowNative


  13. ......


     通过指定不同的编译开关,可以编译出平台相关的类库。

参考文献

Cross-Platform GUI Programming with wxWidgets》,Julian Smart and Kevin Hock with Stefan Csomor.

wxWidgets 2.8.9: A portable C++ and Python GUI toolkit》,Julian Smart, Robert Roebling, Vadim Zeitlin, Robin Dunn, et al

转载自:http://hi.baidu.com/zshua_404/blog/item/a10155393d4c3623b8998feb.html

0 0
原创粉丝点击