我们以一个具体窗口(360Safe Window)的创建为入口,建立起程序的整个框架。然后逐步深入,对其中的细节以及duilib中各个类在任务的执行过程中负责的任务进行分析。分析以问题作为导向,随着层次的不断深入,问题也将越来越深入核心,关注细节。最后进行总结,得出整个duilib的框架结构,以及每个类的功能和使用方式。
【问题1】360Safe 窗口是是如何运行起来的?
Window窗口运行的四部曲:设计窗口、注册窗口、创建窗口、显示窗口。对应到本例中:
程序从WinMain开始执行,到pFrame->Create(NULL, _T("360安全卫士"), UI_WNDSTYLE_FRAME, 0L, 0, 0, 800, 572)时进入CWindowWnd类。调用内部的RegisterSuperclass 函数对窗口进行设计和注册,再调用系统函数::CreateWindowEx创建窗口。而后Create函数返回,调用::ShowWindow(*pFrame, SW_SHOW)来显示窗口。
【问题2】360Safe的消息处理机制是如何实现的?
Windows窗口的一系列响应事件都是由消息触发的,当消息产生时系统将会把消息发往目标窗口的消息队列中,窗口程序则安排了一个死循环来不断地从自己的消息队列中接收和预处理消息(Window Massage),然后操作系统调用事先与窗口约定的消息处理函数来处理消息。
具体到本例中,360Safe窗口程序调用了CPaintManagerUI::MessageLoop()来实现消息循环体系,函数的代码如下:

本文从360Safe窗口的运行、消息处理机制、窗口绘制与组件显示、控件事件响应四个方面,深入剖析duilib框架。通过分析窗口的创建、消息循环、控件树的构建及事件响应的实现,揭示duilib的工作原理。

1912

被折叠的 条评论
为什么被折叠?



