最近公司開發的幾個軟件都需要支持皮膚,因此花了半個月做了一套皮膚引擎,也就是所謂的Direct UI,即控件都是畫在窗體上的,只有容器窗體是有實際句柄的,子控件並非標准的Window。
說說這套引擎的幾個特性
- 繪制效率尚可,至少圖片很多時也沒有發現有閃爍;
- 支持的常用圖片格式(BMP/JPG/PNG/GIF/ICON等),並支持圖片透明;
- 圖片延遲載入,避免占用內存資源;
- 皮膚支持多種存儲格式,如ZIP打包、EXE內嵌資源等,要擴充新的格式也很方便;
- 容器基於Delphi的TWinControl,例如你在窗口上放置一個Panel,只在這個Panel里使用皮膚;
- 支持同時使用多個皮膚,比如Form1用一種皮膚,Form2用另一種;
- 支持動態切換皮膚;
- 可以和Delphi的TWinControl混用,不會互相影響,但不支持TGraphicControl(這個是當然的哈哈);
- 大部分控件都支持樣式,即不同的狀態下使用不同字體、背景、邊框等。一般的DirectUI中,控件的樣式都只是簡單的設置一張圖片,對控件的不同狀態的顯示需要用代碼控制顯示。另外引擎內置了多種邊框、背景樣式,盡可能減少用代碼控制樣式的可能;
- 靈活多樣的圖片繪制方式,省去你剪裁圖片的無聊工作;
- 類似於Delphi,這套引擎也支持不可見的Component,比如用來管理控件提示(Hint)的組件;
- 不錯的布局系統,類似於TControl的Anchors,自動左對齊、右對齊、居中都很容易實現,不需要代碼控制。另外也提供了垂直布局、水平布局、表格布局、排列布局等自動布局控件;
- 支持異形控件,即非矩形的控件。支持控件背景透明(對DirectUI來說,這個是很容易的 :)
- 支持控件模板,相同樣式的控件再也不需要繁瑣的定義了;
- 使用方便,拖兩個控件到窗體上,設置下屬性,就可以運行了。
后續計划:
- 配合我的插件框架,支持使用插件動態擴展;
- 增加腳本支持,徹底將UI與業務邏輯分離;
- 增加繪圖引擎。面前繪圖是基於GDI的,想增加DirectX的支持;
- 支持色調切換,支持動態效果。
缺點:
沒有設計器,設計UI是件繁瑣無趣的工作。。。
上幾張圖吧,不是很復雜的UI