最近收到很多关于询问浏览器开发的邮件,基本上分红两类问题,要么询问蓝蜂浏览器的框构的,要么就是询问IE相关接口的。全部来信我都抽空回复了,这个周末又收到一个关于浏览器开发的邮件,我干脆就在这里分开解释一下,以求能帮助到更多的人。邮件内容如下:
我是那个********的(因为可能会猜到身份,未经发邮件者赞成,帮本人先省略),想问您些问题,也不知道您有没空,大体是这样的,
1:你那个浏览器是基于什么作的?MDI仍是DIALOG?每一个浏览页面是一个视图仍是一个动态生成的含有iwebbrowser的对话框?
2:那个控制各个浏览器页面的标签是额外作的一些窗口吗?仍是怎样?
3:那个输网址的相似于combobox的地方时彻底模拟写了个类的仍是基于combobox继承来的?
4:可否简单的说下chtmlview和iwebbrowser的差距吗?
5:可否说下其余一些浏览器都是采用什么作的,mdi仍是dialog?我用spy++看了半天,再结合一些功能效果,感受至少有些浏览器是MDI作的,有些感受起来时基于作的。。。。对话框下若是实现浏览器对于使用chtmlview是否有很大限制?
一口气问了狠多问题,很很差意思啊,实在是看了不少浏览器后越看越迷茫,对于这个浏览器的架构是晕乎晕乎的,因此硬着头皮来打扰您。
也有点缘由是,我分析了GreenBrowser的源代码,他是基于MDI的,我以前关于MDI作界面很不熟悉,而我又想作的是GDI自定义的界面的,因此比较费劲。才搞的很晕,手忙搅乱的。先谢过,打扰了哈,要是忙的话就挑几个简单的说下也行,呵呵
蓝蜂浏览器不是MDI,也不是SDI,更不是使用Dialog,而是本身结合这三者的优势而“创造”出来的一种框架,主窗口是直接基于CWnd的(也能够理解成Dialog,由于行为上是一致的),每个标签对应于一个应用(或网站),而这个应用是SDI的形式的,你从打开的页面上点击连接所弹出的新窗口与原窗口都在一个标签内,也都共享一个文档对象。但从整个系统看,又是MDI框架的,由于每个标签是对应一个文档对象,而文档的类型也有可能不一样。若是你在地址栏中输入一个.cpp文件名,你会发现变成了一个编辑器,目前已支持不少种应用,但基于某些缘由,暂没有公开除了浏览器以外的功能。
你问的“那个控制各个浏览器页面的标签”,我不太清楚是指标签仍是每个标签之下的那个缩略图控制,我都把相关的内容尽量详细描述吧。标签与标题区是额外作的一个窗口(你用Spy++就能够看到),你会发现标签是绘制出来的。每个标签之下的那些缩略图控制是放置在一个ToolBar中,但其中的缩略图也是绘制出来的。本人使用一些商业控件库,但通过了本人的深度修改(商业控件库在控制方面没有这么灵活)。
那个输网址的相似于combobox的地方是之前是继承于CCombobox的,但也正好是这个周末,本人进行了修改,如今继承于RichEdit20W,而地址栏右边的那个小控制是本身贴的图片,鼠标的消息响应须要本身处理。在如今的版本中,地址栏移到了标题的中间,这是由于不少人反映地址栏放在左上角感受过小太挤了,因而本人参考Pivot把地址栏移到了中间。固然对于通常的框架而言,在标题栏上建立一个Edit是比较困难的,这个之后方便的话再详细讨论了。
关于chtmlview和iwebbrowser的差距,其实你能够理解成chtmlview是iwebbrowser的一个包装,chtmlview只是为了让普通开发者更容易更方便地使用iwebbrowser,为了得到更强的灵活性,你能够直接使用iwebbrowser,但我仍是建议你使用chtmlview,由于简单,并且若是你须要更强的灵活性,你也能够深度使用,这不过是一个包装而已,你彻底能够更深刻地使用它。
浏览器是采用什么框架,这个我还真的没有怎么研究过,不过凭使用上的感受,正象你所说,很象是MDI的。事实上,是MDI仍是SDI并不重要,这些都只是为了更方便使用而抽象出来的一种模型,说白了也只是窗口和一些数据而已,没必要局限于此,具体怎么用这彻底得看你本身的设计了。
不知道这样的回答是否可让你知道你所须要知道的,若是还有问题能够继续沟通。