gui系統 布局管理器
1.布局管理器存在的理由:可以避免手動或者逐個調整控制項位置
2.布局管理器的基本功能:調整同一容器下同一層次下各個控制項的位置
3.布局管理器的基本介面:
a.控制項加入
b.控制項移除
c.控制項排列
4.布局管理器和控制項的關係
a.乙個布局管理器負責1個或則多個控制項的排列
b.具有控制項容器語義的控制項(例如面板)持有乙個布局管理器
5.合適呼叫布局管理之布局?
a.持有的控制項尺寸變化,移動或者使用者顯示的呼叫之時
6.可能的布局管理器型別
a>流式,**布局,盒子,複雜型別,...
7.簡單的布局管理器介面 /
/////
ui布局資訊基類///
class
uilayoutinfo
virtual
~uilayoutinfo(){}
public
:virtual
engine_string getlayoutttype()
const=0
;};///
///定義ui布局管理器基類///
class
uilayouter
virtual
~uilayouter(){}
public://
/////
增加乙個窗體到布局管理區
////
virtual
uilayouter
&addwidget(widget
*widget) =0
;virtual
uilayouter
&addwidget(widget
*widget,
const
uilayoutinfo&)
////
///控制項移除和重新排列
////
virtual
uilayouter
&removewidget(widget
*widget) =0
;virtual
uilayouter
&arrange(widget
*parent) =0
;};
所有型別的布局管理器都需要繼承於uilayouter
其成員函式arrange負責調配parent控制項下的所有控制項單元.
需要說明的是當容器控制項加入乙個新的控制項的時候,其布局管理器就會呼叫addwidget負責把新的控制項加入布局管理器物件
舉乙個ui面板的例子:
///ui面板(容器)
class
g_dll_api panel :
public
widget
panel
&addchildwidget(widget
*widget,
const
uilayoutinfo
&info)
////
///控制項移除
////
panel
&removechildwidget(widget
*widget)
////
///控制項排列
////
panel
&arrangechildren()
////
///載入布局管理器
////
panel
&setlayouter(uilayouter
*layouter);
在我設計的時候主要參考了2個gui庫,glooey,opengl gui lib
目前商業上使用的開源cegui過於複雜 比很多遊戲引擎都大 讓人難以容忍
使用蓋莫遊戲引擎2 1 1天空面渲染天空
使用蓋莫遊戲引擎2.1.1的天空面 使用蓋莫遊戲引擎2.1.1的天空面 這是使用蓋莫遊戲引擎2.1.1的天空面功能 很簡單的 先說天空面描述符 引入這 個的目的在於減少很多不相關的函式和 其中天空面引數有天空面分割數division 2 個半徑 面半徑和空間半徑 乙個天空圖形 4個關於旋轉的引數 下...
El遊戲引擎 5 GUI
5.guiel的 gui參考 cegui 乏善可陳。作者使用 cegui 也有一段時間了,這裡針對 cegui 做些討論,希望對大家有所幫助。cegui 效率低下的問題常常為人詬病,但是其整個 ui系統的設計卻是很出彩的。可喜的是,一般專案在對其進行簡單優化後,其效率即可基本達到應用需求,網上也有一...
遊戲引擎 GUI的設計與實現 序
在實現了幾個完整gui系統後,以前覺得很難的東西一下變得開朗了。比如以前想在ftk裡實現乙個 混排的控制項和樹形控制項,感覺複雜度超出我的能力範圍了,所以ftk沒有這樣的控制項。而在cantk裡實現乙個 混排的控制項只花了兩天時間,在wtk實現樹形控制項只花了一天時間。寫程式沒有什麼技巧,只是熟能生...