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 / chap22 / patron / tenant.h < prev    next >
C/C++ Source or Header  |  1995-05-03  |  10KB  |  301 lines

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