程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> VC++ >> 顯示內存中的HTML內容

顯示內存中的HTML內容

編輯:VC++

  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的獲得是在文件裝入結束後才查詢此接口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved