首页 > 编程资源分享区 > C/C++源代码共享 > 显示内存中的HTML内容
2006
01-20

显示内存中的HTML内容

 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的获得是在文件装入结束后才查询此接口。


留下一个回复