home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / inole2 / chap12 / datatran / dataobj.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  4KB  |  144 lines

  1. /*
  2.  * DATAOBJ.H
  3.  * Data Transfer Object Chapter 12
  4.  *
  5.  * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved
  6.  *
  7.  * Kraig Brockschmidt, Microsoft
  8.  * Internet  :  kraigb@microsoft.com
  9.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  10.  */
  11.  
  12.  
  13. #ifndef _DATAOBJ_H_
  14. #define _DATAOBJ_H_
  15.  
  16.  
  17. #define INC_OLE2
  18. #define CHAPTER12
  19. #include <inole.h>
  20.  
  21.  
  22. /*
  23.  * Structure to describe a specific rendering that our user wants
  24.  * us to maintain.
  25.  */
  26.  
  27. typedef struct tagRENDERING
  28.     {
  29.     FORMATETC       fe;             //The format
  30.     STGMEDIUM       stm;            //The actual data
  31.     LPUNKNOWN       pUnkOrg;        //The real owner
  32.     } RENDERING, *PRENDERING;
  33.  
  34.  
  35.  
  36. /*
  37.  * The DataObject object is implemented in its own class with its
  38.  * own IUnknown to support aggregation.  It contains one
  39.  * CImpIDataObject object that we use to implement the externally
  40.  * exposed interfaces.
  41.  */
  42.  
  43. //DATAOBJ.CPP
  44.  
  45. class CImpIDataObject;
  46. typedef class CImpIDataObject *PIMPIDATAOBJECT;
  47.  
  48. class CDataObject : public IUnknown
  49.     {
  50.     friend class CImpIDataObject;
  51.  
  52.     protected:
  53.         ULONG               m_cRef;
  54.         LPUNKNOWN           m_pUnkOuter;
  55.         PFNDESTROYED        m_pfnDestroy;
  56.  
  57.         HWND                m_hList;        //Listbox of RENDERINGs
  58.  
  59.         //Contained interface implemetation
  60.         PIMPIDATAOBJECT     m_pIDataObject;
  61.  
  62.     public:
  63.         CDataObject(LPUNKNOWN, PFNDESTROYED);
  64.         ~CDataObject(void);
  65.  
  66.         BOOL Init(void);
  67.         void Purge(void);
  68.  
  69.         //Non-delegating object IUnknown
  70.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  71.         STDMETHODIMP_(ULONG) AddRef(void);
  72.         STDMETHODIMP_(ULONG) Release(void);
  73.     };
  74.  
  75. typedef CDataObject *PCDataObject;
  76.  
  77.  
  78.  
  79. /*
  80.  * Interface implementations for the CDataObject object.
  81.  */
  82.  
  83. class CImpIDataObject : public IDataObject
  84.     {
  85.     private:
  86.         ULONG           m_cRef;
  87.         PCDataObject    m_pObj;
  88.         LPUNKNOWN       m_pUnkOuter;
  89.  
  90.     public:
  91.         CImpIDataObject(PCDataObject, LPUNKNOWN);
  92.         ~CImpIDataObject(void);
  93.  
  94.         //IUnknown members that delegate to m_pUnkOuter.
  95.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  96.         STDMETHODIMP_(ULONG) AddRef(void);
  97.         STDMETHODIMP_(ULONG) Release(void);
  98.  
  99.         //IDataObject members
  100.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  101.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  102.         STDMETHODIMP QueryGetData(LPFORMATETC);
  103.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC, LPFORMATETC);
  104.         STDMETHODIMP SetData(LPFORMATETC, LPSTGMEDIUM, BOOL);
  105.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC *);
  106.         STDMETHODIMP DAdvise(LPFORMATETC, DWORD
  107.             ,  LPADVISESINK, DWORD *);
  108.         STDMETHODIMP DUnadvise(DWORD);
  109.         STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *);
  110.     };
  111.  
  112.  
  113. class CEnumFormatEtc : public IEnumFORMATETC
  114.     {
  115.     private:
  116.         ULONG           m_cRef;
  117.         LPUNKNOWN       m_pUnkRef;
  118.         LPFORMATETC     m_prgfe;
  119.         ULONG           m_iCur;
  120.         ULONG           m_cItems;
  121.  
  122.     public:
  123.         CEnumFormatEtc(LPUNKNOWN);
  124.         ~CEnumFormatEtc(void);
  125.  
  126.         BOOL Init(HWND);
  127.  
  128.         //IUnknown members that delegate to m_pUnkOuter.
  129.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  130.         STDMETHODIMP_(ULONG) AddRef(void);
  131.         STDMETHODIMP_(ULONG) Release(void);
  132.  
  133.         //IEnumFORMATETC members
  134.         STDMETHODIMP Next(ULONG, LPFORMATETC, ULONG *);
  135.         STDMETHODIMP Skip(ULONG);
  136.         STDMETHODIMP Reset(void);
  137.         STDMETHODIMP Clone(IEnumFORMATETC **);
  138.     };
  139.  
  140.  
  141. typedef CEnumFormatEtc *PCEnumFormatEtc;
  142.  
  143. #endif //_DATAOBJ_H_
  144.