一、窗口结构分析
窗口数据结构,有一个链指针,保存所属进程。
基本算法分析:
1、遍历同级窗口集,切换进程,切换线程,置同级窗口为当前活动窗口。
2、遍历当前活动窗口的子窗口,包装消息结构体Msg,放入线程消息队列。
3、线程GetMessage取消息,分发给对应窗口结构体的CallBack函数。里面可能会回调父窗口的消息过程函数。
关于CToolBar的消息总是发送第一个父窗口的原因,在comctl32.dll中ToolBar代码段中,里面用一个全局变量保存父窗口句柄,在消息函数中,SendMessage发送给该变量窗口。
SetParent对其窗口消息的处理没有必然的关系,因为父窗口、子窗口的消息处理过程是不同的。
二、构建窗体对象集
1、在线程空间,可能有一个全局链保存窗体,用CreateWindow加入到窗口集。
2、遍历同级窗口的判断标准:
依据用户点击鼠标的坐标可以知道用户在哪个窗体区域内点击了鼠标。【2】
三、事件模式分析
1、基本模式