MFC中WebBrowser.Navigate方法如何调用本地的.htm文件?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/to_Baidu/article/details/70787825

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

     最近开发MFC程序,需要使用WebBrowser控件来调用百度地图API,前端代码写在htm文件中,为了方便程序正确移植,WebBrowser.Navigate方法中的URL参数需要设置相对路径,但是WebBrowser控件不好设置相对路径,因此需要曲线救国,自己拼接绝对路径。

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


背景

MFC使用WebBrowser控件调用百度地图API案例!

下载地址: http://download.csdn.net/detail/to_baidu/9825890

下载包中的《基于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地址不正确的问题了。












猜你喜欢

转载自blog.csdn.net/to_Baidu/article/details/70787825