一个浏览器的程序 ,当前已经有一个界面是Webbrowser控件加载html页面。需要再添加一个Webbrowser控件,类似于左侧的简单导航 ,为什么我的添加以后无法显示 。
具体功能如图:
具体程序:/************************************************************************
* 创建Webbrowser控件
* ppUnkContainer 容器对象
* ppUnkControl webbrowser对象
************************************************************************/
LRESULT CEasyNaviView::CreateEnWebControl(IUnknown** ppUnkContainer, IUnknown** ppUnkControl)
{
ATLASSERT(::IsWindow(m_hWnd)); HRESULT hr;
CComPtr<IUnknown> spUnkContainer; // 保存容器对象
CComPtr<IUnknown> spUnkControl; // 保存webbrowser对象

hr = CMyAxHostWindow::_CreatorClass::CreateInstance(NULL, IID_IUnknown, (void**)&spUnkContainer);
if (SUCCEEDED(hr))
{
CComPtr<IAxWinHostWindow> pAxWindow; // 容器对象实现IAxWinHostWindow,用来取回IAxWinHostWindow
spUnkContainer->QueryInterface(IID_IAxWinHostWindow, (void**)&pAxWindow);

CComBSTR bstr ; // 临时字符串变量
bstr = L"Shell.Explorer" ; hr = pAxWindow->CreateControlEx( bstr, m_hWnd, NULL, &spUnkControl, IID_NULL, NULL);
}
if (ppUnkContainer != NULL)
{
if (SUCCEEDED(hr))
{
*ppUnkContainer = spUnkContainer.p;
spUnkContainer.p = NULL;
}
else
*ppUnkContainer = NULL;
}
if (ppUnkControl != NULL)
{
if (SUCCEEDED(hr))
{
*ppUnkControl = SUCCEEDED(hr) ? spUnkControl.p : NULL;
spUnkControl.p = NULL;
}
else
*ppUnkControl = NULL;
}
return hr;

}//void EnNavigate() ; 

void EnNavigate(LPCTSTR lpszURL)
{
if (m_spWebBrowser2)
{
CComVariant varURL (lpszURL) ;
CComVariant var ;//(Config.m_bBrowserTrace ? navNoHistory : NULL ) ;
m_spWebBrowser2->Navigate2( &varURL, &var, 0, 0, NULL);
}
}void CEasyNaviView::EnVisit()
{
CRect rect ;
GetClientRect(&rect) ;

CString strEasyNavi = CMyPro::GetFilePath(_T("html\\navigator\\default.html")) ; CComPtr<IUnknown> spUnk ;
CComPtr<IUnknown> spContainer ; // if (CreateControlEx(L"Shell.Explorer", NULL, &spContainer, &spUnk ) == S_OK && spUnk)
if (CEasyNaviView::CreateEnWebControl(&spContainer, &spUnk) == S_OK && spUnk)
{
spUnk->QueryInterface( IID_IWebBrowser2, (void **)&m_spWebBrowser2) ;
}
EnNavigate(strEasyNavi) ;
}

解决方案 »

  1.   

    CString strEasyNavi = CMyPro::GetFilePath(_T("html\\navigator\\default.html")) 
    路径对么?
      

  2.   

    CMyPro::GetFilePath(_T("html\\navigator\\default.html"))  
    路径没问题, 这个就是获取绝对路径的 ~
      

  3.   

    本地路径要用file协议,例子:file:///c:/abc/def.html
    注意点:file:后面是3个正斜杠,路径中用正斜杠(不是标准的反斜杠)。
    如果你觉得IE地址栏支持标准的路径写法,那么你就错了,它会帮你转换成file协议路径的。如果你直接用WebBrowser控件,路径必须是合法的URL路径,你得自己转。
      

  4.   

    @redui 
    不行啊 。应该不是路径的问题
      

  5.   

    CMyPro::GetFilePath  获取绝对路径的类·
      

  6.   

    redui方法,我测试了下,很好用,谢谢。 楼主你解决问题后不通报方法,败人品