2013-02-06 42 views
1

我正在使用CHtmlView的應用程序。新的需求意味着我希望能夠從類中獲取HTML源代碼來解析特定標籤(或者如果可能,只需獲取標籤中的信息)。如果我們使用的是較新的系統,這樣可以,但我可以使用CHtmlView :: GetSource,但它不存在。從CHtmlView(visual studio 6)中檢索HTML源碼

我已經在網上進行了相當廣泛的搜索,但對於大多數Windows編程來說都很新穎,並且尚未能夠實現任何有用的功能。

因此,如果任何人有一個如何從CHtmlView中提取HTML而不使用GetSource的例子,我會很高興看到它。我試過

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新手。

任何幫助表示讚賞。

回答

0

將此輔助函數添加到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; 
} 
相關問題