標籤:style blog http color 使用 os strong 檔案
一、初識DuiEngine的Skin Files
傳統MFC介面主要是在一個.rc檔案裡進行視窗的布局,然後在resource.h中維繫一個控制項ID通過此控制項ID在程式中通過此控制項ID就可以訪問到該控制項,從而對指定控制項做出各種操作;DuiEngine與之不同,但是思想仍然類似。以上章我們利用DuiEngineWizard產生的第一個工程為例:
DuiEngine將與介面相關的東西都扔到了一個叫Skin Files的檔案夾裡,其中:
1.image檔案中主要用於存放工程中要使用到的相關映像,這個不要什麼多餘的講解;
2.XML最為重要,裡面存放兩種東西:
<1>介面的布局(順便提一下與傳統介面不同的是DuiEngine布局主要是通過xml檔案來實現的)
<2>為介面布局中控制項提供樣式支援,我暫且稱其為樣式檔案(有點css的感覺但是又不太像,不知道為什麼當時作者沒有用xml+css做介面布局那),
3.index.xml檔案(我暫且稱其為資源檔命名表),相當於工程中資源檔的一張命名表。
二、我們需要關心的檔案
DuiEngine的作者為我們編寫了一個輔助的命令程式residbuilder2.exe來協助我們構建工程所需的資源id。
由於DuiEngine的工程沒有一份很好的說明,所以對於初學者來說很難搞清楚Skin Files中哪些檔案需要我們的關心。為此我專門閱讀了residbuilder2.exe的源碼
以我們的第一節課的建立的工程FirstDuiEngineDemo為例,當我們重新構建項目時仔細觀察編譯器下方會出現如下命令:
"XXXX\duiengine\tool\residbuilder2.exe" -i "XXXX\duiengine\FirsrtDuiEngineDemo\FirsrtDuiEngineDemo\skin\index.xml" -y –p
skin -r .\duires\winres.rc2 -n .\duires\name2id.xml -h .\duires\winres.h
下面我們就上面這條命令來詳細解說各個檔案的作用:
First
-i "XXXX\duiengine\FirsrtDuiEngineDemo\FirsrtDuiEngineDemo\skin\index.xml"
命令-i表示讀取index.xml,即讀取工程中資源檔命名表
<resid type="XML" name="IDR_DUI_INIT" file="xml\init.xml" /><resid type="XML" name="IDR_DUI_MSGBOX" file="xml\dlg_msgbox.xml" /><resid type="XML" name="IDR_DUI_MAIN_DIALOG" layer="1" file="xml\dlg_main.xml"/><resid type="IMGX" name="IDP_MAIN_DLG_FRAME" file="image\dlg_bg_frame.png" /><resid type="IMGX" name="IDP_BTN_WND_CHECKBOX" file="image\btn_wnd_checkbox.png"/><resid type="IMGX" name="IDP_BTN_WND_RADIO" file="image\btn_wnd_radio.png" /><resid type="IMGX" name="IDP_FOCUS_CHECK" file="image\focus_checkbox.png"/><resid type="IMGX" name="IDP_FOCUS_RADIO" file="image\focus_radio.png" /><resid type="IMGX" name="IDP_BORDER_EDIT" file="image\img_edit_border.png" /><resid type="IMGX" name="IDP_BTN_SYS_CLOSE" file="image\btn_sys_close.png" /><resid type="IMGX" name="IDP_SCROLL" file="image\scrollbar.bmp" />
其中主要存放了工程中所要用到的各種類型資源檔命名,DuiEngine支援一下一種資源檔類型定義:
XML:例如我們介面布局檔案和樣式檔案都是XML類型的
ICO:表徵圖資源
BMP:位元影像資源
IMGX:GDI+圖片資源,當然位元影像也可以使用這種類型
細心的朋友可能看到了,在XML類型中name = IDR_DUI_MAIN_DIALOG後面有一個屬性為layer = 1,它的作用我將過會做出說明
Second
-y –p skin
-y表示強制改寫標誌(說實話我也沒搞懂什麼意思)
-p表示設定當前路徑為skin目錄下
Three
-r .\duires\winres.rc2
表示將index.xml檔案中的內容格式化到資源檔winres.rc2檔案中
DEFINE_XML(IDR_DUI_INIT,"skin\\xml\\init.xml")DEFINE_XML(IDR_DUI_MSGBOX,"skin\\xml\\dlg_msgbox.xml")DEFINE_XML(IDR_DUI_MAIN_DIALOG,"skin\\xml\\dlg_main.xml")DEFINE_IMGX(IDP_MAIN_DLG_FRAME,"skin\\image\\dlg_bg_frame.png")DEFINE_IMGX(IDP_BTN_WND_CHECKBOX,"skin\\image\\btn_wnd_checkbox.png")DEFINE_IMGX(IDP_BTN_WND_RADIO,"skin\\image\\btn_wnd_radio.png")DEFINE_IMGX(IDP_FOCUS_CHECK,"skin\\image\\focus_checkbox.png")DEFINE_IMGX(IDP_FOCUS_RADIO,"skin\\image\\focus_radio.png")DEFINE_IMGX(IDP_BORDER_EDIT,"skin\\image\\img_edit_border.png")DEFINE_IMGX(IDP_BTN_SYS_CLOSE,"skin\\image\\btn_sys_close.png")DEFINE_IMGX(IDP_SCROLL,"skin\\image\\scrollbar.bmp")
Four
-n .\duires\name2id.xml
表示將index.xml中XML資源中(布局檔案XML)且屬性中帶有layer = ‘‘1"中的控制項name轉化為相應id存放到當前檔案中,我們還記得在index.xml中為IDR_DUI_MAIN_DIALOG設定了layer="1"
所以這裡將根據dlg_main.xml中控制項的name屬性產生其id對照存放到name2id.xml檔案中
產生的name2id.xml內容如下:
<name2id name="DUI-DEMO" id="65536" /><name2id name="maindlg" id="65537" /><name2id name="btn_close" id="1" /><name2id name="btn_msgbox" id="65538" />
Five
-h .\duires\winres.h
只有在產生項目時選擇了“支援ID系統”才會出現此命令。
其內容與name2id.xml是一致的,只是採用#define宏定義格式
/*<------------------------------------------------------------------------------------------------->*//*該檔案由residbuilder2產生,請不要手動修改*//*<------------------------------------------------------------------------------------------------->*/#defineDUI-DEMO65536#definemaindlg65537#definebtn_close1#definebtn_msgbox65538