您的位置:首页 > Web前端 > HTML

显示内存中的HTML内容

2008-11-12 16:24 176 查看
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的获得是在文档装入结束后才查询此接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: