TENANT.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:8k
源码类别:

Windows编程

开发平台:

Visual C++

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