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


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