很久以前研究第一款開源引擎irrlicht,至于irrlicht介紹網上英文資料很多,這裡就不一一說明了,先來看看irrlicht的GUI系統類圖,這樣感覺比較簡潔知道控件之間的關系.開發東西多了容易忘記,是以最近把很久以前東西寫下來算是做個備忘錄吧!開發東西多了,記性變差了.剛開始的研究的時候都是在http://irrlicht.sourceforge.net/forum/上面研究學習的,國内這款引擎的中文資料很少,不像ORGE圖形引擎那樣到處都有中文資料,畢竟有幾款商業遊戲是使用ORGE,irrlicht國内成功的商業案例很少,基本上都是用于研究.
首先說一下IGUIElement這個接口,它不是抽象接口,但在GUI系統中所有的子控件接口都要繼承它,它是所有控件的基類.它本身繼承IEventReceiver和IAttributeExchangingObject抽象接口,IEventReceiver這個抽象接口主要作用是GUI事件監聽接口,IAttributeExchangingObject主要是序列化與反序列化的抽象接口,IAttributeExchangingObject本身繼承了IReferenceCounted.
可以看看下面的類圖.

CGUIEnvironment這個類很重要,一般GUI系統裡面隻有一份執行個體,在随着繪制裝置建立的時候一起建立,CGUIEnvironment的執行個體會在每一桢繪制的時候調用draw繪制目前根節點的,目前根節點會調用它的子控件的draw函數,這一過程就是控件的繪制過程,子控件實作從IGUIElement繼承的虛拟函數draw,并在裡面繪制自己