/////////////////////////////////////////////////////////////////////////////
-// Name: msw/ole/activex.cpp
+// Name: src/msw/ole/activex.cpp
// Purpose: wxActiveXContainer implementation
// Author: Ryan Norton <wxprojects@comcast.net>, Lindsay Mathieson <???>
// Modified by:
#pragma hdrstop
#endif
-#include "wx/dcclient.h"
-#include "wx/math.h"
+#if wxUSE_ACTIVEX
-// I don't know why members of tagVARIANT aren't found when compiling
-// with Wine
-#ifndef __WINE__
+#ifndef WX_PRECOMP
+ #include "wx/dcclient.h"
+ #include "wx/math.h"
+#endif
+
+#include "wx/msw/dc.h"
#include "wx/msw/ole/activex.h"
// autointerfaces that we only use here
HRESULT STDMETHODCALLTYPE LockContainer(BOOL){return S_OK;}
//********************IOleItemContainer***************************
HRESULT STDMETHODCALLTYPE
- #ifdef __WXWINCE__
+ #if 0 // defined(__WXWINCE__) && __VISUALC__ < 1400
GetObject
#elif defined(_UNICODE)
GetObjectW
}
}
+// VZ: we might want to really report an error instead of just asserting here
+#ifdef __WXDEBUG__
+ #define CHECK_HR(hr) \
+ wxASSERT_MSG( SUCCEEDED(hr), \
+ wxString::Format("HRESULT = %X", (unsigned)(hr)) )
+#else
+ #define CHECK_HR(hr) wxUnusedVar(hr)
+#endif
+
//---------------------------------------------------------------------------
// wxActiveXContainer::CreateActiveX
//
{
HRESULT hret;
hret = m_ActiveX.QueryInterface(iid, pUnk);
- wxASSERT(SUCCEEDED(hret));
+ CHECK_HR(hret);
// FrameSite
FrameSite *frame = new FrameSite(m_realparent, this);
// oleClientSite
hret = m_clientSite.QueryInterface(
IID_IOleClientSite, (IDispatch *) frame);
- wxASSERT(SUCCEEDED(hret));
+ CHECK_HR(hret);
// adviseSink
wxAutoIAdviseSink adviseSink(IID_IAdviseSink, (IDispatch *) frame);
wxASSERT(adviseSink.Ok());
// Get Dispatch interface
hret = m_Dispatch.QueryInterface(IID_IDispatch, m_ActiveX);
+ CHECK_HR(hret);
//
// SETUP TYPEINFO AND ACTIVEX EVENTS
// type info
wxAutoITypeInfo typeInfo;
hret = classInfo->GetClassInfo(typeInfo.GetRef());
+ CHECK_HR(hret);
wxASSERT(typeInfo.Ok());
// TYPEATTR
TYPEATTR *ta = NULL;
hret = typeInfo->GetTypeAttr(&ta);
- wxASSERT(ta);
+ CHECK_HR(hret);
// this should be a TKIND_COCLASS
wxASSERT(ta->typekind == TKIND_COCLASS);
if (! ti.Ok())
continue;
+ CHECK_HR(hret);
+
// check if default event sink
- bool defInterface = false;
bool defEventSink = false;
int impTypeFlags = 0;
typeInfo->GetImplTypeFlags(i, &impTypeFlags);
wxFAIL_MSG(wxT("Default event sink is in vtable!"));
}
}
- else
- {
- // WXOLE_TRACEOUT("Default Interface");
- defInterface = true;
- }
}
// TYPEATTR
TYPEATTR *ta = NULL;
hret = ti->GetTypeAttr(&ta);
- wxASSERT(ta);
+ CHECK_HR(hret);
if (ta->typekind == TKIND_DISPATCH)
{
HRESULT hret =
cpContainer->FindConnectionPoint(ta->guid, cp.GetRef());
- wxASSERT ( SUCCEEDED(hret));
+ CHECK_HR(hret);
IDispatch* disp;
frame->QueryInterface(IID_IDispatch, (void**)&disp);
hret = cp->Advise(new wxActiveXEvents(this, ta->guid),
&adviseCookie);
- wxASSERT_MSG( SUCCEEDED(hret),
- wxString::Format(wxT("Cannot connect!\nHRESULT:%X"), hret)
- );
+ CHECK_HR(hret);
}
}
// Get IOleObject interface
hret = m_oleObject.QueryInterface(IID_IOleObject, m_ActiveX);
- wxASSERT(SUCCEEDED(hret));
+ CHECK_HR(hret);
// get IViewObject Interface
hret = m_viewObject.QueryInterface(IID_IViewObject, m_ActiveX);
- wxASSERT(SUCCEEDED(hret));
+ CHECK_HR(hret);
// document advise
m_docAdviseCookie = 0;
hret = m_oleObject->Advise(adviseSink, &m_docAdviseCookie);
+ CHECK_HR(hret);
+
// TODO:Needed?
// hret = m_viewObject->SetAdvise(DVASPECT_CONTENT, 0, adviseSink);
m_oleObject->SetHostNames(L"wxActiveXContainer", NULL);
// Get IOleInPlaceObject interface
hret = m_oleInPlaceObject.QueryInterface(
IID_IOleInPlaceObject, m_ActiveX);
- wxASSERT(SUCCEEDED(hret));
+ CHECK_HR(hret);
// status
DWORD dwMiscStatus;
m_oleObject->GetMiscStatus(DVASPECT_CONTENT, &dwMiscStatus);
- wxASSERT(SUCCEEDED(hret));
+ CHECK_HR(hret);
// set client site first ?
if (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST)
if (pPersistStreamInit.Ok())
{
hret = pPersistStreamInit->InitNew();
+ CHECK_HR(hret);
}
if (! (dwMiscStatus & OLEMISC_SETCLIENTSITEFIRST))
hret = m_oleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL,
m_clientSite, 0, (HWND)m_realparent->GetHWND(), &posRect);
+ CHECK_HR(hret);
+
hret = m_oleObject->DoVerb(OLEIVERB_SHOW, 0, m_clientSite, 0,
(HWND)m_realparent->GetHWND(), &posRect);
+ CHECK_HR(hret);
}
if (! m_oleObjectHWND && m_oleInPlaceObject.Ok())
{
hret = m_oleInPlaceObject->GetWindow(&m_oleObjectHWND);
+ CHECK_HR(hret);
}
if (m_oleObjectHWND)
posRect.right = w;
posRect.bottom = h;
+#if !(defined(_WIN32_WCE) && _WIN32_WCE < 400)
::RedrawWindow(m_oleObjectHWND, NULL, NULL, RDW_INTERNALPAINT);
+#else
+ ::InvalidateRect(m_oleObjectHWND, NULL, false);
+#endif
RECTL *prcBounds = (RECTL *) &posRect;
+ wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl );
m_viewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, NULL,
- (HDC)dc.GetHDC(), prcBounds, NULL, NULL, 0);
+ (HDC)msw->GetHDC(), prcBounds, NULL, NULL, 0);
}
}
event.Skip();
}
-#endif
-// __WINE__
+#endif // wxUSE_ACTIVEX