Linux 2009-05-25 14:02:36 閱讀392 評(píng)論0 字號(hào):大中小 訂閱
1 體系結(jié)構(gòu)
wxWidgets的體系結(jié)構(gòu)下圖所示。wxWidgets的體系結(jié)構(gòu)可以分為4層:wxWidgets公共API層,各個(gè)平臺(tái)Port,用于各個(gè)平臺(tái)的API以及操作系統(tǒng)。
2 Libraries 列表
從版本 2.5.0以后,wxWidgets既可以編譯成單一的一個(gè)大的ibrary(monolithic build),也可以編譯成幾個(gè)小的 libraries(multilib build)。WxWidgets默認(rèn)的是編譯成multilib build。
下圖列出了wxWidgets libraries以及他們之間的依賴關(guān)系。
1)wxAui
包含著高級(jí)用戶界面 docking library。
2) wxBase
所有wxWidgets程序都必須鏈接本 library。包含了許多數(shù)據(jù)結(jié)構(gòu)類以及其他公共基類(如wxString,wxWindowbase等)。抽象了平臺(tái)間的不同。wxBase 可以用來(lái)開發(fā)控制臺(tái)程序,不需要任何GUI libraries。
3) wxNet
網(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)。
4) wxRichText
通用 rich text 控件。
5) WxXML
包含解析XML文檔的類。不建議使用。將來(lái)的版本將包含新的XML處理類,包含類似DOM的API。
6) wxCore
基本GUI類,如 GDI類或控件。所有wxWidgets GUI 應(yīng)用程序必須引用本庫(kù)。
7) wxAdvanced
高級(jí)或是不常用的GUI類。
wxBufferedDC
wxCalendarCtrl
wxGrid classes
wxJoystick
wxLayoutAlgorithm
wxSplashScreen
wxTaskBarIcon
wxSound
wxWizard
wxSashLayoutWindow
wxSashWindow
8) wxMedia
多媒體類。目前僅包括wxMediaCtrl ,將來(lái)將加入更多的類。
9) wxGL
包含wxGLCanvas 集成OpenGL library。與其他類不同的是,本library不是 monolithic library的一部分,而是總是編譯成一個(gè)獨(dú)立的library。
10) wxHTML
HTML renderer及其相關(guān)類。
11 )wxODBC
數(shù)據(jù)庫(kù)類。
12 )wxQA
質(zhì)量保證類庫(kù)。目前僅有 wxDebugReport 以及相關(guān)類。
13 )wxDbGrid
wxDbGridTableBase 類組合了 wxGrid and wxDbTable。
14 )wxXRC
包含wxXmlResource類,讀取XRC 格式的XML資源文件。
3 內(nèi)部代碼組織結(jié)構(gòu)
如圖,是wxWidgets源代碼組織結(jié)構(gòu),大體可以分為六層:
1 )通用代碼部分(位于common目錄內(nèi))。被所有的版本使用,包括數(shù)據(jù)結(jié)構(gòu),運(yùn)行期類型信息,一些被其他類繼承的基類,如wxWindowBase等。
2) 一般代碼部分(位于generic目錄內(nèi))。實(shí)現(xiàn)與平臺(tái)無(wú)關(guān)的高級(jí) widgets。如 wxWizard 和wxCalendarCtrl等。
3) wxUniversal部分(位于univ目錄內(nèi))?;敬翱诳丶?,可以用于不提供本地窗口控件的平臺(tái)如X11和MGL使用。
4 )平臺(tái)相關(guān)代碼(位于gtk、msw等目錄內(nèi))。使用本地API實(shí)現(xiàn)類。
5 )外來(lái)代碼部分,放在一個(gè)單獨(dú)的目錄結(jié)構(gòu)中(contrib目錄,本圖沒(méi)有列出,位于上一級(jí)目錄)。
6)第三方代碼(位于jpeg,png,regex,zlib等目錄中),這些都是獨(dú)立于wxWidgets的項(xiàng)目,但是wxWidgets使用來(lái)實(shí)現(xiàn)許多重要的功能。
wxWidgets libraries 和內(nèi)部代碼組織具有交叉關(guān)系。如wxNet庫(kù)里既包含通用代碼又包括平臺(tái)相關(guān)代碼部分,其他的庫(kù)又可能包括一般代碼部分。
4 類繼承關(guān)系
如圖,列舉了wxBase和wxCore中部分類的繼承關(guān)系。
其中wxObject是其他絕大部分類的基礎(chǔ),是萬(wàn)類之首。凡派生于wxObject的類,得以繼承數(shù)個(gè)面向?qū)ο蟮闹匾匦裕?span style="FONT-FAMILY: Tahoma, serif">RTTI(執(zhí)行期類型識(shí)別),Dynamic Creation(動(dòng)態(tài)生成)等。
其中wxWindowGTK和wxTopLevelWindowGTK是于平臺(tái)有關(guān)的類,源碼位于gtk目錄下。Window下對(duì)應(yīng)的類是wxWindowMSW和wxTopLevelWindowMSW,位于msw目錄下。當(dāng)編譯代碼時(shí),wxWidgets怎么知道編譯哪一個(gè)類呢?主要是wxWidgets通過(guò)不同的宏定義來(lái)實(shí)現(xiàn)的:
在app.h中,你可以發(fā)現(xiàn)以下代碼:
類似的在window.h中,你可以發(fā)現(xiàn):
通過(guò)指定不同的編譯開關(guān),可以編譯出平臺(tái)相關(guān)的類庫(kù)。
參考文獻(xià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
聯(lián)系客服