/ // CHtmlView operations BOOL CHtmlView::GetSource(CString& refString) { BOOL bRetVal = FALSE; CComPtr<IDispatch> spDisp = GetHtmlDocument(); if (spDisp != NULL) { HGLOBAL hMemory; hMemory = GlobalAlloc(GMEM_MOVEABLE, 0); if (hMemory != NULL) { CComQIPtr<IPersistStreamInit> spPersistStream = spDisp; if (spPersistStream != NULL) { CComPtr<IStream> spStream; if (SUCCEEDED(CreateStreamOnHGlobal(hMemory, TRUE, &spStream))) { spPersistStream->Save(spStream, FALSE); LPCTSTR pstr = (LPCTSTR) GlobalLock(hMemory); if (pstr != NULL) { // Stream is always ANSI, but CString // assignment operator will convert implicitly. bRetVal = TRUE; TRY { refString = pstr; } CATCH_ALL(e) { bRetVal = FALSE; DELETE_EXCEPTION(e); } END_CATCH_ALL if(bRetVal == FALSE) GlobalFree(hMemory); else GlobalUnlock(hMemory); } } } } } return bRetVal; } 向 IHTMLDocument2 写入 HTML 文本 int CChildView::HqResize(void) { USES_CONVERSION; CComPtr<IHTMLDocument2> pDoc; CComPtr<IHTMLElementCollection> sphtmlAll; CComPtr<IHTMLScriptElement> spObject; CComPtr<IDispatch> spDisp; CComVariant varName; CComVariant varIndex; if(FAILED(m_wndHq.GetDocument(&pDoc)) || pDoc==NULL) return 0; CString strHtml="<html><head><title>网页行情</title></head>" "<body leftmargin=0 topmargin=0>" "<OBJECT ID=KYT CODEBASE='http://www.sostock.com.cn/hq/webhq/webhq.cab#version=1,0,0,5'" "CLASSID='clsid:C952403E-C18D-4332-9F3D-0E1D7C486145'" "ALIGN='CENTER'" "width='%d'" "height='%d'>" "</OBJECT>" "<script language=javascript id=KYT1>" "window.focus();" "</script>" "</body>" "</html>"; CRect rc; GetClientRect(&rc); CString strIn; strIn.Format(strHtml,rc.Width()-20,rc.Height()-15); CComQIPtr<IPersistStreamInit> spPersistStream(pDoc); if(spPersistStream==NULL) return 0; LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR,strIn.GetLength()+1); lstrcpy(lpMem,strIn.GetBuffer()); CComPtr<IStream>spStream; CreateStreamOnHGlobal( lpMem, TRUE, &spStream ); // 初始化后,装载显示 spPersistStream->InitNew(); spPersistStream->Load(spStream ); return 0; }
从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit)
void CUxHtmlViewerView::SetScript(LPCTSTR lpszTxt)
{ Navigate(_T("about:blank"),NULL,NULL,NULL,NULL); HRESULT hr = E_NOINTERFACE; CComPtr<IHTMLDocument2> spHTMLDocument = static_cast<IHTMLDocument2*>(this->GetHtmlDocument()); CStreamOnCString stream(lpszTxt); CComQIPtr<IPersistStreamInit> spPSI; if (spHTMLDocument) { spPSI = spHTMLDocument; if (spPSI) hr = spPSI->Load(static_cast<IStream*>(&stream)); } } / // CHtmlView operations BOOL CHtmlView::GetSource(CString& refString) { BOOL bRetVal = FALSE; CComPtr<IDispatch> spDisp = GetHtmlDocument(); if (spDisp != NULL) { HGLOBAL hMemory; hMemory = GlobalAlloc(GMEM_MOVEABLE, 0); if (hMemory != NULL) { CComQIPtr<IPersistStreamInit> spPersistStream = spDisp; if (spPersistStream != NULL) { CComPtr<IStream> spStream; if (SUCCEEDED(CreateStreamOnHGlobal(hMemory, TRUE, &spStream))) { spPersistStream->Save(spStream, FALSE); LPCTSTR pstr = (LPCTSTR) GlobalLock(hMemory); if (pstr != NULL) { // Stream is always ANSI, but CString // assignment operator will convert implicitly. bRetVal = TRUE; TRY { refString = pstr; } CATCH_ALL(e) { bRetVal = FALSE; DELETE_EXCEPTION(e); } END_CATCH_ALL if(bRetVal == FALSE) GlobalFree(hMemory); else GlobalUnlock(hMemory); } } } } } return bRetVal; }
int CChildView::HqResize(void){ USES_CONVERSION; CComPtr<IHTMLDocument2> pDoc; CComPtr<IHTMLElementCollection> sphtmlAll; CComPtr<IHTMLScriptElement> spObject; CComPtr<IDispatch> spDisp; CComVariant varName; CComVariant varIndex; if(FAILED(m_wndHq.GetDocument(&pDoc)) || pDoc==NULL) return 0; CString strHtml="<html><head><title>网页行情</title></head>" "<body leftmargin=0 topmargin=0>" "<OBJECT ID=KYT CODEBASE='http://www.sostock.com.cn/hq/webhq/webhq.cab#version=1,0,0,5'" "CLASSID='clsid:C952403E-C18D-4332-9F3D-0E1D7C486145'" "ALIGN='CENTER'" "width='%d'" "height='%d'>" "</OBJECT>" "<script language=javascript id=KYT1>" "window.focus();" "</script>" "</body>" "</html>"; CRect rc; GetClientRect(&rc); CString strIn; strIn.Format(strHtml,rc.Width()-20,rc.Height()-15); CComQIPtr<IPersistStreamInit> spPersistStream(pDoc); if(spPersistStream==NULL) return 0; LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR,strIn.GetLength()+1); lstrcpy(lpMem,strIn.GetBuffer()); CComPtr<IStream>spStream; CreateStreamOnHGlobal( lpMem, TRUE, &spStream ); // 初始化后,装载显示 spPersistStream->InitNew(); spPersistStream->Load(spStream ); return 0;}向 IHTMLDocument2 写入 HTML 文本
int CHotDlgNews::NewMsg(CString strMsg) { m_ocxMsg.Navigate(("about:blank"),NULL,NULL,NULL,NULL); CComPtr<IDispatch> spDisp = m_ocxMsg.get_Document(); if(spDisp != NULL) { CComQIPtr<IPersistStreamInit> spPersistStream(spDisp); if (spPersistStream != NULL) { LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR,strMsg.GetLength()+1); lstrcpy(lpMem,strMsg.GetBuffer()); CComPtr<IStream>spStream; CreateStreamOnHGlobal( lpMem, TRUE, &spStream ); // 初始化后,装载显示 spPersistStream->InitNew(); spPersistStream->Load(spStream ); } } m_strSms=strMsg; m_vMsgVector.push_back(strMsg); UpdateData(FALSE); ShowWindow(SW_SHOW); this->SetFocus(); return 0; }先打开一个 about:blank 空白页面才能得到 HtmlDocument
今天用这个方法 向 IE 控件写入 HTML代码,可是在 win2000 pro ie 6 的机器上死活只显示 HTML 源代码,不出页面效果。。。。折腾了一天。。后来发现要把HTML代码写全他才认。。。 我只写了 <div>你好</div><br><div>你好</div> 他就不认识。。。 后来写成: <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /></head><body><div>你好</div><br>< div>你好</div></body></html> 他就认识了。。。晕~~ 好弱智。。。
多大
http://blog.vckbase.com/zaboli/archive/2005/06/23/7138.html
从 IHTMLDocument2 获得/写入 HTML 文本 (IPersistStreamInit)
最新推荐文章于 2021-06-29 01:17:59 发布