您的位置:首页 > 运维架构 > 网站架构

【架构】Windows事件机制合理分析

2014-02-24 11:09 92 查看
一、窗口结构分析

              


         窗口数据结构,有一个链指针,保存所属进程。

         基本算法分析:

         1、遍历同级窗口集,切换进程,切换线程,置同级窗口为当前活动窗口。

         2、遍历当前活动窗口的子窗口,包装消息结构体Msg,放入线程消息队列。

         3、线程GetMessage取消息,分发给对应窗口结构体的CallBack函数。里面可能会回调父窗口的消息过程函数。

         关于CToolBar的消息总是发送第一个父窗口的原因,在comctl32.dll中ToolBar代码段中,里面用一个全局变量保存父窗口句柄,在消息函数中,SendMessage发送给该变量窗口。

         SetParent对其窗口消息的处理没有必然的关系,因为父窗口、子窗口的消息处理过程是不同的。

二、构建窗体对象集

        1、在线程空间,可能有一个全局链保存窗体,用CreateWindow加入到窗口集。

        2、遍历同级窗口的判断标准:

              依据用户点击鼠标的坐标可以知道用户在哪个窗体区域内点击了鼠标。【2】

三、事件模式分析

         1、基本模式

               


                关于事件源的概念,可参考JSE。

         2、解耦方式

             方法1——固定模式

              对个不同的GUI事件,采用类多态模式。要点如下:

              a1、开辟全局GUI对象链,保存new出来的GUI对象和窗体句柄

              a2、基类用虚函数编写各种事件函数

              a3、根据窗体句柄、事件,跳转到GUI类的子类的事件函数

              类似的处理方式有VB、Delphi VCL

             方法2——委托模式(采用观察者模式)

              要点如下:

              a1、同上

              a2、开辟事件对象链,由子类对象把处理函数加入到事件对象链

              a3、根据窗体句柄、事件,分别调用事件链中的处理函数

               类似的处理方式有Java、QT、MFC

参考:1、Windows线程、界面、消息剖析

2、细说UI线程和Windows消息队列

3、windows的消息队列与消息循环

4、Win32 API创建Rebar一起ToolBar方法

5、Java模拟AWT事件监听器(Observer模式)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: