GacUI 0.4.0.0 发布啦

GacUI 0.4.0.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的接近正确又维护起来特别方便的做法,应该会继续做下去的了。

你可能感兴趣的:(GacUI 0.4.0.0 发布啦)