//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: gendata.h // // Contents: Declaration of a generic data object. // // Classes: CGenDataObject // // Functions: // // History: dd-mmm-yy Author Comment // 24-Mar-94 alexgo author // //-------------------------------------------------------------------------- #ifndef _GENDATA_H #define _GENDATA_H // flags used by OLE1 compatibilty mode typedef enum { OLE1_OFFER_OWNERLINK = 1, OLE1_OFFER_OBJECTLINK = 2, OLE1_OFFER_NATIVE = 4, OLE1_OWNERLINK_PRECEDES_NATIVE = 8 } Ole1TestFlags; // more flags used to control what formats are offered typedef enum { OFFER_TESTSTORAGE = 1, OFFER_EMBEDDEDOBJECT = 2 } DataFlags; //+------------------------------------------------------------------------- // // Class: CGenDataObject // // Purpose: generic data object (for clipboard data transfers, etc) // // Interface: IDataObject // // History: dd-mmm-yy Author Comment // 24-Mar-94 alexgo author // // Notes: // //-------------------------------------------------------------------------- class CGenDataObject : public IDataObject { public: // IUnknown methods STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void); // IDataObject methods STDMETHOD(GetData)(LPFORMATETC pformatetcIn, LPSTGMEDIUM pmedium); STDMETHOD(GetDataHere)(THIS_ LPFORMATETC pformatetc, LPSTGMEDIUM pmedium); STDMETHOD(QueryGetData)(THIS_ LPFORMATETC pformatetc); STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC pformatetc, LPFORMATETC pformatetcOut); STDMETHOD(SetData)(LPFORMATETC pformatetc, STGMEDIUM FAR* pmedium, BOOL fRelease); STDMETHOD(EnumFormatEtc)(DWORD dwDirection, LPENUMFORMATETC FAR* ppenumFormatEtc); STDMETHOD(DAdvise)(FORMATETC FAR* pFormatetc, DWORD advf, IAdviseSink FAR* pAdvSink, DWORD FAR* pdwConnection); STDMETHOD(DUnadvise)(DWORD dwConnection); STDMETHOD(EnumDAdvise)(LPENUMSTATDATA FAR* ppenumAdvise); // constructor CGenDataObject(); // test functions BOOL VerifyFormatAndMedium(FORMATETC *pformatetc, STGMEDIUM *pmedium); // OLE1 compatibility test functions void SetupOle1Mode( Ole1TestFlags fFlags ); HRESULT SetOle1ToClipboard( void ); // Used by various tests, controls what formats are offered by // the data object void SetDataFormats( DataFlags fFlags ); // Indicates whether or not QueryInterface was called. Used by // OleQueryXXX tests. BOOL HasQIBeenCalled(); // test clipboard formats UINT m_cfTestStorage; UINT m_cfEmbeddedObject; UINT m_cfEmbedSource; UINT m_cfObjectDescriptor; UINT m_cfLinkSource; UINT m_cfLinkSrcDescriptor; UINT m_cfOwnerLink; UINT m_cfObjectLink; UINT m_cfNative; private: IStorage * GetTestStorage(void); BOOL VerifyTestStorage(FORMATETC *pformatetc, STGMEDIUM *pmedium); ULONG m_refs; // reference count DWORD m_cFormats; // number of formats supported FORMATETC * m_rgFormats; // the formats // OLE1 support functions and data HGLOBAL GetOwnerOrObjectLink(void); HGLOBAL GetNativeData(void); BOOL VerifyOwnerOrObjectLink( FORMATETC *pformatec, STGMEDIUM *pmedium); BOOL VerifyNativeData( FORMATETC *pformatetc, STGMEDIUM *pmedium); Ole1TestFlags m_fOle1; // OLE1 configuration flags BOOL m_fQICalled; }; //+------------------------------------------------------------------------- // // Class: CGenEnumFormatEtc // // Purpose: Enumerator for the formats available on the generic data // object // // Interface: IEnumFORMATETC // // History: dd-mmm-yy Author Comment // 15-Apr-94 alexgo author // // Notes: // //-------------------------------------------------------------------------- class CGenEnumFormatEtc :public IEnumFORMATETC { public: STDMETHOD(QueryInterface)(REFIID riid, void **ppvObj); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void); STDMETHOD(Next) (ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched); STDMETHOD(Skip) (ULONG celt); STDMETHOD(Reset) (void); STDMETHOD(Clone) (IEnumFORMATETC **ppenum); static HRESULT Create(IEnumFORMATETC **ppIEnum, FORMATETC *prgFormats, DWORD cFormats); private: CGenEnumFormatEtc(); // constructor ~CGenEnumFormatEtc(); // destructor ULONG m_refs; // reference count ULONG m_iCurrent; // current clipboard format ULONG m_cTotal; // total number of formats FORMATETC * m_rgFormats; // array of available formats }; #endif // !_GENDATA_H