|
|
#ifndef __SHOCX_H__
#define __SHOCX_H__
#include "cnctnpt.h"
#include "dspsprt.h"
#include "expdsprt.h"
//
// shocx.h
//
#define _INTERFACEOFOBJECT 1
#define _CLSIDOFOBJECT 2
class CShellOcx: public CShellEmbedding, // IOleObject, IOleInPlacceObject, IOleInPlaceActiveObject,
// IViewObject2, IPersistStorage
public IPersistStreamInit, public IPersistPropertyBag, public IOleControl, // OnAmbientPropertyChange
public IDispatch, public IProvideClassInfo2, protected CImpIConnectionPointContainer, protected CImpIDispatch { public: // *** IUnknown *** (we multiply inherit from IUnknown, disambiguate here)
virtual STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj) { return CShellEmbedding::QueryInterface(riid, ppvObj); } virtual STDMETHODIMP_(ULONG) AddRef(void) { return CShellEmbedding::AddRef(); } virtual STDMETHODIMP_(ULONG) Release(void) { return CShellEmbedding::Release(); }
// *** IPersistStreamInit ***
virtual STDMETHODIMP GetClassID(CLSID *pClassID) {return CShellEmbedding::GetClassID(pClassID);} // IPersistStorage implementation
virtual STDMETHODIMP IsDirty(void) {return _fDirty ? S_OK : S_FALSE;} virtual STDMETHODIMP Load(IStream *pStm) PURE; virtual STDMETHODIMP Save(IStream *pStm, BOOL fClearDirty) PURE; virtual STDMETHODIMP GetSizeMax(ULARGE_INTEGER *pcbSize); virtual STDMETHODIMP InitNew(void) PURE;
// *** IPersistPropertyBag ***
virtual STDMETHODIMP Load(IPropertyBag *pBag, IErrorLog *pErrorLog) PURE; virtual STDMETHODIMP Save(IPropertyBag *pBag, BOOL fClearDirty, BOOL fSaveAllProperties) PURE;
// *** IOleControl ***
virtual STDMETHODIMP GetControlInfo(LPCONTROLINFO pCI); virtual STDMETHODIMP OnMnemonic(LPMSG pMsg); virtual STDMETHODIMP OnAmbientPropertyChange(DISPID dispid); virtual STDMETHODIMP FreezeEvents(BOOL bFreeze);
// *** IDispatch ***
virtual STDMETHODIMP GetTypeInfoCount(UINT FAR* pctinfo) { return CImpIDispatch::GetTypeInfoCount(pctinfo); } virtual STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo FAR* FAR* pptinfo) { return CImpIDispatch::GetTypeInfo(itinfo, lcid, pptinfo); } virtual STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR FAR* FAR* rgszNames, UINT cNames, LCID lcid, DISPID FAR* rgdispid); virtual STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS FAR* pdispparams, VARIANT FAR* pvarResult, EXCEPINFO FAR* pexcepinfo, UINT FAR* puArgErr) { return CImpIDispatch::Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr); }
// *** CImpIConnectionPointContainer ***
virtual STDMETHODIMP EnumConnectionPoints(LPENUMCONNECTIONPOINTS * ppEnum);
// *** IProvideClassInfo2 ***
virtual STDMETHODIMP GetClassInfo(LPTYPEINFO * ppTI); virtual STDMETHODIMP GetGUID(DWORD dwGuidKind, GUID *pGUID);
// IPropertyNotifySink stuff.
//
inline void PropertyChanged(DISPID dispid) { m_cpPropNotify.OnChanged(dispid); }
/*
** CShellEmbedding stuff */
// *** IOleObject ***
virtual STDMETHODIMP EnumVerbs(IEnumOLEVERB **ppEnumOleVerb); virtual STDMETHODIMP SetClientSite(IOleClientSite *pClientSite);
// *** IViewObject ***
virtual STDMETHODIMP Draw(DWORD, LONG, void *, DVTARGETDEVICE *, HDC, HDC, const RECTL *, const RECTL *, BOOL (*)(ULONG_PTR), ULONG_PTR);
/*
** CShellOcx specific stuff */
CShellOcx(IUnknown* punkOuter, LPCOBJECTINFO poi, const OLEVERB* pverbs=NULL, const OLEVERB* pdesignverbs=NULL); ~CShellOcx();
protected:
// from CShellEmbedding
virtual HRESULT v_InternalQueryInterface(REFIID riid, LPVOID * ppvObj); virtual CConnectionPoint* _FindCConnectionPointNoRef(BOOL fdisp, REFIID iid);
ITypeInfo *_pClassTypeInfo; // ITypeInfo of class
const OLEVERB* _pDesignVerbs; // verb list for design mode -- run mode is in CShellEmbedding
// Ambient Properties we care about
IDispatch* _pDispAmbient; BOOL _GetAmbientProperty(DISPID dispid, VARTYPE vt, void *pData); int _nDesignMode; // MODE_UNKNOWN, MODE_TRUE, MODE_FALSE
BOOL _IsDesignMode(void); // TRUE means we have a design-mode container
BOOL _fEventsFrozen:1;
CConnectionPoint m_cpEvents; CConnectionPoint m_cpPropNotify; } ;
// _nDesignMode,etc flags
#define MODE_UNKNOWN -1 // mode has not yet been determined
#define MODE_TRUE 1
#define MODE_FALSE 0
// CConnectionPoint types:
#define SINK_TYPE_EVENT 0
#define SINK_TYPE_PROPNOTIFY 1
#endif // __SHOCX_H__
|