大家都知道DWebBrowserEvents2 Members的DocumentComplete(Fires when a document is completely loaded and initialized)成员的作用。但是实际上直接在它里面处理加载完成后的事件是不行的, 我们还需要做一些处理才行。直接看代码:

//CComPtr<IWebBrowser2> m_spWebBrowser;
void __stdcall OnEventDocumentComplete(IDispatch* /*pDisp*/, VARIANT* /*URL*/)
{
    ATLASSERT(m_spWebBrowser != NULL);
    IDispatch *p_disp = NULL;
    m_spWebBrowser->get_Document(&p_disp);
    if (p_disp)
    {
        ATL::CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> spDoc2 = p_disp;
        BSTR bs_readyState;
        spDoc2->get_readyState(&bs_readyState);
        CString str;
        str.Format(_T("%s"), bs_readyState);
        if (str.Compare(_T("complete")) == 0)
        {
            // 这里才是处理页面最终加载完成的地方
        }
    }
}

2011-07-14