圣诞节人山人海啊,根本不能出去玩什么的,妹纸第二天还要考试,所以就在家里呆着,顺便把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) 阅读(3338)
评论(15) 编辑 收藏 引用 所属分类:
GacUI