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 / chap19 / hcosmo / hcosmo.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  7.8 KB  |  258 lines

  1. /*
  2.  * HCOSMO.H
  3.  * Cosmo Handler Chapter 19
  4.  *
  5.  * Definitions and function prototypes for the Cosmo Handler.
  6.  *
  7.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Microsoft
  10.  * Internet  :  kraigb@microsoft.com
  11.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  12.  */
  13.  
  14.  
  15. #ifndef _HCOSMO_H_
  16. #define _HCOSMO_H_
  17.  
  18. #define CHAPTER19
  19. #include <inole.h>
  20. #include <ipoly10.h>      //For POLYLINEDATA definitions
  21.  
  22.  
  23. #define HIMETRIC_PER_INCH           2540
  24.  
  25. //Stream name in the object storage
  26. #define SZSTREAM                    OLETEXT("CONTENTS")
  27.  
  28.  
  29. //HCOSMO.CPP
  30.  
  31. class CFigureClassFactory : public IClassFactory
  32.     {
  33.     protected:
  34.         ULONG           m_cRef;         //Reference count on object
  35.  
  36.     public:
  37.         CFigureClassFactory(void);
  38.         ~CFigureClassFactory(void);
  39.  
  40.         //IUnknown members
  41.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  42.         STDMETHODIMP_(ULONG) AddRef(void);
  43.         STDMETHODIMP_(ULONG) Release(void);
  44.  
  45.         //IClassFactory members
  46.         STDMETHODIMP    CreateInstance(LPUNKNOWN, REFIID, PPVOID);
  47.         STDMETHODIMP    LockServer(BOOL);
  48.     };
  49.  
  50. typedef CFigureClassFactory *PCFigureClassFactory;
  51.  
  52.  
  53. //Magic number to add to aspects returned from IViewObject::Freeze
  54. #define FREEZE_KEY_OFFSET       0x0723
  55.  
  56.  
  57.  
  58. //Forward class references
  59. class CImpIOleObject;
  60. typedef class CImpIOleObject *PCImpIOleObject;
  61. class CImpIViewObject2;
  62. typedef class CImpIViewObject2 *PCImpIViewObject2;
  63. class CImpIPersistStorage;
  64. typedef class CImpIPersistStorage *PCImpIPersistStorage;
  65. class CImpIAdviseSink;
  66. typedef class CImpIAdviseSink *PCImpIAdviseSink;
  67.  
  68.  
  69. //HCOSMO.CPP
  70.  
  71. class CFigure : public IUnknown
  72.     {
  73.     friend class CImpIOleObject;
  74.     friend class CImpIViewObject2;
  75.     friend class CImpIPersistStorage;
  76.     friend class CImpIAdviseSink;
  77.  
  78.     protected:
  79.         ULONG                m_cRef;
  80.         LPUNKNOWN            m_pUnkOuter;
  81.         PFNDESTROYED         m_pfnDestroy;
  82.  
  83.         POLYLINEDATA         m_pl;          //Our actual data.
  84.         UINT                 m_cf;          //Obj clipboard format.
  85.         CLSID                m_clsID;       //Current CLSID
  86.  
  87.         //These are default handler interfaces we use
  88.         LPUNKNOWN            m_pDefIUnknown;
  89.         LPOLEOBJECT          m_pDefIOleObject;
  90.         LPVIEWOBJECT2        m_pDefIViewObject2;
  91.         LPPERSISTSTORAGE     m_pDefIPersistStorage;
  92.         LPDATAOBJECT         m_pDefIDataObject;
  93.  
  94.         //Implemented interfaces
  95.         PCImpIOleObject      m_pImpIOleObject;
  96.         PCImpIViewObject2    m_pImpIViewObject2;
  97.         PCImpIPersistStorage m_pImpIPersistStorage;
  98.         PCImpIAdviseSink     m_pImpIAdviseSink;
  99.  
  100.         //Advise sink we get in IViewObject
  101.         LPADVISESINK         m_pIAdvSinkView;
  102.         DWORD                m_dwAdviseFlags;
  103.         DWORD                m_dwAdviseAspects;
  104.         DWORD                m_dwFrozenAspects;
  105.  
  106.         //Copies of frozen aspects
  107.         POLYLINEDATA         m_plContent;
  108.         POLYLINEDATA         m_plThumbnail;
  109.  
  110.  
  111.     protected:
  112.         void      Draw(HDC, LPRECT, DWORD, DVTARGETDEVICE *
  113.                       , HDC, PPOLYLINEDATA);
  114.         void      PointScale(LPRECT, LPPOINTS, BOOL);
  115.  
  116.     public:
  117.         CFigure(LPUNKNOWN, PFNDESTROYED, HINSTANCE);
  118.         ~CFigure(void);
  119.  
  120.         BOOL      Init(void);
  121.  
  122.         //Non-delegating object IUnknown
  123.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  124.         STDMETHODIMP_(ULONG) AddRef(void);
  125.         STDMETHODIMP_(ULONG) Release(void);
  126.     };
  127.  
  128. typedef CFigure *PCFigure;
  129.  
  130.  
  131.  
  132. class CImpIPersistStorage : public IPersistStorage
  133.     {
  134.     protected:
  135.         ULONG               m_cRef;
  136.         PCFigure            m_pObj;
  137.         LPUNKNOWN           m_pUnkOuter;
  138.         PSSTATE             m_psState;   //Storage state
  139.         BOOL                m_fConvert;  //Are we Converting?
  140.  
  141.     public:
  142.         CImpIPersistStorage(PCFigure, LPUNKNOWN);
  143.         ~CImpIPersistStorage(void);
  144.  
  145.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  146.         STDMETHODIMP_(ULONG) AddRef(void);
  147.         STDMETHODIMP_(ULONG) Release(void);
  148.  
  149.         STDMETHODIMP GetClassID(LPCLSID);
  150.  
  151.         STDMETHODIMP IsDirty(void);
  152.         STDMETHODIMP InitNew(LPSTORAGE);
  153.         STDMETHODIMP Load(LPSTORAGE);
  154.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  155.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  156.         STDMETHODIMP HandsOffStorage(void);
  157.     };
  158.  
  159.  
  160.  
  161. class CImpIOleObject : public IOleObject
  162.     {
  163.     private:
  164.         ULONG           m_cRef;
  165.         PCFigure        m_pObj;
  166.         LPUNKNOWN       m_pUnkOuter;
  167.  
  168.     public:
  169.         CImpIOleObject(PCFigure, LPUNKNOWN);
  170.         ~CImpIOleObject(void);
  171.  
  172.         //IUnknown members that delegate to m_pUnkOuter.
  173.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  174.         STDMETHODIMP_(ULONG) AddRef(void);
  175.         STDMETHODIMP_(ULONG) Release(void);
  176.  
  177.         //IOleObject members
  178.         STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
  179.         STDMETHODIMP GetClientSite(LPOLECLIENTSITE *);
  180.         STDMETHODIMP SetHostNames(LPCOLESTR, LPCOLESTR);
  181.         STDMETHODIMP Close(DWORD);
  182.         STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
  183.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
  184.         STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
  185.         STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT *);
  186.         STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG
  187.                          , HWND, LPCRECT);
  188.         STDMETHODIMP EnumVerbs(LPENUMOLEVERB *);
  189.         STDMETHODIMP Update(void);
  190.         STDMETHODIMP IsUpToDate(void);
  191.         STDMETHODIMP GetUserClassID(CLSID *);
  192.         STDMETHODIMP GetUserType(DWORD, LPOLESTR *);
  193.         STDMETHODIMP SetExtent(DWORD, LPSIZEL);
  194.         STDMETHODIMP GetExtent(DWORD, LPSIZEL);
  195.         STDMETHODIMP Advise(LPADVISESINK, DWORD *);
  196.         STDMETHODIMP Unadvise(DWORD);
  197.         STDMETHODIMP EnumAdvise(LPENUMSTATDATA *);
  198.         STDMETHODIMP GetMiscStatus(DWORD, DWORD *);
  199.         STDMETHODIMP SetColorScheme(LPLOGPALETTE);
  200.     };
  201.  
  202.  
  203. class CImpIViewObject2 : public IViewObject2
  204.     {
  205.     private:
  206.         ULONG           m_cRef;
  207.         PCFigure        m_pObj;
  208.         LPUNKNOWN       m_pUnkOuter;
  209.  
  210.     public:
  211.         CImpIViewObject2(PCFigure, LPUNKNOWN);
  212.         ~CImpIViewObject2(void);
  213.  
  214.         //IUnknown members that delegate to m_pUnkOuter.
  215.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  216.         STDMETHODIMP_(ULONG) AddRef(void);
  217.         STDMETHODIMP_(ULONG) Release(void);
  218.  
  219.         //IViewObject2 members
  220.         STDMETHODIMP Draw(DWORD, LONG, LPVOID, DVTARGETDEVICE *
  221.             , HDC, HDC, LPCRECTL, LPCRECTL
  222.             , BOOL (CALLBACK *)(DWORD), DWORD);
  223.         STDMETHODIMP GetColorSet(DWORD, LONG, LPVOID
  224.             , DVTARGETDEVICE *, HDC, LPLOGPALETTE *);
  225.         STDMETHODIMP Freeze(DWORD, LONG, LPVOID, LPDWORD);
  226.         STDMETHODIMP Unfreeze(DWORD);
  227.         STDMETHODIMP SetAdvise(DWORD, DWORD, LPADVISESINK);
  228.         STDMETHODIMP GetAdvise(LPDWORD, LPDWORD, LPADVISESINK *);
  229.         STDMETHODIMP GetExtent(DWORD, LONG, DVTARGETDEVICE *
  230.             , LPSIZEL);
  231.     };
  232.  
  233.  
  234. class CImpIAdviseSink : public IAdviseSink
  235.     {
  236.     protected:
  237.         ULONG           m_cRef;
  238.         PCFigure        m_pObj;
  239.         LPUNKNOWN       m_pUnkOuter;
  240.  
  241.     public:
  242.         CImpIAdviseSink(PCFigure, LPUNKNOWN);
  243.         ~CImpIAdviseSink(void);
  244.  
  245.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  246.         STDMETHODIMP_(ULONG) AddRef(void);
  247.         STDMETHODIMP_(ULONG) Release(void);
  248.  
  249.         STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  250.         STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  251.         STDMETHODIMP_(void)  OnRename(LPMONIKER);
  252.         STDMETHODIMP_(void)  OnSave(void);
  253.         STDMETHODIMP_(void)  OnClose(void);
  254.     };
  255.  
  256.  
  257. #endif  //_HCOSMO_H_
  258.