很多时候,我们需要动态的修改网页的内容。
早先COM集中营曾有篇文章介绍过,源代码:http://263.csdn.net/FileBBS/files/2001_9/T_642_1.zip
其中基本代码如下:
void CMainFrame::OnChangehtml() { IHTMLDocument2 *pHTMLDocument=NULL; IPersistStreamInit *pPSI=NULL;
IStream *pStream=NULL; HGLOBAL hHTMLText;
if (!(pHTMLDocument = (IHTMLDocument2*)m_pHtmlView->m_browser.GetDocument()))//m_pHtmlView是CHtmlView或者WebBrowser return; if (FAILED(pHTMLDocument->QueryInterface(&pPSI))) {
return; }
pHTMLDocument->clear(); pPSI->InitNew();
LPCTSTR strText = m_pSourceView->LockBuffer(); DWORD dwLength= strlen(strText); hHTMLText = GlobalAlloc(GMEM_FIXED, dwLength); memset(hHTMLText, 0, dwLength); memcpy(hHTMLText, strText, dwLength); m_pSourceView->UnlockBuffer(); CreateStreamOnHGlobal(hHTMLText, TRUE, &pStream); ULARGE_INTEGER libNewSize; libNewSize.QuadPart = dwLength; pStream->SetSize(libNewSize); pPSI->Load(pStream);
pStream->Release(); pPSI->Release();
}
网页内容倒是动态改变了,但你查看一下网页属性会发现,网页变成了:about:blank
很痛苦是吧,变成空白页了,呵呵~~
下面方法利用IHtmlDocument2的方法动态改变网页内容,而不改变网页属性
BOOL CXXXXView::put_bodyHtml(CString cs) { IHTMLDocument2* pHtmlDoc2 = (IHTMLDocument2*)GetHtmlDocument(); if( pHtmlDoc2) { HRESULT hr = S_OK; IHTMLElement *pBodyElement; hr=pHtmlDoc2->get_body( &pBodyElement); if(pBodyElement!=NULL) { BSTR pbBody = cs.AllocSysString(); hr=pBodyElement->put_innerHTML(pbBody); //类似的还有put_innerTEXT pBodyElement->Release(); } pHtmlDoc2->Release(); if( hr==S_FALSE) return FALSE; else return TRUE; } else return FALSE; }
到时候你只需要这样调用:put_BodyHtml("a string");

|