显示内存中的HTML内容
2008-11-12 16:24
176 查看
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的获得是在文档装入结束后才查询此接口。
思路:
先用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的获得是在文档装入结束后才查询此接口。
相关文章推荐
- 显示内存中的HTML内容
- 显示内存中HTML内容的方法
- struts2标签遍历时,显示内容忽略<html>代码问题
- AngularJS 不得不了解的服务 $compile 用于动态显示html内容
- 远程读取中文网页内容并显示, keyword: html, stringWithContentsOfURL encoding
- VS Help Viewer 显示内容为HTML源码的问题
- html固定宽度下拉框内容显示不全问题解决方法
- (转)获取HTML页面内容后格式化显示的办法
- html显示一个长的错误单词换行,内容自动换行
- 【Andoid杂谈】Android TextView中显示超文本(HTML)内容
- html编写代码时,显示效果中文内容出现乱码解决方法
- WebView上显示HTML内容
- 如何在html页面显示<…>标签内容
- HTML---灵活高效的在 Android Native App 开发中显示 HTML 内容
- Thinkphp 3.2 显示html内容的时候 多了斜杠 导致样式和图片不能正常显示问题解决
- 内容显示在HTML页面底端的一些处理方式
- textarea 提交到数据库的内容,输出到 html 中显示正常的格式
- IE和firefox下显示html内容
- QTextBrowser显示html文件内容
- 在UILable内显示HTML页面内容