1 体系结构

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

2 Libraries 列表

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

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

1)wxAui

包含着高级用户界面 docking library。

2) wxBase

所有wxWidgets程序都必须链接本 library。包含了许多数据结构类以及其他公共基类(如wxString,wxWindowbase等)。抽象了平台间的不同。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处理类,包含类似DOM的API。

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源代码组织结构,大体可以分为六层:

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

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

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

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

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

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

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

4 类继承关系

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

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

其中wxWindowGTK和wxTopLevelWindowGTK是于平台有关的类,源码位于gtk目录下。Window下对应的类是wxWindowMSW和wxTopLevelWindowMSW,位于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

wxWidgets的体系结构相关推荐

  1. wxWidgets学习笔记(2)wxWidgets体系结构

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

  2. wxWidgets体系结构

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

  3. wxWidgets:wxTextInputStream类用法

    wxWidgets:wxTextInputStream类用法 wxWidgets:wxTextInputStream类用法 用法详细说明 wxWidgets:wxTextInputStream类用法 ...

  4. wxWidgets:wxDataInputStream类用法

    wxWidgets:wxDataInputStream类用法 wxWidgets:wxDataInputStream类用法 用法详细说明 wxWidgets:wxDataInputStream类用法 ...

  5. wxWidgets介绍 —— 一文全面了解wxWidgets

    概述 wxWidgets由爱丁堡大学的Julian Smart于1992年创立.最初是一个用于创建在Unix和Windows上可移植的应用程序的项目,后来它已成长为支持MacOS,GTK+以及许多其他 ...

  6. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...

  7. 基于ARMv8的固件系统体系结构

    基于ARMv8的固件系统体系结构 The architecture of ARMv8-based firmware systems 自2011年发布以来,ARMv8处理器架构在移动设备市场上已经相当普 ...

  8. 人工智能微控制器体系结构

    人工智能微控制器体系结构 Microcontroller architectures evolve for AI 如果把人工智能和物联网交叉,会得到什么?AIoT是一个简单的答案,但是也可以为微控制器 ...

  9. AI芯片体系结构目标图形处理

    AI芯片体系结构目标图形处理 AI chip architecture targets graph processing 可编程图形流处理器(GSP)能够执行"直接图形处理.片上任务图管理和 ...

最新文章

  1. delphi listview 获取行高_《我的侠客》布料怎么获得 布料获取方法
  2. API(Application Programming Interface,应用程序编程接口)
  3. 使用Cloud SQL的Google App Engine全文搜索
  4. 教学楼电梯调度需求分析
  5. 20200505:力扣151周周赛上
  6. 人工智能——框架表示法
  7. JavaScript警告框中的新行
  8. JavaScript:综合案例---房贷计算器的实现
  9. C++11 std::function类模板
  10. apache php 关闭版本号显示,不显示版本号
  11. 【Linux学习010】算数运算、文件测试、字符测试、位置变量和特殊变量
  12. JavaScript 上万条数据 导出Excel文件 页面卡死
  13. Java众神之路(2)-标志符
  14. WAP(wml)开发教程10--WAP网站服务器配置
  15. 纯电动汽车两档ATM变速箱simulink模型,模型实现了两档AMT换挡策略和换挡过程仿真
  16. win10账号被锁定如何解决
  17. java内存垃圾_Java内存区域与垃圾回收
  18. IOS 中视频和音乐合成
  19. RT-Thread 软件定时器(学习笔记)
  20. 【2019-游记】中山纪念中学暑期游Day3

热门文章

  1. 鸿蒙应用权限管理和访问控制
  2. readdir不保证读取的文件顺序
  3. persistence-api依赖的作用
  4. php猴子摘桃如何运行,小猴子摘桃子
  5. React尚硅谷张天禹笔记(更新中......)
  6. 用android中的Preferencescreen 启动一个新的 activity
  7. 记一次ubuntu系统崩溃的修复
  8. MySql添加用户以及授予权限
  9. Eclipse多国语言包安装及切换
  10. 面向接口编程和面向对象编程的区别