小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

wxWidgets體系結(jié)構(gòu)

 orion360doc 2011-01-16

wxWidgets體系結(jié)構(gòu)

Linux 2009-05-25 14:02:36 閱讀392 評論0   字號: 訂閱

1 體系結(jié)構(gòu)

     wxWidgets的體系結(jié)構(gòu)下圖所示。wxWidgets的體系結(jié)構(gòu)可以分為4層:wxWidgets公共API層,各個平臺Port,用于各個平臺的API以及操作系統(tǒng)。

  wxWidgets體系結(jié)構(gòu) - 雪舞九天 -   雪舞九天

2 Libraries 列表

     從版本 2.5.0以后,wxWidgets既可以編譯成單一的一個大的ibrarymonolithic build),也可以編譯成幾個小的 librariesmultilib build)。WxWidgets默認的是編譯成multilib build。

     下圖列出了wxWidgets libraries以及他們之間的依賴關(guān)系。

  wxWidgets體系結(jié)構(gòu) - 雪舞九天 -   雪舞九天

     1wxAui

     包含著高級用戶界面 docking library

     2wxBase

     所有wxWidgets程序都必須鏈接本 library。包含了許多數(shù)據(jù)結(jié)構(gòu)類以及其他公共基類(如wxStringwxWindowbase等)。抽象了平臺間的不同。wxBase 可以用來開發(fā)控制臺程序,不需要任何GUI libraries。

     3wxNet

     網(wǎng)絡(luò)開發(fā)有關(guān)類:

wxSocket (wxSocketClient, wxSocketServer 以及其他相關(guān)類)

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 應(yīng)用程序必須引用本庫。

     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及其相關(guān)類。

     11 wxODBC

     數(shù)據(jù)庫類。

     12 wxQA

     質(zhì)量保證類庫。目前僅有 wxDebugReport 以及相關(guān)類。

     13 wxDbGrid

     wxDbGridTableBase 類組合了 wxGrid and wxDbTable。

     14 wxXRC

     包含wxXmlResource類,讀取XRC 格式的XML資源文件。

 

3 內(nèi)部代碼組織結(jié)構(gòu)

  wxWidgets體系結(jié)構(gòu) - 雪舞九天 -   雪舞九天

 

 

    如圖,是wxWidgets源代碼組織結(jié)構(gòu),大體可以分為六層:

     1 )通用代碼部分(位于common目錄內(nèi))。被所有的版本使用,包括數(shù)據(jù)結(jié)構(gòu),運行期類型信息,一些被其他類繼承的基類,如wxWindowBase等。

     2) 一般代碼部分(位于generic目錄內(nèi))。實現(xiàn)與平臺無關(guān)的高級 widgets。如 wxWizard wxCalendarCtrl等。

     3wxUniversal部分(位于univ目錄內(nèi))。基本窗口控件類,可以用于不提供本地窗口控件的平臺如X11MGL使用。

     4 )平臺相關(guān)代碼(位于gtk、msw等目錄內(nèi))。使用本地API實現(xiàn)類。

     5 )外來代碼部分,放在一個單獨的目錄結(jié)構(gòu)中(contrib目錄,本圖沒有列出,位于上一級目錄)。

     6)第三方代碼(位于jpegpng,regex,zlib等目錄中),這些都是獨立于wxWidgets的項目,但是wxWidgets使用來實現(xiàn)許多重要的功能。

     wxWidgets libraries 和內(nèi)部代碼組織具有交叉關(guān)系。如wxNet庫里既包含通用代碼又包括平臺相關(guān)代碼部分,其他的庫又可能包括一般代碼部分。

 

 

4 類繼承關(guān)系

 

 wxWidgets體系結(jié)構(gòu) - 雪舞九天 -   雪舞九天

    如圖,列舉了wxBasewxCore中部分類的繼承關(guān)系。

     其中wxObject是其他絕大部分類的基礎(chǔ),是萬類之首。凡派生于wxObject的類,得以繼承數(shù)個面向?qū)ο蟮闹匾匦?,包?span style="FONT-FAMILY: Tahoma, serif">RTTI(執(zhí)行期類型識別),Dynamic Creation(動態(tài)生成)等。

     其中wxWindowGTKwxTopLevelWindowGTK是于平臺有關(guān)的類,源碼位于gtk目錄下。Window下對應(yīng)的類是wxWindowMSWwxTopLevelWindowMSW,位于msw目錄下。當(dāng)編譯代碼時,wxWidgets怎么知道編譯哪一個類呢?主要是wxWidgets通過不同的宏定義來實現(xiàn)的:

     在app.h中,你可以發(fā)現(xiàn)以下代碼:

  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中,你可以發(fā)現(xiàn):

  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. ......

 

     通過指定不同的編譯開關(guān),可以編譯出平臺相關(guān)的類庫。

 

參考文獻

 

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多