我正在使用CHtmlView的应用程序上工作。新的要求意味着我希望能够从类中获取HTML源代码以解析特定标签(或者,如果可能的话,只需在标签中获取信息)。如果我们使用的是较新的系统,那很好,我可以使用CHtmlView :: GetSource,但它不存在。

我已经在网上进行了广泛的搜索,但是对于大多数Windows编程来说还是很新的,并且还没有实现任何有用的功能。

因此,如果有人举了一个示例,说明如何在不使用GetSource的情况下从CHtmlView中提取HTML,那么我将不胜感激。我试过了

    BSTR bstr;
    _bstr_t * bstrContainer;
HRESULT hr;
IHTMLDocument2 * pDoc;
IDispatch * pDocDisp = NULL;
pDocDisp = this->GetHtmlDocument();
if (pDocDisp != NULL) {
    hr = pDocDisp->QueryInterface (IID_IHTMLDocument2, (void**)&pDoc);
    if (SUCCEEDED(hr)) {
        if (pDoc->toString(&bstr) != S_OK) {
                         //error...
        } else {
            bstrContainer = new _bstr_t(bstr);
            size = (bstrContainer->length()+1)*2;
            realString = new char[size];
            strncpy(realString, (char*)(*bstrContainer), size);
        }
    } else {
        //error
    }
    pDocDisp->Release();
}


但这只是在realString中给了我[object]。就像我说的,Windows的新手。

任何帮助表示赞赏。

最佳答案

将此辅助函数添加到CHtmlView派生的类中以检索html源。请记住要检查从此函数返回的布尔状态,因为当系统资源不足时,com-interface可能会非常不可靠。

 /* ============================================== */
BOOL CTest1View::GetHtmlText(CString &strHtmlText)
{
    BOOL bState = FALSE;
    // get IDispatch interface of the active document object
    IDispatch *pDisp = this->GetHtmlDocument();
    if (pDisp != NULL)
    {   // get the IHTMLDocument3 interface
        IHTMLDocument3 *pDoc = NULL;
        HRESULT hr = pDisp->QueryInterface(IID_IHTMLDocument3, (void**) &pDoc);
        if (SUCCEEDED(hr))
        {   // get root element
            IHTMLElement *pRootElement = NULL;
            hr = pDoc->get_documentElement(&pRootElement);
            if (SUCCEEDED(hr))
            {   // get html text into bstr
                BSTR bstrHtmlText;
                hr = pRootElement->get_outerHTML(&bstrHtmlText);
                if (SUCCEEDED(hr))
                {   // convert bstr to CString
                    strHtmlText = bstrHtmlText;
                    bState = TRUE;
                    SysFreeString(bstrHtmlText);
                }
                pRootElement->Release();
            }
            pDoc->Release();
        }
        pDisp->Release();
    }
    return bState;
}

关于c++ - 从CHtmlView检索HTML源(Visual Studio 6),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14719345/

10-11 19:31