c语言中表示html内容,显示内存中的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的获得是在文件装入结束后才查询此接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值