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