隨著Inte.net的持續升溫,Web類應用軟件得到廣泛應用,有越來越多的軟件具有了Web特性,我們的很多應用開發往往也需要具有Web瀏覽功能。以下就讓我們討論一下怎樣實現一個具有基本瀏覽功能的Web瀏覽器。
在Visual C++5.0的Components and Controls Gallery中有一個Web Browser控件,利用這個控件,我們就可以實現一個小型的Web瀏覽器。通過如下方法把它加入到一個項目中。首先創建一個項目(可以是一個SDI
Application),然后打開Components and Controls Gallery對話框,在Components and
Controls Gallery對話框中選擇Registered ActiveX Control。在控件列表中選擇插入Microsoft
Web Browser Control,插入這個控件將在項目中自動加入CWebBrowser類,這個類將實現IWebBrowser接口的各個功能。IWebBrowser的幾個重要函數說明如下:
插入Web Browser控件后,我們先在視圖類(CMyBrowserView)中加入一個CWebBrowser類型的成員變量m—browserControl,然后在視圖類創建時,生成Web
Browser控件并初始化它。具體實現如下:
int CMyBrowserView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{ if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
m—browserControl.Create (″Browser″, WS—VISIBLE, CRect
(0,0,150,150), this, ID—BROWSER—CONTROL);
return 0;}
在視圖(View)改變大小時,同時改變Web Browser控件大小。
void CMyBrowserView::OnSize(UINT nType, int cx, int cy)
{ CView::OnSize(nType, cx, cy);
if (nType != SIZE—MINIMIZED)
{ try {
m—browserControl.SetWidth (cx);
m—browserControl.SetHeight (cy);}
catch (COleDispatchException* r)
{ CString str;
str.Format (″Error <%d> in <%s>: <%s>″, r->m—wCode,
r->m—strSource, r->m—strDescription);
::AfxMessageBox (str);
r->Delete ();
} catch (COleException* pE)
{::AfxMessageBox (″IDispatch Error with Browser Control.\n″);
pE->Delete (); }
m—browserControl.UpdateWindow (); } }
至此,我們已經創建了Web Browser控件,現在,我們可以來實現具體的瀏覽工作了。在工具條中加入前進,后退,刷新,打開,停止的按鈕。并在視圖類(CMyBrowserView)中加入它們的命令處理函數。
void CMyBrowserView::FileOpen()
{ CURlDialog dlg;//顯示一個對話框,供填入URL地址
if (IDOK == dlg.DoModal ())
{ try {
m—browserControl.Navigate (dlg.m—URL,NULL,NULL,NULL,NULL);}
catch (COleDispatchException* r)
{ .....
r->Delete ();
} catch (COleException* pE)
{::AfxMessageBox (″IDispatch Error with Browser Control.\n″); pE->Delete
();} } }
//刷新
void CMyBrowserView::OnRefresh()
{ try { COleVariant level;
level = (short)3;// Means Refresh Completely.
m—browserControl.Refresh2 (level);
} catch (COleDispatchException* r)
{ .....
r->Delete ();
} catch (COleException* pE)
{::AfxMessageBox (″IDispatch Error with Browser Control.\n″); pE->Delete
(); } }
//搜索
void CMyBrowserView::OnWebSearch()
{ m—browserControl.GoSearch();}
//返回上一頁
void CMyBrowserView::OnWebBack()
{ m—browserControl.GoBack(); }
//跳到下一頁
void CMyBrowserView::OnWebForward()
{ m—browserControl.GoForward(); }
至此,我們已完成一個Web瀏覽器的框架,通過調用CWebBrowser類的其他成員函數,我們還可以實現其他的一些Web瀏覽功能。