一步一步实现自己的模拟控件(1)——消息驱动设计

 

目标:

实现一套windows下简单且可扩展的抽象模拟控件内核。

抽象模拟控件:

我们将windows系统的窗口客户区作为模拟控件的容器,每个模拟控件就是其中的一个抽象矩形区域,并且能够模拟控件进行递归嵌套。控件支持基本的鼠标和键盘消息,能够在窗口大小改变时进行布局。

分析:

因为我们要实现的是抽象的模拟控件,不是真正的窗口控件,那么就需要将窗口消息适时派发到相应控件。下面以一个图来规划窗口消息的流向。

Abstract Widget

在这个图上我们可以看到除了我们的控件体系以外还需要实现几个核心模块来驱动控件。他们分别是:消息驱动、消息过滤、消息转换。消息驱动通过某种方法截获窗口消息(图上使用thunk),然后将窗口消息交给过滤器进行过滤(因为模拟控件不是所有窗口消息都感兴趣),消息过滤出控件感兴趣的消息交给消息转换器,其他消息交还给窗口的原有窗口过程进行处理(此处要注意的是消息过滤后控件感兴趣的消息不会再回到原窗口过程)。消息转换器将窗口消息转换为控件消息,之所以要进行转换是因为控件体系可能支持的消息系统会有别于窗口消息,也可能需要进行坐标映射等。

图上还能看到,我们的控件是能够递归嵌套的。每个窗口对应一个根控件,所有的控件都是在这个根组件之中的。为了要能够使用窗口的整个客户区,那么根组件所处区域就是窗口的整个客户区。

现在我们要开始进行设计了,设计过程中将引入代码,代码将随着设计的演化进行演化,最终形成我们这个简单且可扩展的抽象模拟控件核心。

作者: Evil.Ghost 发表于 2011-04-03 13:53 原文链接

评论: 0 查看评论 发表评论


最新新闻:
· 苹果iPad 2通过3C认证 最晚5月国内上市(2011-04-10 09:18)
· 盲目依赖iPhone等工具导航 英国驴友迷路多(2011-04-10 09:14)
· 趣谈:想担任CEO的话,最好是去苹果工作,其次是微软,再才是Google(2011-04-10 08:26)
· 腾讯将建立新数据中心,规模为苹果的两倍(2011-04-10 08:25)
· 轻量化的微型博客Tumblr(2011-04-10 08:03)

编辑推荐:非战之罪,从永中Office谈起

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

posted on 2011-04-03 13:53 EvilGhost 阅读(509) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔档案(12)

文章档案(1)

最新随笔

搜索

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜