Alterto一個畢業不到兩年,一個三流本科院校畢業的菜鳥,酷愛編程。眾多語言中唯獨對c/c++情有獨鐘。最初接觸的就是windows程序設計,一直以做出很炫的界面為目標,然後學習了MFC,使用windows標准控件做界面,此時發現Windows所提供的標准控件根本無法做出我想要的界面,於是開始學習windows標准控件的自繪,經過一段時間努力,跟隨小金魚老師學習自繪,自繪按鈕,TAB,組合框等windows標准控件基本可以實現我所想要的界面。但是在學習自繪的過程中,也發現了標准控件自繪中存在的很多不足:
首先:普通的控件自繪制仍然是在一個新建的窗口上進行,也就是說所繪制出來的界面中,存在多個子窗口,這樣一旦處理不當很容易造成界面閃爍,解決方法是(使用雙緩沖,WS_CLIPCHILDREN,NULL背景畫刷)。
其次:傳統界面很難實現一些炫酷效果,例如如果需要做類似於QQ一樣半透明背景效果的界面(我的理解:用一張半透明的PNG圖片作為窗口的背景)需要設置層級窗體,但此時窗口上的子控件將無法被現實出來,原因在於普通窗口的繪制是在OnPaint函數中進行,一旦設置層級窗體,其界面繪制工作將搬移到UpdateLayeredWindow函數當中。
後來接觸Dui,開始嘗試使用網上大牛們所寫的界面庫,嘗試尋找一個適合自己的界面庫。但是這並非易事,主要原因在於:網絡上優秀的dui界面庫大部分不開源,而且價格昂貴,開源的界面庫很多卻有做的不完善。但是在開源界面庫下仍然存在著不少精品,這在天朝體制下實屬不易。
當屬Duilib、與DuiEngine,但個人感覺還是DuiEngine要好一點(在win7下不停伸縮用duilib所寫的界面感覺還是會出現黑影,再者duilib的作者基本已經不為其做更新了【大概是被天朝
體制所傷,無奈啊】)。
那Alterto為DuiEngine寫教程的初衷又是為何?
首先,受Alberl的啟發,相信很多人都看過Alberl為Duilib寫得教程,個人感覺寫的太好了,在當時就連我這樣的菜鳥也看懂了(同時也感歎,同樣是畢業一年多的人,差距怎麼這麼大那0.0,
咳!要走的路還有很長啊。)。再者,DuiEngine現在幾乎也沒有一份像樣的教程,作者平時也比較忙根本也沒時間來做這些東西,這麼優秀界面庫卻沒有一份像樣的教程感覺太可惜了,於是
便萌發了為其整理教程的念頭,同時也希望自己在寫教程的同時能更好的掌握DuiEngine。
還是那句話,由於本人還處於菜鳥階段,其中難免有錯誤,還請各位大牛看到後能幫我指出,更希望各位大牛不要噴我,這樣我才有動力將這份教程一直寫下去。好了廢話不多說轉入正題。
一個新興的開源界面,基於金山的bkwin代碼,經過近2年的完善,核心框架部分亦經歷多次大的重構,目前應該說90%以上的基因都是新的。
主要特點(相對於bkwin):
1、框架更加完整,一般的界面都不需要依賴真實子窗口(原realwnd),當然也支持realwnd。
2、不依賴於WTL,可以在win32及MFC裡使用了。
3、更多復雜控件實現:如treectrl等。
4、支持使用UpdateLayeredWindow實現異形窗口,只需要修改一個XML屬性。
5、效率更高,所有繪圖操作都在一個內存位圖上進行,避免了大量的位圖拷貝操作。
6、結構更清楚。
口說無憑,DuiEngine到底效果如何那,請看下面Demo
毋庸置疑,效果簡直太棒了!!小伙伴們是否被驚呆了。而且絕無任何界面閃爍狀況。
1.工欲善其事,必先利其器,這裡建議大家選擇vs2008作為IDE,如何安裝就不說了
2.下載DuiEngine,DuiEngine的SVN:http://code.taobao.org/svn/duiengine/trunk,大家可以安裝一個免費開源客戶端TortoiseSVN,
下載地址與安裝方法這裡不做過多敘述。下載完後,找一個你想要存放DuiEngine工程的目錄下,點擊右鍵選擇SVN Checkout,
填寫信息後點擊OK
下載完後如下:
3.進行相關配置,DuiEngine的作者果然是活雷鋒,已經幫我寫好了一個開發環境配置工具,運行duiengine\wizard目錄下
的wizard.setup.exe進行配置,配置過後最好重啟一次電腦,可以打開VS2008命令提示,輸入SET,查看環境變量是否已經被設置。
4.編譯DuiEngine內核,打開DUIEngine的解決方案
選擇菜單“生成”--》“批生成”,因為我們通常編譯的都是win32應用程序,所以這裡我們把X64平台全部去掉,因為Alterto只學過MFC,WTL並沒有接觸過,
所以這裡我將Debug_ATL也去掉(除非你安裝了WTL否則將提示無法打開包括文件:“atlapp.h”: No such file or directory”),因為我們只需要用到,
Release和Debug兩個版本的動態鏈接庫,所以只生成下面兩項即可。
編譯大概需要幾分鐘的時間,編譯完成後在下面目錄下生成debug和release版本的動態庫和靜態鏈接庫
在不熟悉的情況下建議將工程放到與duiengine同級的目錄,如果前面配置都正確,此時在模板下會有一個DuiEngineWizard模板
然後將我們生成DUIEngine_d.dll和DUIEngine.dll文件分別拷貝到工程目錄文件下,Ctrl+F5。哈哈!見證奇跡的時候到了
不用添加任何代碼我們就生成了一個帶皮膚的Dialog。
好了!DUIEngine的配置就講到這裡,Alterto要去休息了。