Duilib教程-HelloDuilib及DuiDesigner的简单使用
一、HelloDuilib
1.?首先理解DUILIB顯示的一個(gè)基本流程,如下圖:
?
?
在Duilib中,WindowImplBase?這個(gè)類(lèi)代表了圖中?“CWndClass”。
所以我們需要做的是:
1)生成一個(gè)XML。
2)生成一個(gè)WindowImplBase對(duì)象。
3)加載XML。
4)顯示窗口。
但是編寫(xiě)的時(shí)候,WindowImplBase已經(jīng)幫我們做了許多工作,我們只需要指定XML路徑,它就能夠幫助我們自動(dòng)加載,非常方便。
但是一般我不喜歡先編寫(xiě)XML,我喜歡先寫(xiě)MAIN函數(shù),再編寫(xiě)占位函數(shù),再一個(gè)個(gè)地實(shí)現(xiàn)占位函數(shù)。所以我們進(jìn)入下一個(gè)步驟。
?
2.?建立工程。
1)如果是第一次使用DUILIB的話,你要把DUILIB加入到VS2008的環(huán)境變量中,我的Duilib保存在I:\GitHub\Duilib,設(shè)置的路徑為:
包含路徑:I:\GitHub\Duilib
源路徑:I:\GitHub\Duilib
庫(kù)路徑:I:\GitHub\lib
如下圖:
?
?
最后還要設(shè)置一下系統(tǒng)的環(huán)境變量為:I:\GitHub\Duilib\Bin,右鍵“我的電腦”->“屬性”->“高級(jí)系統(tǒng)設(shè)置”,如果是XP的話,可能稍有不同,彈出的操作如下圖:
?
?
2)新建一個(gè)WIN32工程,如下圖:
?
然后一直“下一步”。
?
在HelloDuilib.cpp中,只保留下列代碼,其余全刪除。
#include "stdafx.h" #include "HelloDuilib.h"int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){ }?
在stdafx.h中加入以下代碼:
#include <ObjBase.h> #include <Duilib/UIlib.h>using namespace DuiLib;#ifdef _DEBUG #pragma comment (lib, "duilib_ud.lib") #else #pragma comment (lib, "duilib_u.lib") #endif然后編譯一下,如果編譯沒(méi)有問(wèn)題,就進(jìn)入下一步,當(dāng)然你得先編譯DUILIB源碼,編譯unicode_debug和unicode_release兩個(gè)版本。當(dāng)然,全部版本都編譯更佳。
?
3)新建一個(gè)從?WindowImplBase繼承的類(lèi)?CHelloDuilibWnd,然后將它的頭文件的代碼修改如下:
class CHelloDuilibWnd : public WindowImplBase { public: CHelloDuilibWnd(void); ~CHelloDuilibWnd(void);protected: virtual CDuiString GetSkinFolder() { return _T ("skin"); }; virtual CDuiString GetSkinFile() { return _T ("HelloDuilib.xml"); }; virtual LPCTSTR GetWindowClassName(void) const { return _T ("HelloDuilib_Wnd"); }; };?
說(shuō)明:
GetSkinFolder?()?需要返回?皮膚XML?所在的文件夾
GetSkinFile?()?需要返回?皮膚?XML?的文件名(也可以包含路徑)
GetWindowClassName?()?需要返回這個(gè)窗口的類(lèi)名,這個(gè)類(lèi)名用于?RegisterClass.
?
4)返回去編寫(xiě)?WinMain?函數(shù),如下:
#include "stdafx.h" #include "HelloDuilibWnd.h" #include "HelloDuilib.h"int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){ CPaintManagerUI::SetInstance(hInstance);// 加載XML的時(shí)候,需要使用該句柄去定位EXE的路徑,才能加載XML的路徑CHelloDuilibWnd* wnd = new CHelloDuilibWnd; // 生成對(duì)象 wnd->Create(NULL, NULL, UI_WNDSTYLE_DIALOG, 0); // 創(chuàng)建DLG窗口 wnd->CenterWindow(); // 窗口居中 wnd->ShowWindow(); // 顯示 CPaintManagerUI::MessageLoop(); // 消息循環(huán)delete wnd; // 刪除對(duì)象return 0; }?
3.我們?cè)偃?chuàng)建皮膚XML。
首先,你得編譯?DuiDesigner?這個(gè)工程,使用?DuiDesigner.sln?解決方案進(jìn)行編譯。在?bin中可以找到生成的?DuiDesigner.exe。打開(kāi),然后新建一個(gè)名為?HelloDuilib?的文件,該名稱即為?CHelloDuilibWnd::GetSkinFile()返回的名稱。
?
接下來(lái),添加一個(gè)?VerticalLayout(點(diǎn)擊下圖中的1,再點(diǎn)擊中間窗口位置,不是使用拖動(dòng)的方式),然后選中這個(gè)VerticalLayout,再在最右邊的屬性欄中設(shè)置它的背景顏色。再在上面添加一個(gè)?Label?控件,將其Text修改為?“HelloDuilib”。
?
?
當(dāng)然,你還可以添加按鈕、EDIT等控件,還可以試驗(yàn)?BkColor2,?BorderSize,?BorderColor等屬性。然后按?“CTRL+T”進(jìn)行測(cè)試,我的測(cè)試結(jié)果如下:
?
按ESC即可退出測(cè)試,與VS的對(duì)話框測(cè)試一樣的快捷鍵。
?
4.到?HelloDuilib?工程的生成目錄下新一個(gè)文件夾“skin”,將生成的XML放到這個(gè)skin文件夾中,點(diǎn)擊運(yùn)行。
?
?
即可看到結(jié)果。
當(dāng)然,你會(huì)發(fā)現(xiàn)你退不了程序,原因是使用了
CPaintManagerUI::MessageLoop();?//?消息循環(huán)
跳出該循環(huán),必須使用?PostQuitMessage?(0);?函數(shù)。
當(dāng)然你可以使用:
Wnd->ShowModal?()?用模態(tài)對(duì)話框代替非模態(tài)對(duì)話框顯示
?
wnd->ShowWindow();?//?顯示
CPaintManagerUI::MessageLoop();?//?消息循環(huán)
?
二、DuiDesigner的使用。
?
如上圖,主要分為六大模塊。
1為皮膚設(shè)計(jì)窗口,在上面添加控件規(guī)劃你的皮膚。
2為WND窗口,請(qǐng)單擊1與2,看屬性欄變化。
3為控件添加窗口
4為屬性設(shè)置窗口
5為窗口測(cè)試及控件對(duì)齊窗口
6為已添加控件層次查看窗口,當(dāng)然它有三個(gè)TAB,只有控件層次才最有用。
?
在編寫(xiě)XML的時(shí)候,一定注意:
DUILIB?XML一定要有一個(gè)底層?Layout!!!
不能直接在?WND上添加控件!
?
說(shuō)明,這個(gè)工具可能會(huì)有諸多BUG,屬性更改失效、時(shí)不時(shí)崩潰等,不過(guò)我遇到崩潰的情況比較少,新手可能會(huì)遇到較多,但不要抱怨,畢竟有這樣一個(gè)工具已經(jīng)是十分難能可貴了。
?
可能你已經(jīng)看了屬性欄中有諸多屬性,你可以試著添加圖片,修改顏色,修改邊框等查看一下,然后你也可以看一下WND的屬性,CAPION到底是什么,MINMAXINFO又是什么。
?
這一節(jié)最后,我可能會(huì)要求你做一些額外的工作:
1.請(qǐng)嘗試除?UI_WNDSTYLE_DIALOG?外的其它窗口創(chuàng)建方式,查看有什么不一樣。
2.XML是怎樣加載的?
3.嘗試添加按鈕,并設(shè)置圖片。
?
本節(jié)到此結(jié)束。
總結(jié)
以上是生活随笔為你收集整理的Duilib教程-HelloDuilib及DuiDesigner的简单使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Duilib教程-简单介绍
- 下一篇: Duilib教程-控件练习