随笔-341  评论-2670  文章-0  trackbacks-0
    昨晚终于发布了GacUI 0.4.0.0,也就是第五个release了。现在GacUI的源代码可以在三个地方找到,分别是:
    Codeplex:http://gac.codeplex.com
    Github:https://github.com/vczh/gac
    主页:http://www.gaclib.net

    这两个月在开发GacUI的对象的反射系统之外,一直在做Windows 8的皮肤。现在的GacUI已经拥有了两个皮肤,一个是模仿Windows 7的,另一个是模仿Windows 8的。GacUI在启动的时候,会根据Windows的版本来自己选择要用哪个皮肤做缺省皮肤。使用g::NewXXX()函数创建的控件都会直接使用当前的皮肤(如果没有用SetCurrentTheme替换掉的话,就是缺省皮肤)来创建控件,否则,直接new控件类的话,要传入一个创建好的皮肤对象。

    在开发WIndows 8皮肤的时候,我十分的庆幸把皮肤系统也给做成了面向对象的结构。Windows 8的ListView的ColumnHeader样式和Windows 7的一模一样,所以在ListView的IStyleProvider里面,创建ColumnHeader样式的那个函数里面,我直接new了当时给Windows 7写的ListView的ColumnHeader的皮肤对象,然后就搞定了Windows 8ColumnHeader的渲染。特别的方便。在下一个Release的GacUI反射机制做好之后,不但窗口可以用编辑器保存为XML加载,皮肤也是要可以用编辑器保存成XML加载的。

    之前在这篇文章里面描写的直接生成反射代码的想法有一部分失败了。但是为了窗口编辑器的诞生,是一定需要有一个反射机制的。所以这次仍然沿用从pdb爬出类型的方法来做,但是我觉得在新的机制里面,要人肉写每个类在反射的时候的接口。这些接口包含函数、属性、事件和属性更改事件,还包含几个序列化和反序列化的工具。之前觉得,属性和事件可以直接从C++类型里面推导出来,但是后来发现有很多问题,所以决定人肉绑定属性和函数,写在一个XML里面,然后用Common\Tools\TypeDescGen.exe(还没写好)来生成支持反射的一大堆C++代码。反射的接口我也设计的相当的面向对象化,这部分接口可以在Common\Source\Reflection\GuiTypeDescriptor.h里面找到。在同一个文件夹下还有一个GuiTypeDescriptorBuilder.h,是一个用来方便创建ITypeDescriptor的工具类。最后从接口xml+pdb描述的类结构产生出来的C++代码,将会是调用GuiTypeDescriptorBuilder.h里面的代码。因此在下一个版本,说不定Release的代码结构就变成这个样子了:
    Vlpp.h
    Vlpp.cpp
    GacUI.h
    GacUI.cpp
    GacUIIncludes.h
    GacUITypeDescriptors.cpp
    如果在编译的时候包含GacUITypeDescriptors.cpp这个文件的话,那么GetTypeDescriptor(L"ClassName")将会返回包含GacUI的各种控件和其他对象的内容。这些内容的加载是on demand的,也就是说,只有真的需要到那些反射内容的时候,才会开始一点一点运行GacUITypeDescriptors.cpp里面的代码来提供这些信息,不会在程序刚开始的时候花一点时间来把这些数据全部加载进去。

    一旦搞定了反射之后,以后无论是读写XML生成窗口也好,窗口编辑器也好,集成进其他的脚本语言也好,将会变得相当的容易。下一个Release我将争取包含反射部分的内容,再下一个Release开始开发控件剩下的花边功能(譬如按tab跳转焦点之类的),和一个编辑器。

    最后放两个图,分别是文本编辑器Demo在Windows 7下面和Windows 8(滚动条的箭头图标是错的,下一个Release会换成Windows 8的箭头图标)下面的样子:

       

    GacUI从去年国庆开始写到现在也有一年了,总算也是写了不少代码。UI框架写了8次之后终于迎来了GacUI的接近正确又维护起来特别方便的做法,应该会继续做下去的了。
posted on 2012-10-18 22:16 陈梓瀚(vczh) 阅读(3722) 评论(7)  编辑 收藏 引用 所属分类: GacUI

评论:
# re: GacUI 0.4.0.0 发布啦 2012-10-18 23:09 | Richard Wei
Hoho, 支持下大牛  回复  更多评论
  
# re: GacUI 0.4.0.0 发布啦 2012-10-18 23:57 | 天下
有点感觉,不错,

有点喜欢

期待更多的DEMO
  回复  更多评论
  
# re: GacUI 0.4.0.0 发布啦 2012-10-19 02:27 | augustheart
支持mingw么?  回复  更多评论
  
# re: GacUI 0.4.0.0 发布啦 2012-10-19 05:15 | demo
非常帅气,赞。

大牛有空的时候能再升级下 CustomizedBorder 吗, 在最小化 和 最大化旁边点击的时候 原先的老土的 最大化按钮 和 关闭按钮 显示出来了  回复  更多评论
  
# re: GacUI 0.4.0.0 发布啦 2012-10-19 05:17 | demo
大牛有闲情的时候再顺手看这个, ~~ 毕竟是很小的芝麻 我期待看见更大的西瓜:)  回复  更多评论
  
# re: GacUI 0.4.0.0 发布啦 2012-10-19 05:42 | 陈梓瀚(vczh)
@demo
这看来是个bug哦,我找时间搞定它  回复  更多评论
  
# re: GacUI 0.4.0.0 发布啦 2012-10-19 05:43 | 陈梓瀚(vczh)
@augustheart
暂时不支持  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理