顯示記憶體中的HTML內容

來源:互聯網
上載者:User

                                                                                                                                      聞怡洋

IE WebControl控制項提供了顯示HTML的功能,但是只能夠顯示URL或者是檔案。很多朋友都詢問關於顯示記憶體中HTML內容的方法,前幾天我在網上找到一段代碼,我在這裡進行一些講解。

思路:

先用WebControl顯示一個空的HTML檔案(對於WebControl的用法有瞭解)

然後利用介面IID_IHTMLDocument2,來重新設定Body標記內的InnerHTML 屬性。(需要對DHTML有瞭解)

實現方法:

從CHTMLView派生新類CMoreHtmlView。

顯示空的HTML檔案,可以直接利用Navigate2方法,你可以指定一個預設的HTML檔案,不過WebControl還可以顯示定義在資源中的內容,根據Res Protocol的定義,顯示使用資源中的資料時用下面的表示方法:
res://sFile[/sType]/sID
sFile:表示包含資源的檔案
sType:資源的類型,例如RT_HTML或者你自己定義的資源類型,省略時為RT_HTML,
sID:資源ID

執行個體代碼
void CMoreHtmlView::NavigateMemory()
{
 //get application name
 CString sAppName=AfxGetAppName();
 CString sResourseID;
 //get resourse ID of Empty Html
 sResourseID.Format("%d", IDR_EMPTY_HTML);
 CString sNavigatePath;
 //compile
 sNavigatePath="res://"+sAppName+".exe/"+sResourseID;
 Navigate2( sNavigatePath); //裝入資源中的HTML檔案 此行實現功能
 //Activate memory mode
 m_bMemoryMode=TRUE;
}

修改Body標記內InnerHTML 屬性。

執行個體代碼
BOOL CMoreHtmlView::PutBodyContent(LPSTR lpstrContent)
{
 //store body content
 if( lpstrContent) m_lpstrBodyContent=lpstrContent;
 //check if HtmlDocument initialized
 if( m_pHtmlDoc2) //m_pHtmlDoc2 指向介面 IID_IHTMLDocument2
 {
  HRESULT hr = S_OK;
  IHTMLElement *pBodyElement;
  //get body element
  hr=m_pHtmlDoc2->get_body( &pBodyElement); //得到Body標記
  //put content to body element
  _bstr_t pbBody( m_lpstrBodyContent);
  hr=pBodyElement->put_innerHTML( pbBody); //設定HTML標記內內容

  if( hr==S_FALSE) return FALSE;
  else return TRUE;
 }
 else return FALSE;
}

如何得到IHTMLDocument2

void CMoreHtmlView::OnDocumentComplete(LPCTSTR lpszURL)
{
 // show html on first loading of document
 if(m_bMemoryMode)
 {
  LPDISPATCH lpDispatch;
  lpDispatch=GetHtmlDocument();
  ASSERT(lpDispatch);
  //get html document from IDispatch
  HRESULT hr=lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&m_pHtmlDoc2); //此行實現功能

  if( SUCCEEDED(hr)) ShowMemoryHtml();
 }
 CHtmlView::OnDocumentComplete(lpszURL);
}

示範代碼的閱讀:

上面提到的三點是基本的方法,但是要閱讀我找到的這份代碼需要做一點特別的說明。關於IHTMLDocument2的獲得是在檔案裝入結束後才查詢此介面。

來源程式:http://www.vchelp.net/vchelp/file2002_3/HtmlMemory.zip

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.