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 / chap21 / cosmo / cosmole.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  8.7 KB  |  282 lines

  1. /*
  2.  * COSMOLE.H
  3.  * Cosmo Chapter 21
  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. //CHAPTER21MOD
  68. class CImpIPersistFile;
  69. typedef class CImpIPersistFile *PCImpIPersistFile;
  70. //End CHAPTER21MOD
  71.  
  72. class CFigure : public IUnknown
  73.     {
  74.     friend class CImpIPersistStorage;
  75.     friend class CImpIDataObject;
  76.     friend class CImpIOleObject;
  77.     //CHAPTER21MOD
  78.     friend class CImpIPersistFile;
  79.     //End CHAPTER21MOD
  80.  
  81.     protected:
  82.         ULONG               m_cRef;
  83.         PCCosmoFrame        m_pFR;      //Frame (for UI changes)
  84.         PCCosmoDoc          m_pDoc;     //What holds real polyline
  85.         PCPolyline          m_pPL;      //Copy of m_pDoc->m_pPL
  86.  
  87.         BOOL                m_fEmbedded;
  88.         PFNDESTROYED        m_pfnDestroy;
  89.  
  90.         PCStringTable       m_pST;      //Object strings
  91.  
  92.         //Things for IPersistStorage
  93.         PCImpIPersistStorage m_pImpIPersistStorage;
  94.         LPSTORAGE           m_pIStorage;
  95.         LPSTREAM            m_pIStream;
  96.         CLSID               m_clsID;
  97.  
  98.         //Things for IDataObject
  99.         PCImpIDataObject    m_pImpIDataObject;      //Implemented
  100.         LPDATAADVISEHOLDER  m_pIDataAdviseHolder;   //Used
  101.  
  102.         UINT                m_cf;                   //pDoc->m_cf
  103.         ULONG               m_cfeGet;
  104.         FORMATETC           m_rgfeGet[CFORMATETCGET];
  105.  
  106.         //Things for IOleObject
  107.         PCImpIOleObject     m_pImpIOleObject;       //Implemented
  108.         LPOLEADVISEHOLDER   m_pIOleAdviseHolder;    //Used
  109.         LPOLECLIENTSITE     m_pIOleClientSite;      //Used
  110.  
  111.         //CHAPTER21MOD
  112.         LPMONIKER           m_pMoniker;
  113.         DWORD               m_dwRegROT;
  114.         PCImpIPersistFile   m_pImpIPersistFile;     //Implemented
  115.         //End CHAPTER21MOD
  116.  
  117.     public:
  118.         CFigure(PFNDESTROYED, PCCosmoDoc);
  119.         ~CFigure(void);
  120.  
  121.         //Non-delegating IUnknown:  we don't support aggregation
  122.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  123.         STDMETHODIMP_(ULONG) AddRef(void);
  124.         STDMETHODIMP_(ULONG) Release(void);
  125.  
  126.         BOOL Init(void);
  127.         void FrameSet(PCCosmoFrame);
  128.         BOOL FIsDirty(void);
  129.         BOOL FIsEmbedded(void);
  130.         void SendAdvise(UINT);
  131.     };
  132.  
  133. typedef CFigure *PCFigure;
  134.  
  135. //Codes for CFigure::SendAdvise
  136. //......Code......................Method called in CFigureSendAdvise...
  137. #define OBJECTCODE_SAVED       0  //IOleAdviseHolder::SendOnSave
  138. #define OBJECTCODE_CLOSED      1  //IOleAdviseHolder::SendOnClose
  139. #define OBJECTCODE_RENAMED     2  //IOleAdviseHolder::SendOnRename
  140. #define OBJECTCODE_SAVEOBJECT  3  //IOleClientSite::SaveObject
  141. #define OBJECTCODE_DATACHANGED 4  //IDataAdviseHolder::SendOnDataChange
  142. #define OBJECTCODE_SHOWWINDOW  5  //IOleClientSite::OnShowWindow(TRUE)
  143. #define OBJECTCODE_HIDEWINDOW  6  //IOleClientSite::OnShowWindow(FALSE)
  144. #define OBJECTCODE_SHOWOBJECT  7  //IOleClientSite::ShowObject
  145.  
  146.  
  147. //IPERSTOR.CPP
  148.  
  149. class CImpIPersistStorage : public IPersistStorage
  150.     {
  151.     protected:
  152.         ULONG               m_cRef;
  153.         PCFigure            m_pObj;
  154.         LPUNKNOWN           m_pUnkOuter;
  155.         PSSTATE             m_psState;      //Storage state
  156.         BOOL                m_fConvert;     //Are we Converting?
  157.  
  158.     public:
  159.         CImpIPersistStorage(PCFigure, LPUNKNOWN);
  160.         ~CImpIPersistStorage(void);
  161.  
  162.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  163.         STDMETHODIMP_(ULONG) AddRef(void);
  164.         STDMETHODIMP_(ULONG) Release(void);
  165.  
  166.         STDMETHODIMP GetClassID(LPCLSID);
  167.  
  168.         STDMETHODIMP IsDirty(void);
  169.         STDMETHODIMP InitNew(LPSTORAGE);
  170.         STDMETHODIMP Load(LPSTORAGE);
  171.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  172.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  173.         STDMETHODIMP HandsOffStorage(void);
  174.     };
  175.  
  176.  
  177.  
  178. //IDATAOBJ.CPP
  179. class CImpIDataObject : public IDataObject
  180.     {
  181.     private:
  182.         ULONG           m_cRef;
  183.         PCFigure        m_pObj;
  184.         LPUNKNOWN       m_pUnkOuter;
  185.  
  186.     public:
  187.         CImpIDataObject(PCFigure, LPUNKNOWN);
  188.         ~CImpIDataObject(void);
  189.  
  190.         //IUnknown members that delegate to m_pUnkOuter.
  191.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  192.         STDMETHODIMP_(ULONG) AddRef(void);
  193.         STDMETHODIMP_(ULONG) Release(void);
  194.  
  195.         //IDataObject members
  196.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  197.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  198.         STDMETHODIMP QueryGetData(LPFORMATETC);
  199.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC, LPFORMATETC);
  200.         STDMETHODIMP SetData(LPFORMATETC, LPSTGMEDIUM, BOOL);
  201.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC *);
  202.         STDMETHODIMP DAdvise(LPFORMATETC, DWORD,  LPADVISESINK
  203.                          , DWORD *);
  204.         STDMETHODIMP DUnadvise(DWORD);
  205.         STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *);
  206.     };
  207.  
  208.  
  209. //IOLEOBJ.CPP
  210. class CImpIOleObject : public IOleObject
  211.     {
  212.     private:
  213.         ULONG           m_cRef;
  214.         PCFigure        m_pObj;
  215.         LPUNKNOWN       m_pUnkOuter;
  216.  
  217.     public:
  218.         CImpIOleObject(PCFigure, LPUNKNOWN);
  219.         ~CImpIOleObject(void);
  220.  
  221.         //IUnknown members that delegate to m_pUnkOuter.
  222.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  223.         STDMETHODIMP_(ULONG) AddRef(void);
  224.         STDMETHODIMP_(ULONG) Release(void);
  225.  
  226.         //IOleObject members
  227.         STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
  228.         STDMETHODIMP GetClientSite(LPOLECLIENTSITE *);
  229.         STDMETHODIMP SetHostNames(LPCOLESTR, LPCOLESTR);
  230.         STDMETHODIMP Close(DWORD);
  231.         STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
  232.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
  233.         STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
  234.         STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT *);
  235.         STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND
  236.                          , LPCRECT);
  237.         STDMETHODIMP EnumVerbs(LPENUMOLEVERB *);
  238.         STDMETHODIMP Update(void);
  239.         STDMETHODIMP IsUpToDate(void);
  240.         STDMETHODIMP GetUserClassID(CLSID *);
  241.         STDMETHODIMP GetUserType(DWORD, LPOLESTR *);
  242.         STDMETHODIMP SetExtent(DWORD, LPSIZEL);
  243.         STDMETHODIMP GetExtent(DWORD, LPSIZEL);
  244.         STDMETHODIMP Advise(LPADVISESINK, DWORD *);
  245.         STDMETHODIMP Unadvise(DWORD);
  246.         STDMETHODIMP EnumAdvise(LPENUMSTATDATA *);
  247.         STDMETHODIMP GetMiscStatus(DWORD, DWORD *);
  248.         STDMETHODIMP SetColorScheme(LPLOGPALETTE);
  249.     };
  250.  
  251.  
  252. //CHAPTER21MOD
  253.  
  254. class CImpIPersistFile : public IPersistFile
  255.     {
  256.     protected:
  257.         ULONG               m_cRef;
  258.         PCFigure            m_pObj;
  259.         LPUNKNOWN           m_pUnkOuter;
  260.  
  261.     public:
  262.         CImpIPersistFile(PCFigure, LPUNKNOWN);
  263.         ~CImpIPersistFile(void);
  264.  
  265.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  266.         STDMETHODIMP_(ULONG) AddRef(void);
  267.         STDMETHODIMP_(ULONG) Release(void);
  268.  
  269.         STDMETHODIMP GetClassID(LPCLSID);
  270.  
  271.         STDMETHODIMP IsDirty(void);
  272.         STDMETHODIMP Load(LPCOLESTR, DWORD);
  273.         STDMETHODIMP Save(LPCOLESTR, BOOL);
  274.         STDMETHODIMP SaveCompleted(LPCOLESTR);
  275.         STDMETHODIMP GetCurFile(LPOLESTR *);
  276.     };
  277.  
  278. //End CHAPTER21MOD
  279.  
  280.  
  281. #endif _COSMOLE_H_
  282.