Доброго времени суток!
Уже учитался здесь по поводу этого класса.
У меня задача динамически изменять html содержимое этого окна.
В настоящий момент пользую такой способ
bool CDocHtmlView::Write( CString &htmlStr )
{
if( !m_pHtmlDoc2 )
return false;
BSTR bstr = htmlStr.AllocSysString();
HRESULT hresult = S_OK;
//put content to body element
SAFEARRAY *sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
if(sfArray)
{
VARIANT *param;
hresult = SafeArrayAccessData(sfArray, (LPVOID*)¶m);
param->vt = VT_BSTR;
param->bstrVal = bstr;
hresult = SafeArrayUnaccessData(sfArray);
hresult = m_pHtmlDoc2->write(sfArray);
SafeArrayDestroy(sfArray);
hresult = m_pHtmlDoc2->close();
}
SysFreeString(bstr);
}
но вроде как есть способ проще
...
LPDISPATCH lpDispatch = GetHtmlDocument();
if( lpDispatch )
lpDispatch->QueryInterface( IID_IHTMLDocument2, (void**)&m_pHtmlDoc2 );
//get html document from IDispatch
//get body element
if( !m_pHtmlDoc2 || !SUCCEEDED( m_pHtmlDoc2->get_body( &m_pBodyElement) ) )
{
m_pBodyElement = NULL;
if( m_pHtmlDoc2 )
m_pHtmlDoc2->Release();
m_pHtmlDoc2 = NULL;
}
if( m_pBodyElement )
return SUCCEEDED( m_pBodyElement->put_innerHTML( pbBody ) );
...
И все вроде хорошо и текст рисует и картинки выводит НО!!!
Не реагирует на изменение фона и цвета шрифта. Белый фон, черный текст и усе
Вопрос: что я не так делаю?
Здравствуйте, Flycat, Вы писали:
F>...
F>Вопрос: что я не так делаю?
Когда мне нужно полностью перегрузить содержимое WebBrowser-а, я обычно делаю так:
HRESULT hr;
CComPtr<IDispatch> spDocument;
hr = m_spWebBrowser->get_Document(&spDocument);
CComQIPtr<IPersistStreamInit> sppsi(spDocument);
CComPtr<IStream> spStm;
hr = ::CreateStreamOnHGlobal(NULL, TRUE, &spStm);
LPWSTR p = L"<html><body>test</body></html>";
DWORD dw;
spStm->Write(p, (lstrlenW(p) + 1)*2, &dw);
::StreamSeek(spStm, STREAM_SEEK_SET, 0);
hr = sppsi->Load(spStm);
--
Алексей
Здравствуйте, Flycat, Вы писали:
F>Доброго времени суток!
F>Уже учитался здесь по поводу этого класса.
F>У меня задача динамически изменять html содержимое этого окна.
F>В настоящий момент пользую такой способ
F>bool CDocHtmlView::Write( CString &htmlStr )
F>{
F> if( !m_pHtmlDoc2 )
F> return false;
F> BSTR bstr = htmlStr.AllocSysString();
F> HRESULT hresult = S_OK;
F> //put content to body element
F> SAFEARRAY *sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
F> if(sfArray)
F> {
F> VARIANT *param;
F> hresult = SafeArrayAccessData(sfArray, (LPVOID*)¶m);
F> param->vt = VT_BSTR;
F> param->bstrVal = bstr;
F> hresult = SafeArrayUnaccessData(sfArray);
F> hresult = m_pHtmlDoc2->write(sfArray);
F> SafeArrayDestroy(sfArray);
F> hresult = m_pHtmlDoc2->close();
F> }
F> SysFreeString(bstr);
F>}
F>но вроде как есть способ проще
F>...
F> LPDISPATCH lpDispatch = GetHtmlDocument();
F> if( lpDispatch )
F> lpDispatch->QueryInterface( IID_IHTMLDocument2, (void**)&m_pHtmlDoc2 );
F> //get html document from IDispatch
F> //get body element
F> if( !m_pHtmlDoc2 || !SUCCEEDED( m_pHtmlDoc2->get_body( &m_pBodyElement) ) )
F> {
F> m_pBodyElement = NULL;
F> if( m_pHtmlDoc2 )
F> m_pHtmlDoc2->Release();
F> m_pHtmlDoc2 = NULL;
F> }
F> if( m_pBodyElement )
F> return SUCCEEDED( m_pBodyElement->put_innerHTML( pbBody ) );
F>...
F>И все вроде хорошо и текст рисует и картинки выводит НО!!!
F>Не реагирует на изменение фона и цвета шрифта. Белый фон, черный текст и усе
F>Вопрос: что я не так делаю?
Скорее всего, все стили у тебя прописаны в <HEAD>. И put_innerHTML их начисто игнорирует