一分钟学会IE控件加载并显示内存页面

又是一年春节临近时,值此特别的日子,先上精品诗一首!

 春节又到,
中华大地,
有钱飞机,
没钱站票。
望火车內外,
大包小包。
站台上下,
民工滔滔。
早起晚睡,
达旦通宵,
欲与票贩试比高。
须钞票。
看人山人海,
一票难保 车票如此难搞,
引无数英雄竟折腰
昔秦皇汉武,见此遁逃
唐宗宋祖,更是没招
一代天骄,成吉思汗,只好骑马往回辽 

话说最近在项目中使用了一个IE控件, 想显示内存中的网页. 如何实现却无经验, 遂百狗大法(百度+Google),终于取得真经. 具体操作过程见下面代码中的注释,嗯.

1.最开始处加载一个空白页面,以方便后面获取浏览器的document接口.

(其中m_cWB2就是浏览器对象,定义如下:CWebBrowser2 m_cWB2;)

//显示一个空白网页
 m_cWB2.Navigate2(&CComVariant(_T("about:blank")), NULL, NULL, NULL, NULL);

 

2. 显示内存页面

(其中szMemory指向HTML页面源码. 比如"<html><body>This is a test html</body></html>")

 //得到IHTMLDocument2指针
 CComPtr<IDispatch> spDoc(m_cWB2.GetDocument());
 if(!spDoc)
  return ;

 //得到IPersistStreamInit指针
 CComQIPtr<IPersistStreamInit, &IID_IPersistStreamInit> spPSI(spDoc);
 if(!spPSI)
  return ;

 //申请内存, 复制HTML字符串
 LPSTR lpMemory = (LPSTR)::GlobalAlloc(GPTR, strlen(szMemory) + 1);
 strcpy(lpMemory, szMemory);

 //转换内存为流对象指针
 CComPtr<IStream> spStream;
 HRESULT hr = CreateStreamOnHGlobal(lpMemory, TRUE, &spStream);
 if(FAILED(hr) || !spStream)
 {
  return ;
 }

 //初始化后,装载显示
 hr = spPSI->InitNew();
 if(FAILED(hr))
 {
  return ;
 }
 
 hr = spPSI->Load(spStream);
 if(FAILED(hr))
 {
  return ;
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值