DATAOBJ.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * DATAOBJ.H
  3.  * Data Object Chapter 6
  4.  *
  5.  * Classes that implement the Data Object independent of whether
  6.  * we live in a DLL or EXE.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Right Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14. #ifndef _DATAOBJ_H_
  15. #define _DATAOBJ_H_
  16. #define INC_OLE2
  17. #define CHAPTER10
  18. #include <inole.h>
  19. //Data size types
  20. #define DOSIZE_SMALL        0
  21. #define DOSIZE_MEDIUM       1
  22. #define DOSIZE_LARGE        2
  23. #define DOSIZE_CSIZES       3
  24. //Data sizes
  25. #define CCHTEXTSMALL        64      //Text grows * 16 charactrs
  26. #define CCHTEXTMEDIUM       1024
  27. #define CCHTEXTLARGE        16384
  28. #define CXYBITMAPSMALL      16      //Bitmaps grow * 4 pixels
  29. #define CXYBITMAPMEDIUM     64
  30. #define CXYBITMAPLARGE      256
  31. #define CRECMETAFILESMALL   4       //Metafiles grows * 9 records;
  32. #define CRECMETAFILEMEDIUM  12      //the number of actual records
  33. #define CRECMETAFILELARGE   36      //is the square of these
  34. //Resources for this data object.
  35. #define IDB_MIN             1       //Keep this DOSIZE_SMALL+1
  36. #define IDB_16BY16          1
  37. #define IDB_64BY64          2
  38. #define IDB_256BY256        3
  39. #define IDB_MAX             3
  40. #define IDR_MENU                        1
  41. #define IDR_ADVISORICON                 1
  42. #define IDM_ADVISEITERATIONSMIN         100
  43. #define IDM_ADVISEITERATIONS16          100
  44. #define IDM_ADVISEITERATIONS64          101
  45. #define IDM_ADVISEITERATIONS144         102
  46. #define IDM_ADVISEITERATIONS256         103
  47. #define IDM_ADVISEITERATIONS400         104
  48. #define IDM_ADVISEITERATIONS572         105
  49. /*
  50.  * The DataObject object is implemented in its own class with its
  51.  * own IUnknown to support aggregation.  It contains one
  52.  * CImpIDataObject object that we use to implement the externally
  53.  * exposed interfaces.
  54.  */
  55. #define CFORMATETCGET       3
  56. //DATAOBJ.CPP
  57. LRESULT APIENTRY AdvisorWndProc(HWND, UINT, WPARAM, LPARAM);
  58. class CImpIDataObject;
  59. typedef class CImpIDataObject *PCImpIDataObject;
  60. class CDataObject : public IUnknown
  61.     {
  62.     friend class CImpIDataObject;
  63.     friend LRESULT APIENTRY AdvisorWndProc(HWND, UINT
  64.         , WPARAM, LPARAM);
  65.     protected:
  66.         ULONG               m_cRef;
  67.         LPUNKNOWN           m_pUnkOuter;
  68.         PFNDESTROYED        m_pfnDestroy;
  69.         UINT                m_iSize;        //Data size for Render*
  70.         HBITMAP             m_rghBmp[DOSIZE_CSIZES]; //Cache bitmaps
  71.         HWND                m_hWndAdvise;   //Popup with Advise menu
  72.         DWORD               m_dwAdvFlags;   //Notification flags
  73.         //Contained interface implemetation
  74.         PCImpIDataObject    m_pImpIDataObject;
  75.         //Other interfaces used, implemented elsewhere
  76.         LPDATAADVISEHOLDER  m_pIDataAdviseHolder;
  77.         //Arrays for IDataObject::EnumFormatEtc
  78.         ULONG               m_cfeGet;
  79.         FORMATETC           m_rgfeGet[CFORMATETCGET];
  80.     protected:
  81.         //Functions for use from IDataObject::GetData
  82.         HRESULT     RenderText(LPSTGMEDIUM);
  83.         HRESULT     RenderBitmap(LPSTGMEDIUM);
  84.         HRESULT     RenderMetafilePict(LPSTGMEDIUM);
  85.     public:
  86.         CDataObject(LPUNKNOWN, PFNDESTROYED, UINT);
  87.         ~CDataObject(void);
  88.         BOOL Init(void);
  89.         //Non-delegating object IUnknown
  90.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  91.         STDMETHODIMP_(ULONG) AddRef(void);
  92.         STDMETHODIMP_(ULONG) Release(void);
  93.     };
  94. typedef CDataObject *PCDataObject;
  95. /*
  96.  * Interface implementations for the CDataObject object.
  97.  */
  98. class CImpIDataObject : public IDataObject
  99.     {
  100.     private:
  101.         ULONG           m_cRef;
  102.         PCDataObject    m_pObj;
  103.         LPUNKNOWN       m_pUnkOuter;
  104.     public:
  105.         CImpIDataObject(PCDataObject, LPUNKNOWN);
  106.         ~CImpIDataObject(void);
  107.         //IUnknown members that delegate to m_pUnkOuter.
  108.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  109.         STDMETHODIMP_(ULONG) AddRef(void);
  110.         STDMETHODIMP_(ULONG) Release(void);
  111.         //IDataObject members
  112.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  113.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  114.         STDMETHODIMP QueryGetData(LPFORMATETC);
  115.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC,LPFORMATETC);
  116.         STDMETHODIMP SetData(LPFORMATETC, LPSTGMEDIUM, BOOL);
  117.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC *);
  118.         STDMETHODIMP DAdvise(LPFORMATETC, DWORD,  LPADVISESINK
  119.             , DWORD *);
  120.         STDMETHODIMP DUnadvise(DWORD);
  121.         STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *);
  122.     };
  123. /*
  124.  * IEnumFORMATETC object that is created from
  125.  * IDataObject::EnumFormatEtc.  This object lives on its own.
  126.  */
  127. class CEnumFormatEtc : public IEnumFORMATETC
  128.     {
  129.     private:
  130.         ULONG           m_cRef;         //Object reference count
  131.         ULONG           m_iCur;         //Current element.
  132.         ULONG           m_cfe;          //Number of FORMATETCs in us
  133.         LPFORMATETC     m_prgfe;        //Source of FORMATETCs
  134.     public:
  135.         CEnumFormatEtc(ULONG, LPFORMATETC);
  136.         ~CEnumFormatEtc(void);
  137.         //IUnknown members
  138.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  139.         STDMETHODIMP_(ULONG) AddRef(void);
  140.         STDMETHODIMP_(ULONG) Release(void);
  141.         //IEnumFORMATETC members
  142.         STDMETHODIMP Next(ULONG, LPFORMATETC, ULONG *);
  143.         STDMETHODIMP Skip(ULONG);
  144.         STDMETHODIMP Reset(void);
  145.         STDMETHODIMP Clone(IEnumFORMATETC **);
  146.     };
  147. typedef CEnumFormatEtc *PCEnumFormatEtc;
  148. #endif //_DATAOBJ_H_