在BHO中是用 Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,DISPPARAMS* pDispParams, VARIANT* pvarResult,EXCEPINFO*  pExcepInfo,  UINT* puArgErr)函数,来捕捉浏览器事件,而打开一个网页有时会有多个DocumentComplete事件,我只想响应最后一个,怎么办? 请牛人指点下!

解决方案 »

  1.   

    不会有多个documentComplete消息。你看到的许多documentComplete消息是许多iframe的documentComplete消息。如果你要确定哪一个documentComplete消息是 主框架的documentComplete消息,则:void DocumentComplete(      
        IDispatch *pDisp,
        VARIANT *URL
    );pDisp == MainWebBrowser ?
      

  2.   

    void _stdcall XXXXXX::OnDocumentComplete( IDispatch* pDispatch, VARIANT* pVar )
    {
    CComPtr<IUnknown> spUnknown;
    m_spWebBrowser2.QueryInterface(&spUnknown);
    if(spUnknown)
    {
    CComPtr<IDispatch> spDispatch;
    spUnknown.QueryInterface(&spDispatch);
    if(spDispatch.IsEqualObject(pDispatch))//如果相同说明,最后一个DocumentComplete
    {
    CComPtr<IDispatch> spDispDoc;
    m_spWebBrowser2->get_Document(&spDispDoc);
    m_spHtmlDoc2 = spDispDoc;//文档已经加载完了,可以初始化 CComPtr<IHtmlDocument2> m_spHtmlDocument2 对象了
    }
    }
    }