IE 5.5浏览器源码分析

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值