wxWidgets的体系结构

 

1 体系结构

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

wxWidgets的体系结构_第1张图片

2 Libraries 列表

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

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

wxWidgets的体系结构_第2张图片

     1wxAui

     包含着高级用户界面 docking library

     2 wxBase

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

     3 wxNet

     网络开发有关类:

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

wxSocketOutputStream wxSocketInputStream

sockets-based IPC (wxTCPServer, wxTCPClient and wxTCPConnection)

wxURL

wxInternetFSHandler (a wxFileSystem handler)

     4 wxRichText

     通用 rich text 控件。

     5 WxXML

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

     6 wxCore

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

     7 wxAdvanced

     高级或是不常用的GUI类。

wxBufferedDC

wxCalendarCtrl

wxGrid classes

wxJoystick

wxLayoutAlgorithm

wxSplashScreen

wxTaskBarIcon

wxSound

wxWizard

wxSashLayoutWindow

wxSashWindow

     8 wxMedia

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

     9 wxGL

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

     10 wxHTML

     HTML renderer及其相关类。

     11 wxODBC

     数据库类。

     12 wxQA

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

     13 wxDbGrid

     wxDbGridTableBase 类组合了 wxGrid and wxDbTable

     14 wxXRC

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

3 内部代码组织结构

wxWidgets的体系结构_第3张图片

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

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

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

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

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

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

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

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

4 类继承关系

wxWidgets的体系结构_第4张图片

    如图,列举了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

你可能感兴趣的:(数据结构,api,Build,library,平台,gtk)