又是一年春节临近时,值此特别的日子,先上精品诗一首!
春节又到,
中华大地,
有钱飞机,
没钱站票。
望火车內外,
大包小包。
站台上下,
民工滔滔。
早起晚睡,
达旦通宵,
欲与票贩试比高。
须钞票。
看人山人海,
一票难保 车票如此难搞,
引无数英雄竟折腰
昔秦皇汉武,见此遁逃
唐宗宋祖,更是没招
一代天骄,成吉思汗,只好骑马往回辽
话说最近在项目中使用了一个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 ;
}