1. 程式人生 > >MFC中WebBrowser.Navigate方法如何呼叫本地的.htm檔案?

MFC中WebBrowser.Navigate方法如何呼叫本地的.htm檔案?

-------------------------------------------------------------------------------------------------------------------------------------------

     最近開發MFC程式,需要使用WebBrowser控制元件來呼叫百度地圖API,前端程式碼寫在htm檔案中,為了方便程式正確移植,WebBrowser.Navigate方法中的URL引數需要設定相對路徑,但是WebBrowser控制元件不好設定相對路徑,因此需要曲線救國,自己拼接絕對路徑。

-------------------------------------------------------------------------------------------------------------------------------------------


背景

MFC使用WebBrowser控制元件呼叫百度地圖API案例!

下載包中的《基於MFC與第三方類CWebPage的百度地圖API開發範例.pdf》教程會教你如何在WebBrowser控制元件中連結頁面並進行百度地圖的開發。

下載包WebBrowser.Navigate方法使用的是絕對路徑:

//設定瀏覽器控制元件跳轉的地址,顯示自己定義的htm檔案
m_myweb.Navigate("file:///C:/Users/GO/Documents/Visual Studio 2010/Projects/GeoDemo/GeoDemo/geodemo.htm",NULL,NULL,NULL,NULL);

問題及分析

然而,案例有個小問題:htm檔案的URL是通過絕對地址訪問的,這種方式在程式移植(譬如拷貝程式到別人的電腦)時就會出現問題:“無法顯示此頁”,因為Web地址不對,地址是絕對路徑,寫死了。


在網上百度一通後,想設定相對路徑,但是都說MFC的WebBrowser控制元件不好設定相對路徑。因此只有自己通過獲取程式所在當前目錄,然後拼接成全路徑了。

解決方案

step1:用GetCurrentDirectory()函式獲取當前目錄。

step2:將獲取到的當前目錄與您要展示的htm檔案拼接成全路徑。

step3:呼叫WebBrowser控制元件的Navigate()函式進行展示。

因此,可將上面的那段程式碼用下面的的程式碼進行替換即可。

CString strURL;//htm檔案的全路徑
char chCurtPath[MAX_PATH];//當前目錄

GetCurrentDirectory(MAX_PATH,chCurtPath);//獲取當前目錄,並存在chCurtPath中
strURL = "file:///"+ (CString)chCurtPath + "/geodemo.htm" ;//將chCurtDrct變數強制轉化成CString,並拼接成全路徑
m_myweb.Navigate(strURL, NULL, NULL, NULL, NULL);

大功告成,此事程式在不同電腦之間移植時就不會出現Web地址不正確的問題了。