16,471
社区成员
发帖
与我相关
我的任务
分享
BOOL CHtmlView::GetSource(CString& refString)
{
ENSURE(m_pBrowserApp != NULL);
BOOL bRetVal = FALSE;
CComPtr<IDispatch> spDisp;
m_pBrowserApp->get_Document(&spDisp);
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);
STATSTG statStg;
spStream->Stat(&statStg, STATFLAG_NONAME);
LPCSTR pstr = static_cast<LPCSTR>(GlobalLock(hMemory));
if (pstr != NULL)
{
// Stream is expected to be ANSI (CP-ACP). CString constructor
// will convert implicitly, and truncate to correct length.
bRetVal = TRUE;
TRY
{
refString = CString(pstr, statStg.cbSize.LowPart);
}
CATCH_ALL(e)
{
bRetVal = FALSE;
DELETE_EXCEPTION(e);
}
END_CATCH_ALL
if (bRetVal == FALSE)
GlobalFree(hMemory);
else
GlobalUnlock(hMemory);
}
else
{
GlobalFree(hMemory);
}
}
else
{
GlobalFree(hMemory);
}
}
else
{
GlobalFree(hMemory);
}
}
}
return bRetVal;
}