給瀏覽器愛好者的回信

  最近收到不少關於詢問瀏覽器開發的郵件,基本上分成兩類問題,要麼詢問藍蜂瀏覽器的框構的,要麼就是詢問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並不重要,這些都只是爲了更方便使用而抽象出來的一種模型,說白了也只是窗口和一些數據而已,不必侷限於此,具體怎麼用這完全得看你自己的設計了。
   不知道這樣的回答是否可以讓你知道你所需要知道的,如果還有問題可以繼續溝通。
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章