Duilib暂停教程更新

http://www.cnblogs.com/Alberl/category/520438.html,在此先感谢大神的教程,获益匪浅啊。

因为时间缘故,我要深入学习C++、windwos程序设计、windows游戏编程,来重构Duilib开源库,作为自己的毕业设计了,Duilib教程就去看上面的地址了,我就不再过多阐述了,有机会再出吧,重构的思路如下:

在功能层次划分上大体可分为主框架、窗口管理器、事件管理器、渲染处理、逻辑处理、资源管理、时间系统、脚本、GUI,以下是具体内容 
1、主框架:负责创建唯一的物理窗口、处理系统消息处理生成输入事件,同时它也是一个主循环应该具有起停功能
2、窗口管理器:所有的窗口都是virtual的,涉及到窗口间的切换以及通信的时候能够很方便的进行管理,同样定义窗口切换的动画时也是很好扩展的 
3、事件管理器:对输入事件、逻辑事件进行统一管理。输入事件一般就是由系统消息转换而成的,而逻辑事件一般是逻辑处理产生的。事件通知机制采用类似C#的托管机制,由事件管理器分发到注册的监听者(窗口和控件) 
4、渲染处理 
(1)做成一种帧回调的方式,这样能够根据实际情况调整刷新的频率。 
(2)帧可以拆分成逻辑处理帧和界面渲染帧在不同线程中处理实现完全分离,逻辑帧是对数据及渲染对象状态改变等进行处理,而渲染帧是进行实际的渲染,在处理完一帧结束的时候同步一下。 
(3)简单数据的处理可借鉴MFC的DDX机制。比如音量调节,在逻辑处理修改音量这个数据后会触发视图的刷新。 
5、逻辑处理:处理数据和事件状态切换、通知渲染处理 
(1)简单的逻辑处理直接在事件处理函数中完成 
(2)复杂的逻辑处理考虑用有限状态机的方式 
(3)逻辑处理和渲染处理是需要有一个同步机制的 
6、资源管理器:对图片、文字、声音进行统一管理 
(1)在PopCap_Framework这个小游戏开发框架中有一个ResourceGen工具,可以生成资源配置文件包含的只是ID及路径,这样有一个好处就是可以动态的改变图片及文字 
(2)资源预读线程。这在资源够多主框架刚起来时对效率的提升还是有帮助的。 
(3)高速缓存:防止过多的资源占用大量的内存 
7、脚本:如果界面和逻辑分离得比较彻底,那么逻辑处理用脚本来做应该是比较容易了。 
8、GUI:duilib现有的控件容器部分其实只是GUI,已经做得比较完善了。不同的是由渲染线程来处理这些图形单元,如果能进一步抽象到点、线、面就更好了。 
9、渲染器:这一部分最好抽象出来,一个好处就是具体的渲染模块如GDI、GDI+、D3D、OPENGL可以用插件的方式注册。 
10、时间系统:这部分到底需不需要还没想明白。 
11、日志记录 
12、调试:比如说内存泄漏监控、回收、异常处理机制等等

如果有机会,会对自己的重构过程做记录。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.duilib简介 duilib是一个开源的DirectUI界面库,简洁但是功能强大。而且还是BSD的license,所以即便是在商业上,大家也可以安心使用。 现在大家可以从这个网站获取到他们所有的源码:/p/duilib/ 为了让我们能更简单的了解其机制,我们按照如下顺序一步一步的来对他进行观察: 工具库:用于支撑整个项目的基础 控件库:这是dui最关键的部分之一,相信也是大家最关注的部分之一,另外这里也来看看它是如何管理这些控件的 消息流转:有了控件库,我们需要将Windows窗口的原生消息流转给这些控件,另外在这里也来看看Focus,Capture等等的实现 资源组织和皮肤加载:有了上面所有的这些,我们再来看看它是如何自动创建皮肤的 简单使用:最后,来看看到底要如何使用它 以下是duilib工程带的一副总体设计图,在看代码之前看看这幅图,对看代码会很有帮助。 duilib: 2.工具库 由于duilib没有对外部的任何库进行依赖,所以在其内部实现了很多用于支撑项目的基础类,这些类分布在Util文件夹中: UI相关:CPoint/CSize/CDuiRect 简单容器:CStdPtrArray/CStdValArray/CStdString/CStdStringPtrMap 上面这些类看名字就基本能够理解其具体的含义了,当然除了基本的基础库,还有一些和窗口使用相关的工具的封装: 窗口工具:WindowImplBase,这个工具我们在这里不详述,后面会再次提到。 3.控件库 控件库在duilib的实现中被分为了两块:Core和Control: Core中包含的是所有控件公用的部分,里面主要是一些基类和绘制的封装。 Control中包含的就是各个不同的控件的行为了。 Core部分和控件相关的类图非常简单: duilib-core: 3.1.控件基类:CControlUI CControlUI在整个控件体系中非常重要,它是所有控件的基类,也是组成控件树的基本元素,控件树中所有的节点都是一个CControlUI。 他基本包括了所有控件公共的属性,如:位置,大小,颜色,是否有焦点,是否被启用,等等等等。当然这个类中还提供了非常多的基础函数,用于重载来实现子控件,如获取控件名称和ClassName,是否显示,等等等等。 另外为了方便从XML中直接解析出控件的各个属性,这个类中还在提供了一个SetAttribute的方法,传入字符串的属性名称和值对特定的属性进行设置,内部其实就是挨个比较字符串去完成的,所以平时使用的时候就还是不要使用的...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值