duilib入門之貼圖描述、類html文本描述、動態換膚、Dll插件、資源打包


轉載自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軸不要拉伸而是平鋪:

類html文本描述:

         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")),如


int APIENTRYWinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/,int nCmdShow)

{

    CManager::SetInstance(hInstance);

CManager::SetResourcePath(CManager::GetInstancePath());

CPaintManagerUI::SetResourceZip(_T("xxx.zip"));

// ……

}

 

         這樣就完成了資源打包功能,發布程序只需要把exe、dll和zip文件帶上就行了。有時為了需要,也可以修改.zip為其他擴展名,比如.dat。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM