Hi!
I really got thrilled when I saw this Mozilla ActiveX control.
Finally, my application does not need to have IE installed!
But... it turns out that a bug in IE:s ActiveX-control (that I
actually solved) exists in the Mozilla control too!
Try this (in C++):
// useful macro for checking HRESULTs
#define HRCHECK(x) hr = x; if (!SUCCEEDED(hr)) { \
TRACE(_T("hr=%p\n"),hr);\
return hr;\
}
// macro to declare a typedef for ATL smart poitners; eg
SPIHTMLDocument2
#define DECLARE_SMARTPTR(ifacename) typedef CComQIPtr<ifacename>
SP##ifacename;
// smart pointers
DECLARE_SMARTPTR(IHTMLDocument2)
HRESULT CHtmlViewEx::SetDocumentHtml(LPCTSTR strHTML)
{
HRESULT hr;
// Get document object
SPIHTMLDocument2 doc = GetHtmlDocument();
// Create string as one-element BSTR safe array for
IHTMLDocument2::write.
CComSafeArray<VARIANT> sar;
sar.Create(1, 0);
sar[0] = CComBSTR(strHTML);
// open doc and write
LPDISPATCH lpdRet = NULL; // Not assigned in Mozilla ActiveX
control!
HRCHECK(doc->open(CComBSTR("text/html"),
CComVariant(CComBSTR("_self")),
CComVariant(CComBSTR("")),
CComVariant(true),
&lpdRet));
HWND hFocus = ::GetFocus(); // My IE "steal focus" workaround
;-)
HRCHECK(doc->write(sar)); // write contents to doc
HRCHECK(doc->close()); // close
if (lpdRet)
lpdRet->Release(); // release IDispatch returned
::SetFocus(hFocus); // Steal back the focus! This
works in IE!
return S_OK;
}
The Mozilla ActiveX control will steal the focus as soon as it sets
the html! Frustrating!
Best regards,
Chris, Sweden
_______________________________________________
mozilla-embedding mailing list
[EMAIL PROTECTED]
http://mail.mozilla.org/listinfo/mozilla-embedding