打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
wxWidgets体系结构

wxWidgets体系结构

Linux 2009-05-25 14:02:36 阅读392 评论0   字号: 订阅

1 体系结构

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

 

2 Libraries 列表

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

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

 

     1wxAui

     包含着高级用户界面 docking library

     2wxBase

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

     3wxNet

     网络开发有关类:

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

wxSocketOutputStream wxSocketInputStream

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及其相关类。

     11 wxODBC

     数据库类。

     12 wxQA

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

     13 wxDbGrid

     wxDbGridTableBase 类组合了 wxGrid and wxDbTable

     14 wxXRC

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

 

3 内部代码组织结构

 

 

 

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

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

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

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

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

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

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

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

 

 

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
codelite + MinGW + wxWidgets 配置问题
wxPython:python 首选的 GUI 库
小程序 条件渲染
[wxWidgets]
3个APP,让手机摄影更强大
aMule源码安装配置详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服