菜鸟求助:如何在单文档CHtmlView中追加显示内容 VC6.0
时间:2011-11-29
来源:互联网
各位高手:
最近小弟正在做的一个测试程序,基于单文档的架构,要在界面实时显示测试报告,视图部分时从CHtmlView继承的。现在可以将内存中的HTML源码显示在界面,但是无法实现追加显示。(我所谓的追加显示,是指在原有内容的基础上再显示新的内容。)之前考虑过每次都刷新整个界面,新旧内容一起显示出来,如果测试时间比较久,显示内容太多的话效率会比较低。
向大家请教一下,怎么能够将原有内容保持在界面的情况下,追加显示新的内容。
下面是我显示内存中HTML内容的代码:
void CToolView::DisplayHtmlInMemory(CString strText)
{
LPDISPATCH lpDispatch;
lpDispatch = GetHtmlDocument();
ASSERT(lpDispatch);
CComQIPtr <IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
HRESULT hr;
hr = lpDispatch-> QueryInterface(IID_IHTMLDocument2, (void**)&pDoc2);
if(SUCCEEDED(hr))
{
IHTMLElement *pBodyElement;
pDoc2-> get_body( &pBodyElement);
BSTR body;
body=::_com_util::ConvertStringToBSTR(strText);
pBodyElement-> put_innerHTML(body);
pDoc2.Release();
}
lpDispatch-> Release();
}
我的另外一种显示方法:
程序启动时调用一次InitHtmlDisplay(),每次显示的时候再调用DisplayHtmlInMemory。
void CToolView::InitHtmlDisplay()
{
HRESULT hr;
m_lpDisp = GetApplication();
if (m_lpDisp == NULL)
{
return;
}
hr = m_lpDisp->QueryInterface(IID_IWebBrowser2, (void**)&m_pBrowser);
if (!SUCCEEDED(hr))
{
return;
}
hr = m_pBrowser->QueryInterface( IID_IUnknown, (void**)&m_pUnkBrowser);
if (!SUCCEEDED(hr))
{
return;
}
hr = m_lpDisp->QueryInterface( IID_IUnknown, (void**)&m_pUnkDisp );
if (!SUCCEEDED(hr))
{
return;
}
if ( AfxMessageBox!= m_pUnkDisp )
{
return;
}
hr = m_pBrowser->get_Document(&m_pHtmlDoc);
if (!SUCCEEDED(hr))
{
return;
}
hr = m_pHtmlDoc->QueryInterface(IID_IPersistStreamInit, (void**)&m_pPersistStreamInit);
if (!SUCCEEDED(hr))
{
return;
}
// 初始化文档.
hr = m_pPersistStreamInit->InitNew();
if (!SUCCEEDED(hr))
{
return;
}
}
void CToolView::DisplayHtmlInMemory(CString strText)
{
size_t cchLength=strText.GetLength();
hHTMLText = GlobalAlloc( GPTR, cchLength+1 );
if ( hHTMLText )
{
strcpy((TCHAR*)hHTMLText, (TCHAR *)strText.LockBuffer());
hr = CreateStreamOnHGlobal(hHTMLText, TRUE, &pStream);
if ( SUCCEEDED(hr) )
{
hr = m_pPersistStreamInit->Load( pStream );
pStream->Release();
}
strText.UnlockBuffer();
}
}
这两种方法,我大概都做过简单调整,可是都无法达到我的目的。
我之前没接触过HTML相关的东西,这一段翻了好多老帖(jiangsheng等前辈的帖子确实让人收获颇丰),但是小弟资质平平,举一反三的能力有限,还望大家赐教:)
最近小弟正在做的一个测试程序,基于单文档的架构,要在界面实时显示测试报告,视图部分时从CHtmlView继承的。现在可以将内存中的HTML源码显示在界面,但是无法实现追加显示。(我所谓的追加显示,是指在原有内容的基础上再显示新的内容。)之前考虑过每次都刷新整个界面,新旧内容一起显示出来,如果测试时间比较久,显示内容太多的话效率会比较低。
向大家请教一下,怎么能够将原有内容保持在界面的情况下,追加显示新的内容。
下面是我显示内存中HTML内容的代码:
void CToolView::DisplayHtmlInMemory(CString strText)
{
LPDISPATCH lpDispatch;
lpDispatch = GetHtmlDocument();
ASSERT(lpDispatch);
CComQIPtr <IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
HRESULT hr;
hr = lpDispatch-> QueryInterface(IID_IHTMLDocument2, (void**)&pDoc2);
if(SUCCEEDED(hr))
{
IHTMLElement *pBodyElement;
pDoc2-> get_body( &pBodyElement);
BSTR body;
body=::_com_util::ConvertStringToBSTR(strText);
pBodyElement-> put_innerHTML(body);
pDoc2.Release();
}
lpDispatch-> Release();
}
我的另外一种显示方法:
程序启动时调用一次InitHtmlDisplay(),每次显示的时候再调用DisplayHtmlInMemory。
void CToolView::InitHtmlDisplay()
{
HRESULT hr;
m_lpDisp = GetApplication();
if (m_lpDisp == NULL)
{
return;
}
hr = m_lpDisp->QueryInterface(IID_IWebBrowser2, (void**)&m_pBrowser);
if (!SUCCEEDED(hr))
{
return;
}
hr = m_pBrowser->QueryInterface( IID_IUnknown, (void**)&m_pUnkBrowser);
if (!SUCCEEDED(hr))
{
return;
}
hr = m_lpDisp->QueryInterface( IID_IUnknown, (void**)&m_pUnkDisp );
if (!SUCCEEDED(hr))
{
return;
}
if ( AfxMessageBox!= m_pUnkDisp )
{
return;
}
hr = m_pBrowser->get_Document(&m_pHtmlDoc);
if (!SUCCEEDED(hr))
{
return;
}
hr = m_pHtmlDoc->QueryInterface(IID_IPersistStreamInit, (void**)&m_pPersistStreamInit);
if (!SUCCEEDED(hr))
{
return;
}
// 初始化文档.
hr = m_pPersistStreamInit->InitNew();
if (!SUCCEEDED(hr))
{
return;
}
}
void CToolView::DisplayHtmlInMemory(CString strText)
{
size_t cchLength=strText.GetLength();
hHTMLText = GlobalAlloc( GPTR, cchLength+1 );
if ( hHTMLText )
{
strcpy((TCHAR*)hHTMLText, (TCHAR *)strText.LockBuffer());
hr = CreateStreamOnHGlobal(hHTMLText, TRUE, &pStream);
if ( SUCCEEDED(hr) )
{
hr = m_pPersistStreamInit->Load( pStream );
pStream->Release();
}
strText.UnlockBuffer();
}
}
这两种方法,我大概都做过简单调整,可是都无法达到我的目的。
我之前没接触过HTML相关的东西,这一段翻了好多老帖(jiangsheng等前辈的帖子确实让人收获颇丰),但是小弟资质平平,举一反三的能力有限,还望大家赐教:)
作者: untitled_noon 发布时间: 2011-11-29
代码没仔细看 说下简单思路
显示追加内容:
1.可以考虑用list control进行显示
2.在追加显示前获取现在列表里的index索引值 然后显示刷新下
显示追加内容:
1.可以考虑用list control进行显示
2.在追加显示前获取现在列表里的index索引值 然后显示刷新下
作者: c_losed 发布时间: 2011-11-29
To c_losed
谢谢你:)
不过,最初也想用list ctrl,可是测试报告的内容既有文本又有表格,list ctrl显示文本确实很方便,可是显示表格貌似不太行哈...小弟找了好久,最终才选择了CHtmlView...
谢谢你:)
不过,最初也想用list ctrl,可是测试报告的内容既有文本又有表格,list ctrl显示文本确实很方便,可是显示表格貌似不太行哈...小弟找了好久,最终才选择了CHtmlView...
作者: untitled_noon 发布时间: 2011-11-29
又仔细查了一下MSDN,用insertAdjacentHTML可以实现我想要的功能...我土了...
感谢CSDN,感谢MSDN,感谢jiangsheng等大侠,感谢1楼...
感谢CSDN,感谢MSDN,感谢jiangsheng等大侠,感谢1楼...
作者: untitled_noon 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28