轉載自duilib入門文檔
貼圖描述:
Duilib的表現力豐富很大程度上得益于貼圖描述的簡單強大。Duilib的貼圖描述分為簡單模式和複雜模式兩種。
簡單模式使用檔案名做為貼圖描述内容,在這種方式下,此圖檔将會以拉伸方式鋪滿控件。
複雜模式使用帶屬性的字元串表示貼圖方式,既支援從檔案中加載圖檔,也可以從資源中加載,具體如下:
如果是從檔案加載,設定file屬性,如file='XXX.png',不要寫res和restype屬性
如果從資源加載,設定res和restype屬性,不要設定file屬性
dest屬性的作用是指定圖檔繪制在控件的一部分上面(繪制目标位置)
source屬性的作用是指定使用圖檔的一部分
corner屬性是指圖檔安裝scale9方式繪制
mask屬性是給不支援alpha通道的圖檔格式(如bmp)指定透明色
fade屬性是設定圖檔繪制的透明度
hole屬性是指定scale9繪制時要不要繪制中間部分
xtiled屬性設定成true就是指定圖檔在x軸不要拉伸而是平鋪,ytiled屬性設定成true就是指定圖檔在y軸不要拉伸而是平鋪:
Duilib使用一種經過簡化的類html格式文本來描述複雜的圖文格式。使用<>或{}符号來辨別文法标簽,支援标簽嵌套,如<l><b>text</b></l>,但是應該避免交叉嵌套,如<l><b>text</l></b>。
<b>text</b> 表示text的内容使用粗體
<c #xxxxxx>text</c> 表示text内容使用#xxxxxx顔色,#xxxxxx表示16進制的RGB值
<f x>text</f>
表示text内容使用x序号的字型
<i>text</i> 表示text内容使用斜體
<i x y z>
表示此次插入圖檔,x表示圖檔名稱,y表示此圖檔包含幾張字圖檔(可不填,預設值1),z表示目前使用的字圖檔id(可不填,預設值0)
<a x>text</a> 表示text内容有連結功能,x表示連結位址(可不填),用法如app:notepad or http:www.xxx.com,此字元串需要在使用者程式中解析處理。
<n> 表示此次換行
<p x>text</p> 表示text内容是一個段落(從這裡開始換行),x表示此段落文字水準距離(可不填)
<r>text</r>
表示text内容不使用文法标簽功能
<s>text</s> 表示text内容被選中(顯示選中的背景顔色)
<u>text</u> 表示text内容使用下劃線
<x i> 表示從此處向後面移動x個像素值
<y i> 表示該行高度固定為y個像素值
使用标簽功能需要把控件的showhtml屬性設定為true。
Duilib是一個以貼圖為主要表現手段的界面庫,實作換膚非常簡單,可以通過給控件設定不同的圖檔來實作換膚,比如給需要換膚的控件調用CControlUI::SetBkImage。但是針對換膚功能,Duilib提供了更為簡單的方法,即使用CPaintManagerUI::ReloadSkin。
假設我們給程式建立了兩套皮膚,分别打包成skin1.zip和skin2.zip,在程式運作的時候,執行:
CPaintManagerUI::SetResourceZip(_T("skin2.zip")); // 或者skin1.zip
CPaintManagerUI::ReloadSkin();
這樣簡單的兩行代碼,就實作了全部視窗從skin1皮膚到skin2皮膚的切換。你也可以随時再次調用上面兩行代碼,把皮膚切換回去。
Duilib支援使用外部dll來擴充控件:
在dll中,隻需要實作一個接口CreateControl,如
extern"C" __declspec(dllexport) CControlUI* CreateControl(LPCTSTR pstrType)
{
if( _tcscmp(pstrType,_T("ButtonEx")) == 0 ) return new CButtonExUI;
return NULL;
}
在使用程式中,需要在WinMain函數把插件dll使用CPaintManagerUI::LoadPlugin加載進來,然後就可以和内置控件一樣使用了。
int APIENTRYWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/,int nCmdShow)
CManager::SetInstance(hInstance);
CManager::SetResourcePath(CManager::GetInstancePath());
CManager::LoadPlugin(PLUGINNAME);
// ……
Duilib使用資源打包功能非常簡單,在程式開發完成後隻需做兩個步驟即可:
進入資源目錄,然後使用具備zip壓縮功能的軟體(如winrar、winzip、7zip等)把布局xml和圖檔等資源壓縮到一個zip檔案包裡。
在WinMain函數中CPaintManagerUI::SetInstance(hInstance)的後面加入CPaintManagerUI::SetResourceZip(_T("xxx.zip")),如
CManager::SetResourcePath(CManager::GetInstancePath());
CPaintManagerUI::SetResourceZip(_T("xxx.zip"));
這樣就完成了資源打包功能,釋出程式隻需要把exe、dll和zip檔案帶上就行了。有時為了需要,也可以修改.zip為其他擴充名,比如.dat。