解析Windows CE下瀏覽器源碼

來源:互聯網
上載者:User

有很多網友來信都問關於開發瀏覽器的問題。能夠理解,現在大多數基於CE的產品都具有上網瀏覽的功能。CE也為此提供了兩種IE瀏覽器的源碼。一種IESAMPLE、另一種IESIMPLE。他們的存放路徑在%_WINCEROOT%\Public\IE\Oak下。區別在於IESAMPLE就是CE下IE的標準版本的源碼,有工具列、狀態列、地址欄,還有Internet選項、收藏夾等等。和PC Windows的IE幾乎一樣。而IESIMPLE是mini版本,只有基本的IWebBrowser控制項,使用者介面上只有全螢幕顯示的網頁,預設用快速鍵來操作。我早先對IESIMPLE的源碼進行了分析,因為我對OLE知之甚少,所以在分析過程中並不能100%的掌握源碼,好在這並不影響我對IESIMPLE整體的分析。相信網友看過了這兩篇文章(還有一篇關於配置)後如果要基於IESIMPLE的源碼開發自己的瀏覽器就容易多了。之所以選擇IESIMPLE,是因為它的源碼相對要精簡的多,只有實現主要功能的代碼,沒有收藏夾一類的代碼,在此基礎上加入我們希望的功能和介面要容易些。再有IESIMPLE和IESAMPLE的主要代碼基本相同。下面的圖展示了IESIMPLE的基本流程,關於IE的配置將在下一篇文章中講解。

IESIMPLE只有兩個.h檔案和一個.cpp檔案。mainwnd.h中聲明了類CMainWnd,在類CMainWnd的眾多成員變數中,_hWnd儲存CMainWnd視窗控制代碼,_pBrowser儲存介面IWebBrowser2的指標,_hWndBrowser儲存Browser視窗控制代碼,_rcWnd儲存CMainWnd的視窗尺寸。這幾個變數總在代碼中出現,故在此提出。下面講解上面的圖中提到的每個函數的功能:

WinMain函數先到註冊表的特定位置中找到建立CMainWnd視窗的線程的棧的大小。如果這個值適當,那麼在建立線程的時候就採用這個棧的值。接著註冊CMainWnd視窗類別,之後調用PeekMessage建立訊息佇列,接著調用HandleNewWindows2函數,在這個函數執行結束後進入while迴圈,迴圈體的內容是等待函數,因為每個線程在結束前都使事件對象ghExitEvent處於有訊號狀態,所以當所有建立的線程都結束時,主線程也就退出while迴圈後結束。對於HandleNewWindows2函數,在整個IESIMPLE運行過程中,它至少被執行一次。每當在新視窗中開啟網頁時,它就被執行一次。HandleNewWindow2函數先建立一個CMainWnd對象,然後遞增記錄線程數的全域變數,之後建立一個新的線程,線程函數為NewWindow。對於NewWindow函數,它先初始化COM庫,然後調用CMainWnd的Create成員函數。之後調用GetMessage函數收集訊息並處理。當視窗退出時作結束處理工作。對於Create成員函數,它調用CreateWindowEx函數建立視窗和進度條視窗,之後調用CreateBrowser函數建立瀏覽器視窗,最後調用HandleCommand( ID_FULLSCREEN, 0 )全螢幕顯示網頁內容。對於CreateBrowser函數,它首先調用GetProxyOption函數得到Internet串連代理選項,之後調用CoCreateInstance函數建立WebBrowser對象,之後調用SetClientSit設定WebBrowser的用戶端,接著啟用IWebBrowser控制項,之後儲存介面IWebBrowser2的指標和儲存參與WebBrowser本地啟用的視窗控制代碼。

其它的函數HandleCommand處理使用者命令,這些命令如向前、向後、首頁、重新整理、停止等。對命令的執行實際上是調用IWebBrowser2的介面函數。MainWndProc函數是CMainWnd的訊息處理函數。OpenURLDlgProc函數是"開啟"對話方塊的訊息處理函數。還有兩個函數在下一篇文章中講解。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.