html->解析(词法,句法分析)为dom tree ->解析为Render Tree->遍历渲染树绘制每一个节点,遍历一个显示一个。
窗口初始化
1.生成CDocument:IHTMLDocument2(:IHTMLDocument,定义了get_bgColor等虚函数,_pElemCurrent当前选择节点)
在CDocument::Init中创建默认site和root site( 创建CMarkupCMarkup负责搭建整个xml(html)树结构。
CMarkup::CreateElement根据一个TAG创建一个CElement。
CElement::InsertAdjacent连接各个CElement
CElement继承于CBase,CBase继承于IUnknown。所以每个CElement
都有QueryInterface接口,能给外部,例如像我这样微软之外的穷代码民工用。)
初始化格式缓冲InitFormatCache。
在 CDocument::InitNew中初始化ole控件.
在 CDocument::RunningToInPlace中准备view和window
在 CDocument::BroadcastNotify中遍历树广播通知。
2.通过CMarkup::CreateElement创建CMarkup的body节点,初始化节点和节点属性。
每一个节点都是一个CHtmTag类,类成员有节点名,节点属性,节点内容等。
通过CElement::InsertAdjacent连接root和body节点。
3.遍历显示body中的每个元素,比如图片,div,表格等。
nt4源码
HTML_start_element(在HTMLPresentation中),开始每个节点时回去调用对于的ole。
1. DCL_WinMain
系统版本判断,创建互斥体,处理命令行取得初始URL,
Vendor_SetPrefsDirectory,
RegisterUser(显示logo对话框,包含用户名),
根据命令行ProcessCommandLine初始化变量(比如nohome)。
InitPreferences,初始化gPrefs,比如默认URL为msn,是否载入图片。LoadPreferences载入注册表中的配置,如start page。
DetectAndFixAssociations修改htm格式打开方式。
SavePreferences保存配置。
IsEditHandlerRegistered(Check to see if there is an Edit verb handler registered for the .htm file class)
HTSPM_OS_PreloadAllSPM,
PREF_GetHomeSearchURL处理url的格式获取home和search的url。
InitApplication,创建bar,frame,doc,menu等各种类。
InitInstance创建ie窗口。InitMIMEModule添加MIME支持。ProcessInitOLEPigModule。
GTR_NewWindow。NewMwin。GDOC_NewWindow(Frame_CreateWindow,GDOC_CreateWindow(创建新的html窗口))。TW_LoadDocument,初始化主窗口。
x_DoLoadDocument,查找url缓存,Async_StartThread开启线程创建doc.
ApplicationMsgLoop开始消息循环.
2. 在GDOC_WndProc的窗口过程DCL_WinProc中处理各种命令,其中在GDOC_OnCommand会比较各种操作命令,比如ELE_RADIO,ELE_SUBMIT控件等。
RES_MENU_ITEM_HOME,RES_MENU_ITEM_FORWARD,RES_MENU_ITEM_BACK前进后退等操比如forward操作,根据index--,获取上个页面的MiniRequest,然后
调用TW_LoadDocument。
CAmbientDispatch::Invoke负责调用每个bho的事件处理函数。
COleObject::SetClientSite负责当bho调用SetSite时
COleObject::Advise负责当bho调用Advise注册事件时。
--写于2013-12-13