佚名

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
 

       今天主要查看HWND_DESKTOP相关的一些内容。

1.         HWND_DESKTOP的创建:MiniGUIMain其实是MINIGUI的一个宏,参见Minigui.h1171行,如下所示:

 

由此可见,其实Minigui程序的真正入口为main_entry函数,在这个函数中首先调用了InitGUI函数,这个函数定义在Init.c中的353行,这个函数的作用是做MiniGUI的一些初始化操作,具体操作的内容和意义现在还不甚了解,现在只知道其中一步是初始化HWND_DESKTOP,“桌面”句柄便是自此而来。

2.         HWND_DESKTOP存在的意义:类似于一个工作流引擎/状态机。HWND_DESKTOP初始化的代码参见Desktop-comm.c20行,如下所示:


由这个初始化函数可以大概看出几点:

a)         HWND_DESKTOP的创建其实和我们所创建的window差不多,也有自己的消息处理函数和其它参数;

b)        HWND_DESKTOP有自己的消息队列(至少),至于这个消息队列是属于他独自享用,还是和整个MiniGUI程序共用,现在还不能确定;

c)        通过跟踪其消息处理函数,暂时了解到HWND_DESKTOP功用如下:

                         i.              负责消息的转发。例如MSG_CHAR,就是通过HWND_DESKTOP转发给当前活动窗口的。ps:由此来看的话,是否MiniGUI程序只有一个消息队列,即HWND_DESKTOP的消息队列,所有消息均递交给HWND_DESKTOP,然后再由HWND_DESKTOP进行分发?现在还不确定,有待考证。

                       ii.              对于每个Window,均含有一个寄宿链表和宿主句柄,所有寄宿于当前Window的窗体句柄均会以链表节点的形式被记录下来,而这个链表的维护既是由HWND_DESKTOP来负责的;

                      iii.              有一个名为__mg_active_mainwnd的句柄,其中记录了当前活动窗体,关于当前活动窗体的访问和设置,其实都可以归结为__mg_active_mainwnd的操作,例如GetActiveWindow函数,就是发送了MSG_GETACTIVEMAINHWND_DESKTOP,然后由HWND_DESKTOP__mg_active_mainwnd返回,当然了,__mg_active_mainwnd的维护操作也是由__mg_active_mainwnd来进行。

posted on 2008-01-15 18:14  坐标  阅读(831)  评论(0编辑  收藏  举报