`
dengbaoleng
  • 浏览: 1131435 次
文章分类
社区版块
存档分类
最新评论

易语言.尘土"界面库2.0版源代码分析(5):Windows消息路由机制(上

 
阅读更多

作者:liigo

原文链接:http://blog.csdn.net/liigo/archive/2010/10/28/5972548.aspx

转载请注明出处:http://blog.csdn.net/liigo

liigo: "易语言.尘土"界面库2.0版源代码分析系列

  很高兴看到"易语言.尘土"界面库这个原创性易语言模块近期又持续升级,版本到2.1了。看来我这个源代码分析系列文章还得继续跟进。这最新一篇,重点关注该界面库内部的Windows消息路由机制。Windows消息(如WM_PAINT)由Windows操作系统产生,发往相应窗口的消息处理函数(WndProc)。依据前面的分析,我们已经知道,消息在模块内部被EDust_WndProc()派发到对应窗口对象的“消息过程()”方法(继承自“_窗口基类”)。接下来Windows消息是如何被处理的呢?本文将揭开谜底。

  我们就从“_窗口基类.消息过程()”入手,看看里面有什么代码:

_窗口基类.消息过程()

  要理解以上代码,最好先搞清楚“事件哈希表”这个类成员变量的作用。从字面上看,它应该是一个哈希表——“键-值”的集合,其“键”是消息值,其“值”是什么呢?是对应该消息的处理子程序吗?按 Ctrl+F 搜索“事件哈希表”,找到了“_窗口基类.挂接事件()”这个类成员方法,代码如下:

_窗口基类.挂接事件()

  从以上代码我们分析得知,“事件哈希表”的“键”为事件类型(Windows消息值),“值”为一个链表——事件处理子程序的集合。很显然,事件处理子程序是由消息处理者提供的,将被类库内部自动调用。那么,事件处理子程序是如何被调用的呢?或者说,Windows消息是如何被处理的呢?让我们的视线回到“_窗口基类.消息过程()”里面调用的“事件链表_处理()”子程序,推测它的功能应该是:循环遍历链表,依次调用对应的事件处理子程序,直到遍历完毕或某事件处理子程序要求结束处理。事件处理子程序被调用,就意味着该消息值(事件)被处理了。事实上后挂接的处理子程序先被调用,即刚才所说的循环遍历链表其实应该是倒序遍历,这个细节今后可能还会涉及,暂时先不贴代码。

  好了,是时候总结一下"易语言.尘土"界面库2.0的事件处理机制(即Windows消息处理机制)了:1、通过“_窗口基类.挂接事件()”把欲处理的消息值及其处理子程序记录下来,记录到类成员变量“事件哈希表”中;2、“_窗口基类.消息过程()”通过查询“事件哈希表”,获取与当前消息值挂接到的事件处理子程序,并调用之。补充一点,可以多次调用“_窗口基类.挂接事件()”把多个事件处理子程序挂接到同一个Windows消息值上,届时“后”挂接的事件处理子程序会“先”被调用,并且后挂接的事件处理子程序可以决定是否调用先前挂接的事件处理子程序。

  以上就是"易语言.尘土"界面库2.0的基本的事件处理机制,也是其消息路由机制的基础部分。除了类库的最终用户可以使用这套事件处理机制处理Windows消息之外,在类库内部,也利用这套事件处理机制做了许多更深入的消息处理,且留待下文分解。

分享到:
评论

相关推荐

    易语言.尘土 界面库

    采用易语言开发,完全不依赖易语言核心库的一套GUI图形界面库。 借助斩月工具可以使得您的图形界面程序不依赖易语言核心支持库运行。 本界面库提供Windows通用组件的封装 以及一些扩展组件。 您可以继承...

    易语言皮肤支持库2.0#0版(第三方)

    易语言eSkin.fne支持库中文名为易语言皮肤支持库,本易语言支持库是在Liigo换肤支持库基础上升级而成,封装的是VclSkin控件。易语言eSkin.fne支持库为一般支持库,需要易语言系统3.0版本的支持,需要易语言系统核心...

    易语言 支持库 web浏览器2.0 下载

    易语言 支持库 web浏览器2.0 下载

    XP风格界面库2.0#0版

    易语言xplib.fne支持库中文为易语言XP风格界面库,本易语言支持库实现XP风格界面,请注意本支持库不能在Windows 95系统下使用。易语言xplib.fne支持库为一般支持库,需要易语言系统3.7版本的支持,需要易语言系统...

    新手易语言教程白皮书

    这个是易语言教程,供新手使用.易语言.尘土界面库2.0 版 白皮书 作者:龚辟愚 交流

    易语言模块加载进度条v2.0.rar

    易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar

    易语言源码爱杀数独2.0易语言源码.rar

    易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀...

    易语言皮肤支持库2.0版

    易语言皮肤支持库2.0版 易语言皮肤支持库2.0版.rar 易语言皮肤支持库2.0版.rar

    易语言源码易语言闪电脚本引擎模块2.0版源码.rar

    易语言源码易语言闪电脚本引擎模块2.0版源码.rar 易语言源码易语言闪电脚本引擎模块2.0版源码.rar 易语言源码易语言闪电脚本引擎模块2.0版源码.rar 易语言源码易语言闪电脚本引擎模块2.0版源码.rar 易语言源码...

    易语言源码易语言淘宝助手2.0源码.rar

    易语言源码易语言淘宝助手2.0源码.rar 易语言源码易语言淘宝助手2.0源码.rar 易语言源码易语言淘宝助手2.0源码.rar 易语言源码易语言淘宝助手2.0源码.rar 易语言源码易语言淘宝助手2.0源码.rar 易语言源码...

    易语言源码易语言心雨在线更新系统2.0版源码.rar

    易语言源码易语言心雨在线更新系统2.0版源码.rar 易语言源码易语言心雨在线更新系统2.0版源码.rar 易语言源码易语言心雨在线更新系统2.0版源码.rar 易语言源码易语言心雨在线更新系统2.0版源码.rar 易语言源码...

    易语言源码易语言ZyUI界面2.0源码.rar

    易语言源码易语言ZyUI界面2.0源码.rar

    易语言源码易语言邮箱宝贝2.0源码.rar

    易语言源码易语言邮箱宝贝2.0源码.rar 易语言源码易语言邮箱宝贝2.0源码.rar 易语言源码易语言邮箱宝贝2.0源码.rar 易语言源码易语言邮箱宝贝2.0源码.rar 易语言源码易语言邮箱宝贝2.0源码.rar 易语言源码...

    易语言模块内存读写模块2.0.rar

    易语言模块内存读写模块2.0.rar 易语言模块内存读写模块2.0.rar 易语言模块内存读写模块2.0.rar 易语言模块内存读写模块2.0.rar 易语言模块内存读写模块2.0.rar 易语言模块内存读写模块2.0.rar

    易语言源码易语言超级记事本2.0源码.rar

    易语言源码易语言超级记事本2.0源码.rar 易语言源码易语言超级记事本2.0源码.rar 易语言源码易语言超级记事本2.0源码.rar 易语言源码易语言超级记事本2.0源码.rar 易语言源码易语言超级记事本2.0源码.rar ...

    易语言源码易语言GDIPlus类2.0模块源码.rar

    易语言源码易语言GDIPlus类2.0模块源码.rar 易语言源码易语言GDIPlus类2.0模块源码.rar 易语言源码易语言GDIPlus类2.0模块源码.rar 易语言源码易语言GDIPlus类2.0模块源码.rar 易语言源码易语言GDIPlus类2.0模块...

    易语言源码易语言ebook阅读2.0源码.rar

    易语言源码易语言ebook阅读2.0源码.rar 易语言源码易语言ebook阅读2.0源码.rar 易语言源码易语言ebook阅读2.0源码.rar 易语言源码易语言ebook阅读2.0源码.rar 易语言源码易语言ebook阅读2.0源码.rar 易语言源码...

    易语言模块内存读写模块 2.0.rar

    易语言模块内存读写模块 2.0.rar 易语言模块内存读写模块 2.0.rar 易语言模块内存读写模块 2.0.rar 易语言模块内存读写模块 2.0.rar 易语言模块内存读写模块 2.0.rar 易语言模块内存读写模块 2.0.rar

Global site tag (gtag.js) - Google Analytics