======================================================
注:本文源代码点此下载
======================================================
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的获得是在文件装入结束后才查询此接口。
绿色通道:好文要顶关注我收藏该文与我联系
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/