Article ID: 141277
Article Last Modified on 11/21/2006
140616 Replacing MFC IDispatch implementation
// Interface Maps
protected:
// IOleObject
BEGIN_INTERFACE_PART(MyOleObject, IOleObject)
INIT_INTERFACE_PART(CIOleOverCtrl, MyOleObject)
STDMETHOD(SetClientSite)(LPOLECLIENTSITE);
STDMETHOD(GetClientSite)(LPOLECLIENTSITE*);
STDMETHOD(SetHostNames)(LPCOLESTR, LPCOLESTR);
STDMETHOD(Close)(DWORD);
STDMETHOD(SetMoniker)(DWORD, LPMONIKER);
STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
STDMETHOD(InitFromData)(LPDATAOBJECT, BOOL, DWORD);
STDMETHOD(GetClipboardData)(DWORD, LPDATAOBJECT*);
STDMETHOD(DoVerb)(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND,
LPCRECT);
STDMETHOD(EnumVerbs)(IEnumOLEVERB**);
STDMETHOD(Update)();
STDMETHOD(IsUpToDate)();
STDMETHOD(GetUserClassID)(CLSID*);
STDMETHOD(GetUserType)(DWORD, LPOLESTR*);
STDMETHOD(SetExtent)(DWORD, LPSIZEL);
STDMETHOD(GetExtent)(DWORD, LPSIZEL);
STDMETHOD(Advise)(LPADVISESINK, LPDWORD);
STDMETHOD(Unadvise)(DWORD);
STDMETHOD(EnumAdvise)(LPENUMSTATDATA*);
STDMETHOD(GetMiscStatus)(DWORD, LPDWORD);
STDMETHOD(SetColorScheme)(LPLOGPALETTE);
END_INTERFACE_PART(MyOleObject)
DECLARE_INTERFACE_MAP();
This adds a nested class XMyOleObject to your control class. Note that
these macros declare interface methods including the IUnknown interface
methods, so you must implement the IUnknown methods as well.
BEGIN_INTERFACE_MAP(CIOleOverCtrl, COleControl)
INTERFACE_PART(CIOleOverCtrl, IID_IOleObject, MyOleObject)
END_INTERFACE_MAP()
Replace CIOleOverCtrl with the name of your control and MyOleObject
with the name you chose for the nested class that supports IOleObject.
STDMETHODIMP_(ULONG) CIOleOverCtrl::XMyOleObject::AddRef()
{
METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.AddRef();
}
STDMETHODIMP_(ULONG) CIOleOverCtrl::XMyOleObject::Release()
{
METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.Release ();
}
STDMETHODIMP CIOleOverCtrl::XMyOleObject::QueryInterface(
REFIID iid, LPVOID far* ppvObj)
{
METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.QueryInterface ( iid, ppvObj);
}
STDMETHODIMP
CIOleOverCtrl::XMyOleObject::SetClientSite(LPOLECLIENTSITE
pClientSite)
{
METHOD_MANAGE_STATE(CIOleOverCtrl, MyOleObject)
ASSERT_VALID(pThis);
return pThis->m_xOleObject.SetClientSite ( pClientSite );
}
...Keywords: kbarchitecture kbctrl kbhowto KB141277