-------------------------------------------------------------------------------------------------------------------------------------------
最近开发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地址不正确的问题了。