新手,使用流加载内存中的HTML文件的问题。
- C/C++ code
void CWlyGView::OnInitialUpdate(){ CHtmlView::OnInitialUpdate(); Navigate2(_T("about:blank"),NULL,NULL);}int CWlyGView::ShowHtml(CString strHtml){ CoInitialize(NULL); CComPtr<IHTMLDocument2> pDoc; pDoc = (IHTMLDocument2*)this->GetHtmlDocument(); ASSERT(pDoc); CComQIPtr<IPersistStreamInit> spPersistStream(pDoc); if(spPersistStream==NULL) return 0; LPTSTR lpMem = (LPTSTR)::GlobalAlloc( GPTR,strHtml.GetLength()+1); lstrcpy(lpMem,strHtml.GetBuffer()); CComPtr<IStream>spStream; CreateStreamOnHGlobal( lpMem, TRUE, &spStream ); // 初始化后,装载显示 spPersistStream->InitNew(); spPersistStream->Load(spStream ); return 0;}------------------------
下面是调用代码
- C/C++ code
void CHTTPDlg::OnBnClickedButtonHttptext(){ // TODO: 在此添加控件通知处理程序代码 CMainFrame* pCMF = (CMainFrame*)AfxGetApp()->m_pMainWnd; CWlyGView* pCWV = (CWlyGView*)pCMF->GetActiveView(); CString url ="..."; CString urll ="..."; /*pCWV->Navigate2(urll,NULL,NULL);*/ CString header = ""; header += "..."; header += "\r\n "; header += "... header += "\r\n "; header += "..."; header += "\r\n "; header += "..."; header += "\r\n "; header += "..."; header += "\r\n "; header += "Connection: Keep-Alive"; header += "\r\n "; header += "\r\n "; header += "Host: "; header += "\r\n "; header += "Referer: "; header += "\r\n "; header += "User-Agent: header += "\r\n "; header += "\r\n "; CString PostData = " "; CHttp* pCHttp = new CHttp; CString retHtml = pCHttp->post(url,header,PostData); pCWV->ShowHtml(retHtml);}程序运行后HTML文件中的CSS,JS文件路径解析错误,因为当前视图初始化时直接导航到about:blank了。
查了一下IHTMLDocument2是可以设置URL的啊,尝试了下put_url不成功。求大虾指导,谢谢。
[解决办法]
就是把IPersistStreamInit换成IPersistMoniker
spStream换成你自己的IMoniker实现
这个实现需要在GetDisplayName的时候返回URL
在BindToStorage的时候返回数据
参考http://support.microsoft.com/kb/178059