"易语言.尘土"界面库2.0版源代码分析(2):创建窗口(CreateWindow)
作者:liigo
原文链接:http://blog.csdn.net/liigo/archive/2009/06/28/4304295.aspx
转载请注明出处:http://blog.csdn.net/liigo
我们都知道,在Windows操作系统下,几乎所有的窗口和窗口组件都是由API函数CreateWindow/CreateWindowEx创建出来的。所以我(liigo)拿到“易语言.尘土”界面库2.0版源代码之后,二话不说,迫不及待的在易语言中全文搜索“CreateWindow”(编辑->整体搜寻,快捷键: Alt+E+E)。共得到两个搜索结果:一个是对CreateWindowExA函数的DLL声明,一个是对它的调用(在易语言类方法“_窗口基类._创建()”中)。下面我的视线当然聚焦于“_窗口基类._创建()”:
这个函数,“_窗口基类._创建()”,就是“易语言.尘土”界面库源头,如长江之水,源于唐古拉山脉之沱沱河,涓涓溪流终汇成大河。以此为突破口,寻根问结,或许可以一览类库之骨架。
通过全文搜索“_窗口基类._创建”,发现调用它的地方有三处:“_窗口.创建”,“_组件基类._创建组件”,“_多文档窗口.创建”。“_组件基类”是所有组件的基类,也就是说,所有组件都是通过“_组件基类._创建组件”创建出来的,最终还是归结于“_窗口基类._创建”。所以,说“_窗口基类._创建”是整个类库整体机制的基石,应该是不会错的。
先大致浏览一下上面的代码吧,哦,以“CreateWindowExA”为核心,前面是“__监控窗口创建”,后面是卸载全局钩子(Hook)。直观推测的话,这个钩子应该是在“__监控窗口创建”中创建的吧?从函数命名来看,其功能相当明确,就是“监控窗口创建”(中文编程的优势在这里体现出来了,不需要多余的注释),那它内部具体做了些什么工作呢?这些工作是否跟窗口消息(Windows Message)有关呢?
我一上来就找“CreateWindow”,但找到了创建窗口并不是最终目标,我(liigo)其实是想通过“CreateWindow”找到窗口的消息处理函数(WNDPROC,WndProc),进而得窥整个类库的消息处理机制。那么,窗口的消息处理函数(WndProc)在哪儿呢?且看下文分解。