开源那些事儿(三)-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,如需转载请自行联系原作者



相关文章
|
1月前
|
SQL 开发框架 .NET
OA办公自动化系统设计与实现(论文+源码)_kaic
OA办公自动化系统设计与实现(论文+源码)_kaic
|
11月前
|
存储 架构师 安全
【企业架构框架】如何使用新的 TOGAF 版本 10
【企业架构框架】如何使用新的 TOGAF 版本 10
互联网公司研发RD如何撰写总体设计与详细设计文档
互联网公司,产品迭代块,项目周期长,基本没有“文档”一说,但其实写好文档,对系统和项目未来的维护是非常有帮助的。
1457 0
|
JavaScript Java 关系型数据库
采用开源软件搭建WebGIS系统(1)系统架构
[本文版权由xiaotie@vip.sina.com所有,转载需得到作者同意。] 采用开源软件搭建WebGIS系统的好处: (1)费用低,扩展性强,搭建的过程同时也是一个学习研究的过程 (2)开源GIS软件基本都遵守OpenGIS规范 经过近1个月的调研,我采用如下架构: (1)数据,采用国家基础地理信息中心的国家基础地理信息系统1:400万数据,可从下面获取:         http://nfgis.nsdi.gov.cn/nfgis/chinese/c_xz.htm         我下载的是shp文件。
3774 0
|
Web App开发 前端开发