home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / BOCOLE.PAK / BOLEDATA.H < prev    next >
C/C++ Source or Header  |  1995-08-29  |  4KB  |  147 lines

  1. //
  2. //**************************************************************************
  3. // 
  4. // BOleData.h --   Declares a data cache object which is used for delayed
  5. //                 rendering.
  6. //
  7. // Copyright (c) 1993,94 by Borland International, Inc. All rights reserved
  8. //
  9. //**************************************************************************
  10.  
  11. #ifndef _BOLEDATA_H
  12. #define _BOLEDATA_H 1
  13.  
  14. #include "BOle.h"
  15. #include "BOleComp.h"
  16.  
  17. // This is where the cached data actually lives.
  18. //
  19. typedef struct FAR tagBOleDataItem {
  20.     struct FAR tagBOleDataItem FAR *pNext;
  21.     FORMATETC    fmtEtc;
  22.     STGMEDIUM    tymed;
  23. } BOleDataItem;
  24.  
  25. // BOleData -- Provides a data cache object for use when copying from
  26. //             an embedding.
  27. //
  28. //
  29. //
  30. //
  31. class _ICLASS BOleData : public BOleComponent, 
  32.                          public IDataObject
  33. {
  34.     public:
  35.  
  36.         BOleData (BOleClassManager *, PIBUnknownMain);
  37.         ~BOleData ();
  38.  
  39.         // IUnknown Methods
  40.         //
  41.         DEFINE_IUNKNOWN (pObjOuter);
  42.         HRESULT _IFUNC QueryInterfaceMain (REFIID iid, LPVOID FAR* pif);
  43.  
  44.     protected:
  45.  
  46.         BOleDataItem FAR *pFirstItem;
  47.         BOleDataItem FAR *pLastItem;
  48.         void FreeItems();
  49.  
  50.         friend  class _ICLASS  BOleEnumFormatEtc;
  51.  
  52.         // IDataObject methods
  53.         //
  54.         virtual HRESULT _IFUNC GetData (LPFORMATETC, LPSTGMEDIUM);
  55.         virtual HRESULT _IFUNC GetDataHere (LPFORMATETC, LPSTGMEDIUM);
  56.         virtual HRESULT _IFUNC QueryGetData (LPFORMATETC);
  57.         virtual HRESULT _IFUNC GetCanonicalFormatEtc (LPFORMATETC, LPFORMATETC);
  58.         virtual HRESULT _IFUNC SetData (LPFORMATETC, STGMEDIUM FAR *, BOOL);
  59.         virtual HRESULT _IFUNC EnumFormatEtc (DWORD, LPENUMFORMATETC FAR*);
  60.         virtual HRESULT _IFUNC DAdvise (FORMATETC FAR*, DWORD, LPADVISESINK, DWORD FAR*);
  61.         virtual HRESULT _IFUNC DUnadvise (DWORD);
  62.         virtual HRESULT _IFUNC EnumDAdvise (LPENUMSTATDATA FAR*);
  63.  
  64. };
  65.  
  66. // BOleEnumFormatEtc -- Provides a "cursor" on the list of formats
  67. //                      offered by BOleData
  68. //
  69. class _ICLASS BOleEnumFormatEtc : public IEnumFORMATETC
  70. {
  71.     public:
  72.  
  73.     BOleEnumFormatEtc( BOleData *Data );
  74.  
  75.     // IUnknown methods
  76.     //
  77.     HRESULT _IFUNC QueryInterface(REFIID iid, void FAR* FAR* pif);
  78.     ULONG _IFUNC AddRef();
  79.     ULONG _IFUNC Release();
  80.  
  81.     // IEnumFORMATETC methods
  82.     //
  83.     HRESULT _IFUNC Next (ULONG celt, FORMATETC FAR * rgelt,
  84.                                 ULONG FAR* pceltFetched);
  85.     HRESULT _IFUNC Skip (ULONG celt);
  86.     HRESULT _IFUNC Reset ();
  87.     HRESULT _IFUNC Clone (IEnumFORMATETC FAR* FAR* ppenum);
  88.  
  89.     // Private methods
  90.     //
  91.     void Resync();
  92.  
  93.     BOleDataItem FAR *pCurItem;
  94.     BOleDataItem FAR *pFirstItem;
  95.     BOleDataItem FAR *pLastItem;
  96.     BOleData *pData;
  97.     LONG nRef;
  98. };
  99.  
  100. // BOleShadowData -- The execution of EmptyClipboard() causes OLE2 to call
  101. //                   CoDisconnectObject on the data object which has been 
  102. //                   posted to the clipboard. 
  103. //
  104. //                   The consequence is that if we post the original objects
  105. //                   (as opposed to clones of them), OLE2 might FORCE the 
  106. //                   refcount of such objects to zero on our behalf. 
  107. //
  108. //                   To solve this we post a small shadow object which 
  109. //                   delegates IDataObject to the real object, but implements
  110. //                   IUnknown here (stopping CoDisconnectObject from 
  111. //                   decrementing the real object until it goes to zero).
  112. //
  113. class _ICLASS BOleShadowData : public BOleComponent, public IDataObject
  114. {
  115.     public:
  116.  
  117.         BOleShadowData (BOleClassManager *pCM, LPDATAOBJECT pDeleg);
  118.         virtual ~BOleShadowData();
  119.         LPDATAOBJECT GetRealData() {return pDelegate;}
  120.     
  121.         DEFINE_IUNKNOWN(pObjOuter);
  122.  
  123.         // IDataObject
  124.         //
  125.         virtual HRESULT _IFUNC GetData (LPFORMATETC, LPSTGMEDIUM);
  126.         virtual HRESULT _IFUNC GetDataHere (LPFORMATETC, LPSTGMEDIUM);
  127.         virtual HRESULT _IFUNC QueryGetData (LPFORMATETC);
  128.         virtual HRESULT _IFUNC GetCanonicalFormatEtc (LPFORMATETC, LPFORMATETC);
  129.         virtual HRESULT _IFUNC SetData (LPFORMATETC, STGMEDIUM FAR *, BOOL);
  130.         virtual HRESULT _IFUNC EnumFormatEtc (DWORD, LPENUMFORMATETC FAR*);
  131.         virtual HRESULT _IFUNC DAdvise (FORMATETC FAR*, DWORD, LPADVISESINK, DWORD FAR*);
  132.         virtual HRESULT _IFUNC DUnadvise (DWORD);
  133.         virtual HRESULT _IFUNC EnumDAdvise (LPENUMSTATDATA FAR*);
  134.  
  135.         // IUnknown
  136.         //
  137.         virtual HRESULT _IFUNC QueryInterfaceMain(REFIID iid, void FAR* FAR* pif);
  138.  
  139.     protected:
  140.  
  141.         LPDATAOBJECT pDelegate;
  142. };
  143.  
  144. #endif
  145.  
  146.  
  147.