显示内存中的HTML内容

ZDNet软件频道 时间:2002-09-23 作者:闻怡洋 |  我要评论()
本文关键词:
IE WebControl控件提供了显示HTML的功能,但是只能够显示URL或者是文件。很多朋友都询问关于显示内存中HTML内容的方法,前几天我在网上找到一段代码,我在这里进行一些讲解。

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的获得是在文件装入结束后才查询此接口。

下载代码
本文转自VCHelp

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134