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 / chap17 / patron / tenant.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-03  |  7.5 KB  |  250 lines

  1. /*
  2.  * TENANT.H
  3.  * Patron Chapter 17
  4.  *
  5.  * Definitions and function prototypes for the CTenant class
  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 _TENANT_H_
  16. #define _TENANT_H_
  17.  
  18.  
  19. //CHAPTER17MOD
  20.  
  21. class CImpIOleClientSite : public IOleClientSite
  22.     {
  23.     protected:
  24.         ULONG               m_cRef;
  25.         class CTenant      *m_pTen;
  26.         LPUNKNOWN           m_pUnkOuter;
  27.  
  28.     public:
  29.         CImpIOleClientSite(class CTenant *, LPUNKNOWN);
  30.         ~CImpIOleClientSite(void);
  31.  
  32.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  33.         STDMETHODIMP_(ULONG) AddRef(void);
  34.         STDMETHODIMP_(ULONG) Release(void);
  35.  
  36.         STDMETHODIMP SaveObject(void);
  37.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
  38.         STDMETHODIMP GetContainer(LPOLECONTAINER *);
  39.         STDMETHODIMP ShowObject(void);
  40.         STDMETHODIMP OnShowWindow(BOOL);
  41.         STDMETHODIMP RequestNewObjectLayout(void);
  42.     };
  43.  
  44. typedef CImpIOleClientSite *PCImpIOleClientSite;
  45.  
  46.  
  47.  
  48. class CImpIAdviseSink : public IAdviseSink
  49.     {
  50.     protected:
  51.         ULONG               m_cRef;
  52.         class CTenant      *m_pTen;
  53.         LPUNKNOWN           m_pUnkOuter;
  54.  
  55.     public:
  56.         CImpIAdviseSink(class CTenant *, LPUNKNOWN);
  57.         ~CImpIAdviseSink(void);
  58.  
  59.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  60.         STDMETHODIMP_(ULONG) AddRef(void);
  61.         STDMETHODIMP_(ULONG) Release(void);
  62.  
  63.         STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  64.         STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  65.         STDMETHODIMP_(void)  OnRename(LPMONIKER);
  66.         STDMETHODIMP_(void)  OnSave(void);
  67.         STDMETHODIMP_(void)  OnClose(void);
  68.     };
  69.  
  70.  
  71. typedef CImpIAdviseSink *PCImpIAdviseSink;
  72.  
  73. //End CHAPTER17MOD
  74.  
  75.  
  76. /*
  77.  * Tenant class describing an individual piece of data in a page.
  78.  * It knows where it sits, what object is inside of it, and what
  79.  * its idenitifer is such that it can find it's storage within a
  80.  * page.
  81.  */
  82.  
  83. //Patron Objects clipboard format
  84. typedef struct tagPATRONOBJECT
  85.     {
  86.     POINTL      ptl;        //Location of object
  87.     POINTL      ptlPick;    //Pick point from drag-drop operation
  88.     SIZEL       szl;        //Extents of object (absolute)
  89.     FORMATETC   fe;         //Actual object format
  90.     } PATRONOBJECT, *PPATRONOBJECT;
  91.  
  92.  
  93.  
  94. //Values for hit-testing, drawing, and resize-tracking tenants
  95. #define CXYHANDLE       5
  96.  
  97. //Tenant types (not persistent, but determined at load time)
  98. typedef enum
  99.     {
  100.     TENANTTYPE_NULL=0,
  101.     TENANTTYPE_STATIC,
  102.     //CHAPTER17MOD
  103.     TENANTTYPE_EMBEDDEDOBJECT,
  104.     TENANTTYPE_EMBEDDEDFILE,
  105.     TENANTTYPE_EMBEDDEDOBJECTFROMDATA
  106.     //End CHAPTER17MOD
  107.     } TENANTTYPE, *PTENANTTYPE;
  108.  
  109.  
  110. //State flags
  111. #define TENANTSTATE_DEFAULT      0x00000000
  112. #define TENANTSTATE_SELECTED     0x00000001
  113.  
  114. //CHAPTER17MOD
  115. #define TENANTSTATE_OPEN         0x00000002
  116. //End CHAPTER17MOD
  117.  
  118.  
  119. /*
  120.  * Persistent information we need to save for each tenant, which is
  121.  * done in the tenant list instead of with each tenant.  Since this
  122.  * is a small structure it's best not to blow another stream for it
  123.  * (overhead).
  124.  */
  125. typedef struct tagTENANTINFO
  126.     {
  127.     DWORD       dwID;
  128.     RECTL       rcl;
  129.     FORMATETC   fe;             //Excludes ptd
  130.     short       fSetExtent;     //Call IOleObject::SetExtent on Run
  131.     } TENANTINFO, *PTENANTINFO;
  132.  
  133.  
  134. class CTenant : public IUnknown
  135.     {
  136.     //CHAPTER17MOD
  137.     friend CImpIOleClientSite;
  138.     friend CImpIAdviseSink;
  139.     //End CHAPTER17MOD
  140.  
  141.     private:
  142.         HWND            m_hWnd;         //Pages window
  143.         DWORD           m_dwID;         //Persistent DWORD ID
  144.         DWORD           m_cOpens;       //Count calls to Open
  145.  
  146.         BOOL            m_fInitialized; //Something here?
  147.         LPUNKNOWN       m_pObj;         //The object here
  148.         LPSTORAGE       m_pIStorage;    //Sub-storage for tenant
  149.  
  150.         FORMATETC       m_fe;           //Used to create the object
  151.         DWORD           m_dwState;      //State flags
  152.         RECTL           m_rcl;          //Space of this object
  153.         CLSID           m_clsID;        //Object class (for statics)
  154.         BOOL            m_fSetExtent;   //Call SetExtent on next run
  155.  
  156.         class CPages   *m_pPG;          //Pages window
  157.  
  158.         //CHAPTER17MOD
  159.         TENANTTYPE      m_tType;            //Type identifier
  160.         ULONG           m_cRef;             //We're an object now
  161.         LPOLEOBJECT     m_pIOleObject;      //IOleObject on m_pObj
  162.         LPVIEWOBJECT2   m_pIViewObject2;    //IViewObject2 on m_pObj
  163.         ULONG           m_grfMisc;          //OLEMISC flags
  164.         BOOL            m_fRepaintEnabled;  //No redundant paints
  165.  
  166.         //Our interfaces
  167.         PCImpIOleClientSite m_pImpIOleClientSite;
  168.         PCImpIAdviseSink    m_pImpIAdviseSink;
  169.         //End CHAPTER17MOD
  170.  
  171.     protected:
  172.         //CHAPTER17MOD
  173.         BOOL    ObjectInitialize(LPUNKNOWN, LPFORMATETC, DWORD);
  174.         //End CHAPTER17MOD
  175.         HRESULT CreateStatic(LPDATAOBJECT, LPFORMATETC
  176.             , LPUNKNOWN *);
  177.  
  178.     public:
  179.         CTenant(DWORD, HWND, CPages *);
  180.         ~CTenant(void);
  181.  
  182.         //CHAPTER17MOD
  183.         //Gotta have an IUnknown for delegation
  184.         STDMETHODIMP QueryInterface(REFIID, PPVOID);
  185.         STDMETHODIMP_(ULONG) AddRef(void);
  186.         STDMETHODIMP_(ULONG) Release(void);
  187.         //End CHAPTER17MOD
  188.  
  189.         DWORD       GetID(void);
  190.         UINT        GetStorageName(LPOLESTR);
  191.         //CHAPTER17MOD
  192.         void        StorageGet(LPSTORAGE *);
  193.         //End CHAPTER17MOD
  194.         UINT        Create(TENANTTYPE, LPVOID, LPFORMATETC, PPOINTL
  195.                         , LPSIZEL, LPSTORAGE, PPATRONOBJECT, DWORD);
  196.         BOOL        Load(LPSTORAGE, PTENANTINFO);
  197.         void        GetInfo(PTENANTINFO);
  198.         BOOL        Open(LPSTORAGE);
  199.         void        Close(BOOL);
  200.         BOOL        Update(void);
  201.         void        Destroy(LPSTORAGE);
  202.  
  203.         void        Select(BOOL);
  204.         //CHAPTER17MOD
  205.         void        ShowAsOpen(BOOL);
  206.         void        ShowYourself(void);
  207.         void        AddVerbMenu(HMENU, UINT);
  208.         TENANTTYPE  TypeGet(void);
  209.         void        CopyEmbeddedObject(LPDATAOBJECT, LPFORMATETC
  210.                         , PPOINTL);
  211.         void        NotifyOfRename(LPTSTR, LPVOID);
  212.         //End CHAPTER17MOD
  213.  
  214.         BOOL        Activate(LONG);
  215.         void        Draw(HDC, DVTARGETDEVICE *, HDC, int, int
  216.                         , BOOL, BOOL);
  217.         void        Repaint(void);
  218.         void        Invalidate(void);
  219.  
  220.         //CHAPTER17MOD
  221.         void        ObjectClassFormatAndIcon(LPCLSID, LPWORD
  222.                         , LPTSTR *, HGLOBAL *, LPTSTR *);
  223.         BOOL        SwitchOrUpdateAspect(HGLOBAL, BOOL);
  224.         void        EnableRepaint(BOOL);
  225.         //End CHAPTER17MOD
  226.  
  227.         void        ObjectGet(LPUNKNOWN *);
  228.         void        FormatEtcGet(LPFORMATETC, BOOL);
  229.         void        SizeGet(LPSIZEL, BOOL);
  230.         //CHAPTER17MOD
  231.         void        SizeSet(LPSIZEL, BOOL, BOOL);
  232.         //End CHAPTER17MOD
  233.         void        RectGet(LPRECTL, BOOL);
  234.         //CHAPTER17MOD
  235.         void        RectSet(LPRECTL, BOOL, BOOL);
  236.         //End CHAPTER17MOD
  237.     };
  238.  
  239.  
  240. typedef CTenant *PCTenant;
  241.  
  242. //Return codes for Create
  243. #define CREATE_FAILED               0
  244. #define CREATE_GRAPHICONLY          1
  245. #define CREATE_PLACEDOBJECT         2
  246.  
  247.  
  248.  
  249. #endif //_TENANT_H_
  250.