怎样将一段内存中的HTML在CHtmlView中显示出来?

怎样将一段内存中的HTML在CHtmlView中显示出来?我用下面的代码不行,在我标记的地方退出.
MSHTML::IHTMLDocument2PtrptrDoc;
LPCTSTRsz=_T("<html><head><title>test</title></head><body><h1>Inmemory HTML document</h1></body></html>");
HGLOBALhMem;
LPSTREAMpStream;
IPersistStreamInit*pPersistStream;

ptrDoc = GetHtmlDocument();
hMem = ::GlobalAlloc(GPTR, (lstrlen(sz) + 1) * sizeof TCHAR);
lstrcpy((LPTSTR)hMem, sz);
HRESULT hr = ::CreateStreamOnHGlobal(hMem, TRUE, &pStream);
if(FAILED(hr))
{
::GlobalFree(hMem);
return;
}
hr = ptrDoc.QueryInterface(IID_IPersistStreamInit, &pPersistStream);
if(FAILED(hr))
{
::GlobalFree(hMem); //能运行到这里,说明GetHtmlDocument()返回的对象没有IID_IPersistStreamInit接口,没道理呀!
return;
}
if(pPersistStream == NULL)
{
pStream->Release();
return;
}
hr = pPersistStream->InitNew();
hr = pPersistStream->Load(pStream);

hr = pPersistStream->Release();
pStream->Release();


回复人:allenq(黑夜给我黑的眼, 我却用他来翻白眼..........)  四级(中级)  信誉:99      2004-9-6 11:57:08  得分:5



帮你顶..
TOP
回复人:jiangsheng(蒋晟.MSMVP2004Jan)  五星(高级)  信誉:257      2004-9-7 2:51:22  得分:25



http://dev.csdn.net/article/18/18465.shtm
从Microsoft Internet Explorer 5开始,多于一次调用 IPersist* 接口的Load 方法 是可行的。在更早的版本中,每个MSHTML的实例只支持一次Load 调用。
已知问题
微软知识库文章

Q271868 在Microsoft Internet Explorer (Programming) 5.5中,框架对象不支持IPersistStream, IPersistFile,IPersistMemory接口。
Q323569 BUG: PersistStreamInit::Load() 显示HTML内容为文本
Q264868 BUG:Internet Explorer 没有检测到内容类型从text/html到text/xml的改变。

TOP
回复人:Aspist(边城浪子)  三级(初级)  信誉:90      2004-9-7 9:26:12  得分:0



我的机器是IE6呀,应该可以吧:
#include "mshtml.h"
#import "C:/windows/system32/mshtml.tlb"

到底要怎样才行呢?
TOP
回复人:Semigod()  两星(中级)  信誉:93      2004-9-7 9:56:42  得分:20



我来给出一段代码:
HRESULT CClientView::LoadFromStream(IStream* pStream)
{
HRESULT hr;
IDispatch* pHtmlDoc = NULL;
IPersistStreamInit* pPersistStreamInit = NULL;

// 获取HTML文档对象
pHtmlDoc = GetHtmlDocument();
if (pHtmlDoc == NULL)
return false;
// 获取接口 IPersistStreamInit.
using namespace MSXML2;
hr = pHtmlDoc->QueryInterface( IID_IPersistStreamInit, (void**)&pPersistStreamInit );
pHtmlDoc->Release();
if ( SUCCEEDED(hr) )
{
// 初始化文档
hr = pPersistStreamInit->InitNew();
if ( SUCCEEDED(hr) )
{
// 加载数据流中的数据
hr = pPersistStreamInit->Load( pStream );
return S_OK;
}
pPersistStreamInit->Release();
}
return E_FAIL;
}
TOP
回复人:Semigod()  两星(中级)  信誉:93      2004-9-7 9:59:08  得分:0



再给出一段:
CStreamOnCString streamHtml(html);
IStream * pIStream;
hr = streamHtml.QueryInterface(IID_IStream, (void **)&pIStream);
if (SUCCEEDED(hr))
{
LoadFromStream(pIStream);
pIStream->Release();
}
这段代码使用了CHtmlView中的CStreamOnCString类来将HTML加载到CHtmlView中(利用前面给出的LoadFromStream方法)
TOP
回复人:Aspist(边城浪子)  三级(初级)  信誉:90      2004-9-7 11:09:15  得分:0



谢谢两位,其实是ptrDoc = GetHtmlDocument();返回的是空,在前面加上
Navigate2( _T("about:blank"), NULL, NULL, NULL, NULL );就好了.


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=442159

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值