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

  1. /*
  2.  * COSMOLE.H
  3.  * Cosmo Chapter 23
  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. //CHAPTER23MOD
  26. //This is for simplification of CCosmoFrame::CheckLineSelection
  27. extern PCToolBar    g_pInPlaceTB;
  28.  
  29. #define ID_HATCHWINDOW  2000
  30. //End CHAPTER23MOD
  31.  
  32. //Function for the object to notify on destruction.
  33. void ObjectDestroyed(void);
  34.  
  35.  
  36. //ICLASSF.CPP
  37. class CFigureClassFactory : public IClassFactory
  38.     {
  39.     protected:
  40.         ULONG           m_cRef;
  41.         PCCosmoFrame    m_pFR;
  42.         BOOL            m_fCreated;     //Created one object yet?
  43.  
  44.     public:
  45.         CFigureClassFactory(PCCosmoFrame);
  46.         ~CFigureClassFactory(void);
  47.  
  48.         //IUnknown members
  49.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  50.         STDMETHODIMP_(ULONG) AddRef(void);
  51.         STDMETHODIMP_(ULONG) Release(void);
  52.  
  53.         //IClassFactory members
  54.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID
  55.                                  , PPVOID);
  56.         STDMETHODIMP         LockServer(BOOL);
  57.     };
  58.  
  59. typedef CFigureClassFactory *PCFigureClassFactory;
  60.  
  61.  
  62. //FIGURE.CPP
  63. //This is what the class factory creates
  64.  
  65. #define CFORMATETCGET   5
  66.  
  67. class CImpIPersistStorage;
  68. typedef class CImpIPersistStorage *PCImpIPersistStorage;
  69. class CImpIDataObject;
  70. typedef class CImpIDataObject *PCImpIDataObject;
  71. class CImpIOleObject;
  72. typedef class CImpIOleObject *PCImpIOleObject;
  73. class CImpIPersistFile;
  74. typedef class CImpIPersistFile *PCImpIPersistFile;
  75. //CHAPTER23MOD
  76. class CImpIOleInPlaceObject;
  77. typedef class CImpIOleInPlaceObject *PCImpIOleInPlaceObject;
  78. class CImpIOleInPlaceActiveObject;
  79. typedef class CImpIOleInPlaceActiveObject *PCImpIOleInPlaceActiveObject;
  80. //End CHAPTER23MOD
  81.  
  82. class CFigure : public IUnknown
  83.     {
  84.     friend class CImpIPersistStorage;
  85.     friend class CImpIDataObject;
  86.     friend class CImpIOleObject;
  87.     friend class CImpIPersistFile;
  88.     //CHAPTER23MOD
  89.     friend class CImpIOleInPlaceObject;
  90.     friend class CImpIOleInPlaceActiveObject;
  91.     //End CHAPTER23MOD
  92.  
  93.     protected:
  94.         ULONG               m_cRef;
  95.         PCCosmoFrame        m_pFR;      //Frame (for UI changes)
  96.         PCCosmoDoc          m_pDoc;     //What holds real polyline
  97.         PCPolyline          m_pPL;      //Copy of m_pDoc->m_pPL
  98.  
  99.         BOOL                m_fEmbedded;
  100.         PFNDESTROYED        m_pfnDestroy;
  101.  
  102.         PCStringTable       m_pST;      //Object strings
  103.  
  104.         //Things for IPersistStorage
  105.         PCImpIPersistStorage m_pImpIPersistStorage;
  106.         LPSTORAGE           m_pIStorage;
  107.         LPSTREAM            m_pIStream;
  108.         CLSID               m_clsID;
  109.  
  110.         //Things for IDataObject
  111.         PCImpIDataObject    m_pImpIDataObject;      //Implemented
  112.         LPDATAADVISEHOLDER  m_pIDataAdviseHolder;   //Used
  113.  
  114.         UINT                m_cf;                   //pDoc->m_cf
  115.         ULONG               m_cfeGet;
  116.         FORMATETC           m_rgfeGet[CFORMATETCGET];
  117.  
  118.         //Things for IOleObject
  119.         PCImpIOleObject     m_pImpIOleObject;       //Implemented
  120.         LPOLEADVISEHOLDER   m_pIOleAdviseHolder;    //Used
  121.         LPOLECLIENTSITE     m_pIOleClientSite;      //Used
  122.  
  123.         LPMONIKER           m_pMoniker;
  124.         DWORD               m_dwRegROT;
  125.         PCImpIPersistFile   m_pImpIPersistFile;     //Implemented
  126.  
  127.         //CHAPTER23MOD
  128.         LPOLEINPLACESITE            m_pIOleIPSite;
  129.         LPOLEINPLACEFRAME           m_pIOleIPFrame;
  130.         LPOLEINPLACEUIWINDOW        m_pIOleIPUIWindow;
  131.  
  132.         PCImpIOleInPlaceObject       m_pImpIOleIPObject;
  133.         PCImpIOleInPlaceActiveObject m_pImpIOleIPActiveObject;
  134.  
  135.         HMENU                       m_hMenuShared;
  136.         HOLEMENU                    m_hOLEMenu;
  137.         HACCEL                      m_hAccel;
  138.  
  139.         PCHatchWin                  m_pHW;      //Hatch window
  140.         PCToolBar                   m_pTB;      //In-place toolbar
  141.         UINT                        m_cyBar;    //Copy of m_pFR->m_cyBar
  142.         BOOL                        m_fUndoDeactivates;
  143.         BOOL                        m_fAllowInPlace;
  144.         BOOL                        m_fForceSave;
  145.         //End CHAPTER23MOD
  146.  
  147.     public:
  148.         CFigure(PFNDESTROYED, PCCosmoDoc);
  149.         ~CFigure(void);
  150.  
  151.         //Non-delegating IUnknown:  we don't support aggregation
  152.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  153.         STDMETHODIMP_(ULONG) AddRef(void);
  154.         STDMETHODIMP_(ULONG) Release(void);
  155.  
  156.         BOOL Init(void);
  157.         void FrameSet(PCCosmoFrame);
  158.         BOOL FIsDirty(void);
  159.         BOOL FIsEmbedded(void);
  160.         void SendAdvise(UINT);
  161.  
  162.         //CHAPTER23MOD
  163.         HRESULT  InPlaceActivate(LPOLECLIENTSITE, BOOL);
  164.         void     InPlaceDeactivate(void);
  165.         HRESULT  UIActivate(void);
  166.         void     UIDeactivate(void);
  167.         BOOL     InPlaceMenuCreate(void);
  168.         BOOL     InPlaceMenuDestroy(void);
  169.         BOOL     InPlaceToolsCreate(void);
  170.         BOOL     InPlaceToolsDestroy(void);
  171.         BOOL     InPlaceToolsRenegotiate(void);
  172.  
  173.         void     OpenIntoWindow(void);
  174.         BOOL     Undo(void);
  175.         //End CHAPTER23MOD
  176.     };
  177.  
  178. typedef CFigure *PCFigure;
  179.  
  180. //Codes for CFigure::SendAdvise
  181. //......Code......................Method called in CFigureSendAdvise...
  182. #define OBJECTCODE_SAVED       0  //IOleAdviseHolder::SendOnSave
  183. #define OBJECTCODE_CLOSED      1  //IOleAdviseHolder::SendOnClose
  184. #define OBJECTCODE_RENAMED     2  //IOleAdviseHolder::SendOnRename
  185. #define OBJECTCODE_SAVEOBJECT  3  //IOleClientSite::SaveObject
  186. #define OBJECTCODE_DATACHANGED 4  //IDataAdviseHolder::SendOnDataChange
  187. #define OBJECTCODE_SHOWWINDOW  5  //IOleClientSite::OnShowWindow(TRUE)
  188. #define OBJECTCODE_HIDEWINDOW  6  //IOleClientSite::OnShowWindow(FALSE)
  189. #define OBJECTCODE_SHOWOBJECT  7  //IOleClientSite::ShowObject
  190.  
  191.  
  192. //IPERSTOR.CPP
  193.  
  194. class CImpIPersistStorage : public IPersistStorage
  195.     {
  196.     protected:
  197.         ULONG               m_cRef;
  198.         PCFigure            m_pObj;
  199.         LPUNKNOWN           m_pUnkOuter;
  200.         PSSTATE             m_psState;      //Storage state
  201.         BOOL                m_fConvert;     //Are we Converting?
  202.  
  203.     public:
  204.         CImpIPersistStorage(PCFigure, LPUNKNOWN);
  205.         ~CImpIPersistStorage(void);
  206.  
  207.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  208.         STDMETHODIMP_(ULONG) AddRef(void);
  209.         STDMETHODIMP_(ULONG) Release(void);
  210.  
  211.         STDMETHODIMP GetClassID(LPCLSID);
  212.  
  213.         STDMETHODIMP IsDirty(void);
  214.         STDMETHODIMP InitNew(LPSTORAGE);
  215.         STDMETHODIMP Load(LPSTORAGE);
  216.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  217.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  218.         STDMETHODIMP HandsOffStorage(void);
  219.     };
  220.  
  221.  
  222.  
  223. //IDATAOBJ.CPP
  224. class CImpIDataObject : public IDataObject
  225.     {
  226.     private:
  227.         ULONG           m_cRef;
  228.         PCFigure        m_pObj;
  229.         LPUNKNOWN       m_pUnkOuter;
  230.  
  231.     public:
  232.         CImpIDataObject(PCFigure, LPUNKNOWN);
  233.         ~CImpIDataObject(void);
  234.  
  235.         //IUnknown members that delegate to m_pUnkOuter.
  236.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  237.         STDMETHODIMP_(ULONG) AddRef(void);
  238.         STDMETHODIMP_(ULONG) Release(void);
  239.  
  240.         //IDataObject members
  241.         STDMETHODIMP GetData(LPFORMATETC, LPSTGMEDIUM);
  242.         STDMETHODIMP GetDataHere(LPFORMATETC, LPSTGMEDIUM);
  243.         STDMETHODIMP QueryGetData(LPFORMATETC);
  244.         STDMETHODIMP GetCanonicalFormatEtc(LPFORMATETC, LPFORMATETC);
  245.         STDMETHODIMP SetData(LPFORMATETC, LPSTGMEDIUM, BOOL);
  246.         STDMETHODIMP EnumFormatEtc(DWORD, LPENUMFORMATETC *);
  247.         STDMETHODIMP DAdvise(LPFORMATETC, DWORD,  LPADVISESINK
  248.                          , DWORD *);
  249.         STDMETHODIMP DUnadvise(DWORD);
  250.         STDMETHODIMP EnumDAdvise(LPENUMSTATDATA *);
  251.     };
  252.  
  253.  
  254. //IOLEOBJ.CPP
  255. class CImpIOleObject : public IOleObject
  256.     {
  257.     private:
  258.         ULONG           m_cRef;
  259.         PCFigure        m_pObj;
  260.         LPUNKNOWN       m_pUnkOuter;
  261.  
  262.     public:
  263.         CImpIOleObject(PCFigure, LPUNKNOWN);
  264.         ~CImpIOleObject(void);
  265.  
  266.         //IUnknown members that delegate to m_pUnkOuter.
  267.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  268.         STDMETHODIMP_(ULONG) AddRef(void);
  269.         STDMETHODIMP_(ULONG) Release(void);
  270.  
  271.         //IOleObject members
  272.         STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
  273.         STDMETHODIMP GetClientSite(LPOLECLIENTSITE *);
  274.         STDMETHODIMP SetHostNames(LPCOLESTR, LPCOLESTR);
  275.         STDMETHODIMP Close(DWORD);
  276.         STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
  277.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
  278.         STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
  279.         STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT *);
  280.         STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND
  281.                          , LPCRECT);
  282.         STDMETHODIMP EnumVerbs(LPENUMOLEVERB *);
  283.         STDMETHODIMP Update(void);
  284.         STDMETHODIMP IsUpToDate(void);
  285.         STDMETHODIMP GetUserClassID(CLSID *);
  286.         STDMETHODIMP GetUserType(DWORD, LPOLESTR *);
  287.         STDMETHODIMP SetExtent(DWORD, LPSIZEL);
  288.         STDMETHODIMP GetExtent(DWORD, LPSIZEL);
  289.         STDMETHODIMP Advise(LPADVISESINK, DWORD *);
  290.         STDMETHODIMP Unadvise(DWORD);
  291.         STDMETHODIMP EnumAdvise(LPENUMSTATDATA *);
  292.         STDMETHODIMP GetMiscStatus(DWORD, DWORD *);
  293.         STDMETHODIMP SetColorScheme(LPLOGPALETTE);
  294.     };
  295.  
  296.  
  297.  
  298. class CImpIPersistFile : public IPersistFile
  299.     {
  300.     protected:
  301.         ULONG               m_cRef;
  302.         PCFigure            m_pObj;
  303.         LPUNKNOWN           m_pUnkOuter;
  304.  
  305.     public:
  306.         CImpIPersistFile(PCFigure, LPUNKNOWN);
  307.         ~CImpIPersistFile(void);
  308.  
  309.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  310.         STDMETHODIMP_(ULONG) AddRef(void);
  311.         STDMETHODIMP_(ULONG) Release(void);
  312.  
  313.         STDMETHODIMP GetClassID(LPCLSID);
  314.  
  315.         STDMETHODIMP IsDirty(void);
  316.         STDMETHODIMP Load(LPCOLESTR, DWORD);
  317.         STDMETHODIMP Save(LPCOLESTR, BOOL);
  318.         STDMETHODIMP SaveCompleted(LPCOLESTR);
  319.         STDMETHODIMP GetCurFile(LPOLESTR *);
  320.     };
  321.  
  322.  
  323.  
  324. //CHAPTER23MOD
  325. //IIPOBJ.CPP
  326. class CImpIOleInPlaceObject : public IOleInPlaceObject
  327.     {
  328.     protected:
  329.         ULONG               m_cRef;
  330.         PCFigure            m_pObj;
  331.         LPUNKNOWN           m_pUnkOuter;
  332.  
  333.     public:
  334.         CImpIOleInPlaceObject(PCFigure, LPUNKNOWN);
  335.         ~CImpIOleInPlaceObject(void);
  336.  
  337.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  338.         STDMETHODIMP_(ULONG) AddRef(void);
  339.         STDMETHODIMP_(ULONG) Release(void);
  340.  
  341.         STDMETHODIMP GetWindow(HWND *);
  342.         STDMETHODIMP ContextSensitiveHelp(BOOL);
  343.         STDMETHODIMP InPlaceDeactivate(void);
  344.         STDMETHODIMP UIDeactivate(void);
  345.         STDMETHODIMP SetObjectRects(LPCRECT, LPCRECT);
  346.         STDMETHODIMP ReactivateAndUndo(void);
  347.     };
  348.  
  349.  
  350.  
  351. //IIPAOBJ.CPP
  352. class CImpIOleInPlaceActiveObject
  353.     : public IOleInPlaceActiveObject
  354.     {
  355.     protected:
  356.         ULONG               m_cRef;
  357.         PCFigure            m_pObj;
  358.         LPUNKNOWN           m_pUnkOuter;
  359.  
  360.     public:
  361.         CImpIOleInPlaceActiveObject(PCFigure, LPUNKNOWN);
  362.         ~CImpIOleInPlaceActiveObject(void);
  363.  
  364.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  365.         STDMETHODIMP_(ULONG) AddRef(void);
  366.         STDMETHODIMP_(ULONG) Release(void);
  367.  
  368.         STDMETHODIMP GetWindow(HWND *);
  369.         STDMETHODIMP ContextSensitiveHelp(BOOL);
  370.         STDMETHODIMP TranslateAccelerator(LPMSG);
  371.         STDMETHODIMP OnFrameWindowActivate(BOOL);
  372.         STDMETHODIMP OnDocWindowActivate(BOOL);
  373.         STDMETHODIMP ResizeBorder(LPCRECT, LPOLEINPLACEUIWINDOW
  374.                          , BOOL);
  375.         STDMETHODIMP EnableModeless(BOOL);
  376.     };
  377.  
  378. //End CHAPTER23MOD
  379.  
  380. #endif _COSMOLE_H_
  381.