我有个列表控件m_AddressList和一个静态加入的WebBrowser控件m_ctrlWebBrowser放在在同一个位置(是在OnSize中: m_ctrlWebBrowser.MoveWindow(rightRc), m_AddressList.MoveWindow(rightRc)),然后在点击了列表控件中的某一个Url后就隐藏m_AddressList,显示WebBrowser控件m_ctrlWebBrowser。m_AddressList.ShowWindow(SW_HIDE);
m_ctrlWebBrowser.Navigate(_T("http://www.sina.com.cn/"), NULL, NULL, NULL, NULL);
m_ctrlWebBrowser.ShowWindow(SW_SHOW);
但是老是出现断言错误。即使点击“忽略错误”,列表控件m_AddressList消失了,但WebBrowser控件中还是一片空白,请问是怎么回事?

解决方案 »

  1.   

    断言中提示是:
    Winocc.cpp
    line:374 ,不知是什么错误。
      

  2.   

    你把line:374这一行拿出来看一下就知道了
      

  3.   

    你在OnSize函数中,应该先判断一下对话框的m_hWnd是否为NULL,为NULL时不要调用这些语句。
      

  4.   

    跟踪到Winocc.cpp
    // CWnd invoke helpers for OLE Control wrappersvoid AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
    void* pvRet, const BYTE* pbParamInfo, ...)
    {
    ASSERT(m_pCtrlSite != NULL);    // not an OLE control (not yet, at least)就是这里出错!!! if (m_pCtrlSite == NULL)
    return; va_list argList;
    va_start(argList, pbParamInfo);
    m_pCtrlSite->InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo,
    argList);
    va_end(argList);
    }
      

  5.   

    在OnSize函数中
    if (m_ctrlWebBrowser.GetSafeHwnd())
           m_ctrlWebBrowser.MoveWindow(RightRc);
      

  6.   

    ASSERT(m_pCtrlSite != NULL);    // not an OLE control (not yet, at least)
    就是这里出错!!!
      

  7.   

    你好像没有初始化OLE啊。
    AfxOleInit()
      

  8.   

    在应用程序类的InitInstance()函数的开始,调用AfxOleInit();初始化OLE
      

  9.   

    啊,静态加入的控件还要初始化OLE啊。晕倒!!!!
      

  10.   

    在应用程序中自动生成了啊:BOOL CMyApp::InitInstance()
    {
    // 如果一个运行在 Windows XP 上的应用程序清单指定要
    // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
    //则需要 InitCommonControls()。否则,将无法创建窗口。
    InitCommonControls(); CWinApp::InitInstance(); // 初始化 OLE 库
    if (!AfxOleInit())
    {
    AfxMessageBox(IDP_OLE_INIT_FAILED);
    return FALSE;
    }
    AfxEnableControlContainer(); CLoginDlg dlg;
    }
      

  11.   

    to  happyparrot(快乐鹦鹉),试过了加上AfxOleInit(),还是老问题。
      

  12.   

    嗯。我猜不出来了。你调试一下,哪一句异常。是Navigate么?
      

  13.   

    在加入WebBrowser控件后自动生成的explorer1.h
    void Navigate(LPCTSTR URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
    {
    static BYTE parms[] = VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT ;
    InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, NULL, parms, URL, Flags, TargetFrameName, PostData, Headers);
    }
    然后就跳到Winocc.cpp
    // CWnd invoke helpers for OLE Control wrappersvoid AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
    void* pvRet, const BYTE* pbParamInfo, ...)
    {
    ASSERT(m_pCtrlSite != NULL);    // not an OLE control (not yet, at least)就是这里出错!!! if (m_pCtrlSite == NULL)
    return; va_list argList;
    va_start(argList, pbParamInfo);
    m_pCtrlSite->InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo,
    argList);
    va_end(argList);
    }出现断言错误
      

  14.   

    你用的是哪个版本啊?我现在的项目中也用浏览器,但自动生成的类是CWebBrowser2啊。
      

  15.   

    为什么是explorer1.h
    一般都是explorer.h才对
    你是不是曾经导入过这个控件然后觉得不爽删掉了重新来过
    要确保你删除干净了,应该是没有问题的
      

  16.   

    放弃了,干脆用 HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC,
            IID_IOleObject, (void**)&m_spOleObjectPreloadBrowser); 动态创建一个。