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


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