控制 WebBrowser 控制元件的外觀和行為

鄧學彬發表於2011-03-29

在 CSDN 上經常看到以下兩個問題:
1、在 MFC 應用程式中,如果建立了一個 WebBrowser 控制元件(包括 CHtmlView 在內),如何可以把該控制元件的三維邊框禁止掉?
2、在 MFC 應用程式中,如果建立了一個 WebBrowser 控制元件(包括 CHtmlView 在內),如何可以把該控制元件的滾動條禁止掉?

其實,這兩個問題的解決辦法是一樣的。待老漢從頭道來。

從 Internet Explorer 4.0 開始,WebBrowser 控制元件的容器可以通過 IDocHostUIHandler 介面對 WebBrowser 控制元件的外觀和某些行為進行定製。上述的兩個問題,均可以通過實現該介面來達到我們的目的。但是,由於程式設計師自己實現 WebBrowser 控制元件的容器是一件很痛苦的事情,而且 MFC 中的 CHtmlView 和在 IDE 中插入 WebBrowser 控制元件後生成的包裝類已經具有比較完整的功能封裝,故罕有人願意從頭再開發自己的容器。不過令人遺憾的是,隨 Visual C++ 6.0 釋出的 MFC 4.2 版本中並沒有對 IDocHostUIHandler 介面進行支援(順便說一句,從 Visual C++ 7.0 開始,MFC 已經對該介面進行了支援),所以這些問題在 Visual C++ 6.0 中比較突出。

為了解決此問題,老漢特意寫了一個類來完成此工作(程式碼見下)。該類名為 CWebUIController,使用很簡單,以對話方塊上包含了 WebBrowser 控制元件為例:

假設對話方塊上的 WebBrowser 控制元件對應的變數名為 m_webNavigator,則需要以下步驟:

1、向對話方塊類中新增 CWebUIController m_webUICtrl;

2、在對話方塊的 OnInitDialog 函式中加入以下程式碼:

 

3、在對話方塊的 OnDestroy 函式中加入以下程式碼:

m_webADCtrl->SetWebBrowser( NULL );

 

也可以在執行時呼叫 Enable3DBorder() 或者 EnableScrollBar(),呼叫完成後請呼叫 WebBrowser 控制元件的重新整理功能。

該類實現於一個獨立的標頭檔案 WebUIController.h 中,其完整原始碼如下;從原始碼中不難看出,還可以很容易的擴充此類的功能,例如控制關聯選單的顯示等等。


以上方式實現後在開啟web頁後如果設定未起效,這時你應該呼叫web控制元件的重新整理功能重新整理一下頁面即可!還有一點開啟頁面應該放在設定之後進行!

相關文章