显示内存中的HTML内容

原创 2004年07月28日 14:46:00

                                                                                                                                      闻怡洋

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

【HTML】使用Iframe标签显示目标网页(内容)的某区域

【HTML】使用Iframe标签显示目标网页(内容)的某区域      有些时候我们并不需要显示iframe标签属性src指定的目标网页的所有内容,往往只需要显示某一特定区域。现有两种实现方法提供,...
  • dyllove98
  • dyllove98
  • 2013年05月27日 23:01
  • 9895

前台HTML页面显示XML内容

应用场景:在网站开发过程中,读取XML格式文件,并将其所有内容都显示到页面上,即显示标签内容,又显示标签本身。 备注:本博客场景还适应于读取显示含有标签的数据库存储字段。 解决方法:解决方法一共有...
  • MOONCOM
  • MOONCOM
  • 2017年07月26日 17:49
  • 1855

Html table td 内容自动换行

HTMLTableTrTd td内容自动换行: 注: 必须设置td的宽度 word-wrap:设置或检索当前行超过指定容器的边界时是否断开?>转行 normal: 默认值。允许...
  • wwx991641945
  • wwx991641945
  • 2017年03月28日 15:23
  • 1460

显示内存中HTML内容的方法

====================================================== 注:本文源代码点此下载 =============================...
  • javazhuanzai
  • javazhuanzai
  • 2012年01月16日 02:43
  • 157

下载web页面并显示html内容需要internet transfer control (9KB)...

  • 2009年10月07日 13:42
  • 9KB
  • 下载

js 特效 html 特效 按钮显示特殊内容

  • 2011年06月13日 12:54
  • 7KB
  • 下载

C#winform datagridview 中显示HTML内容

  • 2017年06月01日 10:52
  • 4.2MB
  • 下载

hidden.html button隐藏和显示内容

  • 2015年04月09日 18:45
  • 2KB
  • 下载

解决textarea内容保存到MySQL再显示到html中没有换行的问题

最近在做项目时需要用一个MarkDown编辑器编写文章然后保存到数据库中,如下图所示,使用的是MdEditor 但通过后台提取数据显示到html页面中时,却发现没有换行。原来这是因为数据库把...
  • qq_23483671
  • qq_23483671
  • 2018年01月09日 21:23
  • 40

Android加载html内容显示图片

首先,从服务器上返回的数据是String类型的html代码 这是一个String类型的html代码段: 为String res; 我写了一个方法getimgae(res); public vo...
  • qznxzh
  • qznxzh
  • 2017年01月18日 14:34
  • 666
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:显示内存中的HTML内容
举报原因:
原因补充:

(最多只允许输入30个字)