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 / chap18 / cosmo / cosmole.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  8KB  |  242 lines

  1. /*
  2.  * COSMOLE.H
  3.  * Cosmo Chapter 18
  4.  *
  5.  * Include file containing all compound document related
  6.  * definitions.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14.  
  15.  
  16. #ifndef _COSMOLE_H_
  17. #define _COSMOLE_H_
  18.  
  19.  
  20. //These are global for simplification of object implementation.
  21. extern ULONG g_cObj;
  22. extern ULONG g_cLock;
  23. extern HWND  g_hWnd;
  24.  
  25.  
  26. //Function for the object to notify on destruction.
  27. void ObjectDestroyed(void);
  28.  
  29.  
  30. //ICLASSF.CPP
  31. class CFigureClassFactory : public IClassFactory
  32.     {
  33.     protected:
  34.         ULONG           m_cRef;
  35.         PCCosmoFrame    m_pFR;
  36.         BOOL            m_fCreated;     //Created one object yet?
  37.  
  38.     public:
  39.         CFigureClassFactory(PCCosmoFrame);
  40.         ~CFigureClassFactory(void);
  41.  
  42.         //IUnknown members
  43.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  44.         STDMETHODIMP_(ULONG) AddRef(void);
  45.         STDMETHODIMP_(ULONG) Release(void);
  46.  
  47.         //IClassFactory members
  48.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID
  49.                                  , PPVOID);
  50.         STDMETHODIMP         LockServer(BOOL);
  51.     };
  52.  
  53. typedef CFigureClassFactory *PCFigureClassFactory;
  54.  
  55.  
  56. //FIGURE.CPP
  57. //This is what the class factory creates
  58.  
  59. #define CFORMATETCGET   5
  60.  
  61. class CImpIPersistStorage;
  62. typedef class CImpIPersistStorage *PCImpIPersistStorage;
  63. class CImpIDataObject;
  64. typedef class CImpIDataObject *PCImpIDataObject;
  65. class CImpIOleObject;
  66. typedef class CImpIOleObject *PCImpIOleObject;
  67.  
  68.  
  69. class CFigure : public IUnknown
  70.     {
  71.     friend class CImpIPersistStorage;
  72.     friend class CImpIDataObject;
  73.     friend class CImpIOleObject;
  74.  
  75.     protected:
  76.         ULONG               m_cRef;
  77.         PCCosmoFrame        m_pFR;      //Frame (for UI changes)
  78.         PCCosmoDoc          m_pDoc;     //What holds real polyline
  79.         PCPolyline          m_pPL;      //Copy of m_pDoc->m_pPL
  80.  
  81.         BOOL                m_fEmbedded;
  82.         PFNDESTROYED        m_pfnDestroy;
  83.  
  84.         PCStringTable       m_pST;      //Object strings
  85.  
  86.         //Things for IPersistStorage
  87.         PCImpIPersistStorage m_pImpIPersistStorage;
  88.         LPSTORAGE           m_pIStorage;
  89.         LPSTREAM            m_pIStream;
  90.         CLSID               m_clsID;
  91.  
  92.         //Things for IDataObject
  93.         PCImpIDataObject    m_pImpIDataObject;      //Implemented
  94.         LPDATAADVISEHOLDER  m_pIDataAdviseHolder;   //Used
  95.  
  96.         UINT                m_cf;                   //pDoc->m_cf
  97.         ULONG               m_cfeGet;
  98.         FORMATETC           m_rgfeGet[CFORMATETCGET];
  99.  
  100.         //Things for IOleObject
  101.         PCImpIOleObject     m_pImpIOleObject;       //Implemented
  102.         LPOLEADVISEHOLDER   m_pIOleAdviseHolder;    //Used
  103.         LPOLECLIENTSITE     m_pIOleClientSite;      //Used
  104.  
  105.  
  106.     public:
  107.         CFigure(PFNDESTROYED, PCCosmoDoc);
  108.         ~CFigure(void);
  109.  
  110.         //Non-delegating IUnknown:  we don't support aggregation
  111.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  112.         STDMETHODIMP_(ULONG) AddRef(void);
  113.         STDMETHODIMP_(ULONG) Release(void);
  114.  
  115.         BOOL Init(void);
  116.         void FrameSet(PCCosmoFrame);
  117.         BOOL FIsDirty(void);
  118.         BOOL FIsEmbedded(void);
  119.         void SendAdvise(UINT);
  120.     };
  121.  
  122. typedef CFigure *PCFigure;
  123.  
  124. //Codes for CFigure::SendAdvise
  125. //......Code......................Method called in CFigureSendAdvise...
  126. #define OBJECTCODE_SAVED       0  //IOleAdviseHolder::SendOnSave
  127. #define OBJECTCODE_CLOSED      1  //IOleAdviseHolder::SendOnClose
  128. #define OBJECTCODE_RENAMED     2  //IOleAdviseHolder::SendOnRename
  129. #define OBJECTCODE_SAVEOBJECT  3  //IOleClientSite::SaveObject
  130. #define OBJECTCODE_DATACHANGED 4  //IDataAdviseHolder::SendOnDataChange
  131. #define OBJECTCODE_SHOWWINDOW  5  //IOleClientSite::OnShowWindow(TRUE)
  132. #define OBJECTCODE_HIDEWINDOW  6  //IOleClientSite::OnShowWindow(FALSE)
  133. #define OBJECTCODE_SHOWOBJECT  7  //IOleClientSite::ShowObject
  134.  
  135.  
  136. //IPERSTOR.CPP
  137.  
  138. class CImpIPersistStorage : public IPersistStorage
  139.     {
  140.     protected:
  141.         ULONG               m_cRef;
  142.         PCFigure            m_pObj;
  143.         LPUNKNOWN           m_pUnkOuter;
  144.         PSSTATE             m_psState;      //Storage state
  145.         BOOL                m_fConvert;     //Are we Converting?
  146.  
  147.     public:
  148.         CImpIPersistStorage(PCFigure, LPUNKNOWN);
  149.         ~CImpIPersistStorage(void);
  150.  
  151.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  152.         STDMETHODIMP_(ULONG) AddRef(void);
  153.         STDMETHODIMP_(ULONG) Release(void);
  154.  
  155.         STDMETHODIMP GetClassID(LPCLSID);
  156.  
  157.         STDMETHODIMP IsDirty(void);
  158.         STDMETHODIMP InitNew(LPSTORAGE);
  159.         STDMETHODIMP Load(LPSTORAGE);
  160.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  161.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  162.         STDMETHODIMP HandsOffStorage(void);
  163.     };
  164.  
  165.  
  166.  
  167. //IDATAOBJ.CPP
  168. class CImpIDataObject : public IDataObject
  169.     {
  170.     private:
  171.         ULONG           m_cRef;
  172.         PCFigure        m_pObj;
  173.         LPUNKNOWN       m_pUnkOuter;
  174.  
  175.     public:
  176.         CImpIDataObject(PCFigure, LPUNKNOWN);
  177.         ~CImpIDataObject(void);
  178.  
  179.         //IUnknown members that delegate to m_pUnkOuter.
  180.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  181.         STDMETHODIMP_(ULONG) AddRef(void);
  182.         STDMETHODIMP_(ULONG) Release(void);
  183.  
  184.         //IDataObject members
  185.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  186.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  187.         STDMETHODIMP QueryGetData(LPFORMATETC);
  188.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC, LPFORMATETC);
  189.         STDMETHODIMP SetData(LPFORMATETC, LPSTGMEDIUM, BOOL);
  190.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC *);
  191.         STDMETHODIMP DAdvise(LPFORMATETC, DWORD,  LPADVISESINK
  192.                          , DWORD *);
  193.         STDMETHODIMP DUnadvise(DWORD);
  194.         STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *);
  195.     };
  196.  
  197.  
  198. //IOLEOBJ.CPP
  199. class CImpIOleObject : public IOleObject
  200.     {
  201.     private:
  202.         ULONG           m_cRef;
  203.         PCFigure        m_pObj;
  204.         LPUNKNOWN       m_pUnkOuter;
  205.  
  206.     public:
  207.         CImpIOleObject(PCFigure, LPUNKNOWN);
  208.         ~CImpIOleObject(void);
  209.  
  210.         //IUnknown members that delegate to m_pUnkOuter.
  211.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  212.         STDMETHODIMP_(ULONG) AddRef(void);
  213.         STDMETHODIMP_(ULONG) Release(void);
  214.  
  215.         //IOleObject members
  216.         STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
  217.         STDMETHODIMP GetClientSite(LPOLECLIENTSITE *);
  218.         STDMETHODIMP SetHostNames(LPCOLESTR, LPCOLESTR);
  219.         STDMETHODIMP Close(DWORD);
  220.         STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
  221.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
  222.         STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
  223.         STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT *);
  224.         STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND
  225.                          , LPCRECT);
  226.         STDMETHODIMP EnumVerbs(LPENUMOLEVERB *);
  227.         STDMETHODIMP Update(void);
  228.         STDMETHODIMP IsUpToDate(void);
  229.         STDMETHODIMP GetUserClassID(CLSID *);
  230.         STDMETHODIMP GetUserType(DWORD, LPOLESTR *);
  231.         STDMETHODIMP SetExtent(DWORD, LPSIZEL);
  232.         STDMETHODIMP GetExtent(DWORD, LPSIZEL);
  233.         STDMETHODIMP Advise(LPADVISESINK, DWORD *);
  234.         STDMETHODIMP Unadvise(DWORD);
  235.         STDMETHODIMP EnumAdvise(LPENUMSTATDATA *);
  236.         STDMETHODIMP GetMiscStatus(DWORD, DWORD *);
  237.         STDMETHODIMP SetColorScheme(LPLOGPALETTE);
  238.     };
  239.  
  240.  
  241. #endif _COSMOLE_H_
  242.