我正在使用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/