wxWidgets体系结构 wxwidgets

1 体系结构

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

2Libraries 列表

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

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

1)wxAui

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

2) wxBase

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

3) wxNet

网络开发有关类:

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

wxSocketOutputStream 和 wxSocketInputStream

sockets-basedIPC 类 (wxTCPServer, wxTCPClientand 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

wxGridclasses

wxJoystick

wxLayoutAlgorithm

wxSplashScreen

wxTaskBarIcon

wxSound

wxWizard

wxSashLayoutWindow

wxSashWindow

8) wxMedia

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

9) wxGL

包含wxGLCanvas 集成OpenGL library。与其他类不同的是,本library不是 monolithiclibrary的一部分,而是总是编译成一个独立的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. wxWidgets体系结构 wxwidgets
  21. #include "wx/cocoa/app.h"

  22. #elif defined(__WXPM__)

  23. #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 withwxWidgets》,Julian Smart and KevinHock with Stefan Csomor.

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

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

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/199200.html

更多阅读

oracle数据库基础使用方法 精 oracle数据库基础教程

oracle数据库基础使用方法 精——简介ORACLE 数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。比如SilverStream就是基于数据库的

51单片机的中断体系结构 单片机51中断程序

80C51的中断系统有5个中断源(8052有 6个),2个优先级,可实现二级中断嵌套 。MCS-51系列单片机中断系统的机构如下:与中断系统相关的特殊寄存器:1)中断允许控制寄存器(IE)------控制各中断的开放和屏蔽2)中断优先级控制寄存器(IP)------设置各中断

四大CPU体系结构:ARM、X86/Atom、MIPS、PowerPC

摘自:http://blog.csdn.net/happytengfei/article/details/8678261处理器补充介绍一下RISC:RISC(reduced instruction set computer,精简指令集计算机)是一种执行较少类型计算机指令的微处理器,起源于80年代的MIPS主机(即RISC机),RISC机中采

SOA 面向服务的体系结构 soa体系结构

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统

校园网的体系结构、特点、拓扑图 校园网网络拓扑图

一、体系结构网络系统的体系结构包括功能的分层及各层功能通信所遵守的协议。网络系统的体系结构也称为“层次与协议的集合”。网络系统设计的第一步就是选择网络体系结构,核心内容是决策应当采用的协议集合。选择目前应用范围最为广

声明:《wxWidgets体系结构 wxwidgets》为网友单身贵族分享!如侵犯到您的合法权益请联系我们删除