作者: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消息之外,在类库内部,也利用这套事件处理机制做了许多更深入的消息处理,且留待下文分解。
分享到:
相关推荐
【易语言尘土界面库2.0版源代码分析】 易语言尘土界面库2.0版是一款由易语言论坛知名开发者gbb113创作的面向对象的高效实用窗口组件库,专为易语言(E语言)开发设计。这款模块提供了一种不同于易语言核心库的窗口...
采用易语言开发,完全不依赖易语言核心库的一套GUI图形界面库。 借助斩月工具可以使得您的图形界面程序不依赖易语言核心支持库运行。 本界面库提供Windows通用组件的封装 以及一些扩展组件。 您可以继承...
易语言eSkin.fne支持库中文名为易语言皮肤支持库,本易语言支持库是在Liigo换肤支持库基础上升级而成,封装的是VclSkin控件。易语言eSkin.fne支持库为一般支持库,需要易语言系统3.0版本的支持,需要易语言系统核心...
总的来说,易语言的Web浏览器2.0支持库为易语言开发者提供了一个强大的工具,使得他们可以轻松地在应用程序中集成网络浏览功能,提升软件的实用性和多样性。通过深入理解和熟练运用这个支持库,开发者可以创建出更多...
易语言xplib.fne支持库中文为易语言XP风格界面库,本易语言支持库实现XP风格界面,请注意本支持库不能在Windows 95系统下使用。易语言xplib.fne支持库为一般支持库,需要易语言系统3.7版本的支持,需要易语言系统...
易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar 易语言模块加载进度条v2.0.rar
易语言皮肤支持库2.0版是一款专为易语言(EasyLanguage)开发的扩展库,旨在为易语言程序提供丰富的界面美化和个性化功能。这款库的发布,为开发者提供了更简单、直观的方式来改变应用程序的外观,使软件界面更加...
易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀数独2.0易语言源码.rar 易语言源码爱杀...
在"易语言源码易语言ZyUI界面2.0源码.rar"这个压缩包中,包含的是ZyUI界面库的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 易语言源码...
《易语言WEB浏览器2.0支持库:深入解析与应用》 易语言,作为一款国内自主开发的编程语言,以其简单易学的特性深受初学者和开发者喜爱。在易语言的生态系统中,支持库扮演着至关重要的角色,它们扩展了语言的功能,...
描述中的内容与标题一致,强调了这个压缩包包含400个易语言的源代码实例,这对于想要深入学习和实践易语言的人来说,是一个宝贵的资料库。 在标签中提到了"易语言",这进一步确认了文件内容的焦点是关于易语言的...
易语言源码易语言心雨在线更新系统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 ...