开源那些事儿(三)-iToday的总体设计

简介:

本文讲述iToday总体设计的第一版本。

UML 图

iToday-design-1

PanelManager

iToday的主程序只是包含PanelManager,主窗口线程的消息循环接收到的所有消息都传递给PanelManager来处理,iToday主程序不做任何业务逻辑处理。

 

PanelManager有三个主要的成员变量,其中Panels表示所有Panel的指针的容器,保存是指向PanelBase的指针,对象为各个具体的Panel对象。而ActivePanel为指向当前活动Panel的指针。Swither是特殊的Panel,单独一个对象,不在map容器里面。

 

消息事件处理

主窗口线程接收到任何事件都给PanelManager处理,而PanelManager又分发给ActivePanel和Swither来处理。所有继承于抽象类PanelBase的具体Panel类需要重载虚函数ProcessMouseDownEvent(),ProcessMouseUpEvent(),ProcessOtherEvents()和ProcessGesture()来处理事件和消息。如果是鼠标事件,ActivePanel和Swither会根据内部判断是否自己区域,不是就不用处理了。而具体Panel类根据需要可以调用PanelManager的Draw()函数,直接要求重画,为了做动画过程。

 

绘画

iToday的绘画由PanelManager的Draw()函数负责,由两部分组成,ActivePanel和Swither的绘画组成了整个iToday的绘画过程。PanelManager的Draw()的过程是这样的,分别调用 ActivePanel和Swither的PrepareDraw(),ActivePanel和Swither只是把需要画的画到内存内。然后由PanelManager一次画到真实设备,这里使用了双缓冲。以此,所有继承于抽象类PanelBase的具体Panel类需要根据当前的自己的需求去重载PrepareDraw()函数,把信息画到内存去。

 

如何开发新Panel

这个框架的原则是新增Panel的时候,PanelManager只是在初始化加载Panel的地方进行更改,不用更改任何消息处理和绘画过程。PanelManager和具体的Panel类解耦。开发具体的Panel类,需要重载事件函数ProcessMouseDownEvent(),ProcessMouseUpEvent(),ProcessOtherEvents()和ProcessGesture(),具体的Panel类可以自定义自己的事件,例如HomePanel可以自己定义监控注册表消息事件,PanelManager完全不需要进行更改来支持这自定义事件。同时需要重载PrepareDraw()来画自己的逻辑。

 

请根据具体Panel的需求来考虑这个框架是否完善,有任何意见请及时反馈,及时改进。

 

其他iToday的文章请看:

开源(Open Source)那些事儿 (一)

开源那些事儿 (二) - iToday开源项目计划


    本文转自Jake Lin博客园博客,原文链接:http://www.cnblogs.com/procoder/archive/2010/02/09/About-Open-Source-3.html,如需转载请自行联系原作者



相关文章
|
12月前
|
存储 架构师 安全
【企业架构框架】如何使用新的 TOGAF 版本 10
【企业架构框架】如何使用新的 TOGAF 版本 10
|
12月前
|
存储 XML 缓存
「领域驱动设计」领域驱动的设计和开发最佳实践
「领域驱动设计」领域驱动的设计和开发最佳实践
|
12月前
|
存储 XML 缓存
「领域驱动设计」领域驱动的设计和开发最佳实践(下)
「领域驱动设计」领域驱动的设计和开发最佳实践
|
12月前
|
存储 设计模式 缓存
「领域驱动设计」领域驱动的设计和开发最佳实践(上)
「领域驱动设计」领域驱动的设计和开发最佳实践
|
存储 运维 架构师
开发人员为什么要学会画技术架构图?
系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。