圣誕節(jié)人山人海啊,根本不能出去玩什么的,妹紙第二天還要考試,所以就在家里呆著,順便把TreeView給做了。源代碼都在
Vczh Library++ 3.0(Candidate\GUI\GUIDemo\GUIDemo.sln)。下面是Direct2D渲染出來的帶反鋸齒的TreeView。


這個(gè)TreeView是通過把ListView進(jìn)行擴(kuò)展,替換IItemProvider和IItemStyleProvider而完成的。在這里TreeView仍然使用Virtual List模式。程序員將有機(jī)會(huì)在用戶展開某個(gè)TreeNode的時(shí)候才開始加載里面的內(nèi)容。這次仍然可以修改template(控件皮膚)。當(dāng)程序員提供了一個(gè)INodeProvider之后,GacUI已經(jīng)準(zhǔn)備了兩個(gè)現(xiàn)成的類,將INodeProvider轉(zhuǎn)成IItemProvider,將INodeItemStyleProvider轉(zhuǎn)成IItemStyleProvider,從而將樹形結(jié)構(gòu)轉(zhuǎn)換成列表結(jié)構(gòu)而使用ListView進(jìn)行顯示和操作。這個(gè)過程也封裝成了一個(gè)GuiVirtualTreeListControl。如果不需要提供自己的虛擬化算法的話,直接提供INodeProvider和INodeItemStyleProvider將可以直接使用GuiVirtualTreeListControl顯示樹形結(jié)構(gòu)。
將一個(gè)虛擬化的樹形結(jié)構(gòu)轉(zhuǎn)換成一個(gè)虛擬化的列表結(jié)構(gòu)是比較復(fù)雜的,特別是當(dāng)需要高性能的情況下。因此GacUI內(nèi)置了這個(gè)算法的支持。一般情況下程序員不需要修改這個(gè)過程,直接使用GuiVirtualTreeListControl就可以實(shí)現(xiàn)。這一次內(nèi)置的Windows7皮膚同時(shí)實(shí)現(xiàn)了跟Windows7資源管理器非常相似的外觀(特別是那些三角形)。DirectX版本有反鋸齒,而GDI版本則沒有。
現(xiàn)在要完成的功能已經(jīng)剩下下面所示(順序與優(yōu)先級(jí)無關(guān)):
1、Ribbon
2、Visual Studio那樣子的Dock Panel
3、Canvas
4、完善鍵盤操作
5、提供類似簡化后的XAML一樣的結(jié)構(gòu)來保存界面
6、基于XML(見5)的界面編輯器,類似簡化后的Expression Blend
7、具有跟XML內(nèi)一樣外觀的,封裝在DLL里的接口(帶反射,以便實(shí)現(xiàn)XML,但是被設(shè)計(jì)成C++使用時(shí)將沒有有性能損失)
8、內(nèi)置FreeScript3.0的支持,用于方便實(shí)現(xiàn)各種高級(jí)的皮膚,并且如果愿意的話,可以將整個(gè)程序用FreeScript3.0寫
9、UIAutomation
posted on 2011-12-25 06:08
陳梓瀚(vczh) 閱讀(3358)
評論(15) 編輯 收藏 引用 所屬分類:
GacUI