(2011.12.5再次更新) 经过了两个星期的开发,GacUI添加了TabControl和ListView的一部分视图。这次的ListView的设计的目标是要跟win7的资源管理器相似,TabControl也是依照win7的本地样式设计的。代码仍然保存在
Vczh Library++3.0(Candidate\GUI\GuiDemo\GuiDemo.sln)里,看图:
Direct2D的对于文字的高级渲染效果还没有实现,除此之外,List、Detail、Tile和Information也还没有做。ListView有两个模式,一个是跟普通的ListView一样可以自行添加ListViewItem的,另一个是virtual list模式,需要自己实现一个支持IListViewItemView的GuiListControl::IItemProvider,然后使用ListView的那六个ContentProvider,就可以做出跟ListView一样的效果,但是性能巨快无比的列表了。因为添加的ListViewItem很多的话,性能的瓶颈会在添加到列表的过程中,而ListView本身丝毫没有区别。因此内容太多的话建议使用virtual list模式,好处是不需要每一个项目都new一个对象,ListView会用一个item index来回调出具体的数据内容。
根据
上一篇文章的评论,我决定以后发布GacUI的时候同时提供dll和一对h/cpp两种选项,其中h/cpp会根据功能提供几个裁剪的结果,而dll总是包含所有功能。使用dll的话,可以做到跟C#的WinForm和WPF一样,把应用程序的插件写在另一个dll里面。而h/cpp因为合并的文件太大,因此需要打开Visual C++的/bigobj选项,好处是可以深入使用到内部的所有功能,还能根据自己的需要进行修改,而不局限于dll所提供的GUI部分。
为了配合GacUI的使用,跟QT的QML一样,我会升级以前开发的FreeScript2.0,做出一个3.0的版本来跟GacUI配合使用(这个功能是可选的,裁剪的h/cpp文件对将不强制包含脚本代码,但是dll总是包含脚本功能)。关键的功能是直接支持json(合法的json数据即合法的FreeScript3.0代码),容易使用的异步IO功能,还有跟linq一样好用的list comprehension,最后当然是跟javascript的语法想当接近但是直接支持class,不会跟javascript一样曲线救国。相信学习起来的难度非常小。这样就可以把一部分用C++写起来比较麻烦的代码用FreeScript3.0实现,并且这部分代码将可以在GacUI Editor内部编辑。GacUI会跟WPF一样提供两种调用方法,一种是C++自己new那些类,另一种就是使用GacUI Editor产生的xml了。我会尽量让xml方法简单易用,就跟XAML一样,不过因为我的对象模型显然没有XAML(主要是C#)那么复杂,相比会比XAML容易阅读和使用。
=============================
P.S. 经过若干天的艰苦奋斗终于完成了三个View和DirectX的支持,就剩下Detail一种最复杂的View了。放图:
posted on 2011-12-03 07:09
陈梓瀚(vczh) 阅读(3615)
评论(27) 编辑 收藏 引用 所属分类:
GacUI