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

Windows编程

开发平台:

Visual C++

  1. //=--------------------------------------------------------------------------=
  2. // CDocObj.H
  3. //=--------------------------------------------------------------------------=
  4. // Copyright 1995 - 1997 Microsoft Corporation.  All Rights Reserved.
  5. //
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  7. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  8. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  9. // PARTICULAR PURPOSE.
  10. //=--------------------------------------------------------------------------=
  11. //
  12. // class declaration for the document object server class.
  13. //
  14. #ifndef __CDOCOBJ_H_
  15. #define __CDOCOBJ_H_
  16. #ifndef __MKTYPLIB__
  17. #include <IPServer.H>
  18. #include <internet.h>
  19. //=--------------------------------------------------------------------------=
  20. // DOCOBJECTINFO
  21. //=--------------------------------------------------------------------------=
  22. // for each DocObject you wish to expose to the programmer/user, you need to
  23. // declare and define one of the following structures.  the first part should
  24. // follow the rules of the CONTROLOBJECTINFO structure.  
  25. // once this structre is declared/defined, an entry should be put in the
  26. // global g_ObjectInfo table.
  27. //
  28. typedef struct {
  29.     CONTROLOBJECTINFO ControlInfo;            // control, automation and creation information
  30. DWORD             dwMiscDocObj;     // value of DocObject subkey
  31. BOOL              bPrint;     // IPrint interface supported
  32. UINT       nIDszExt;     // resource ID of default file extension
  33. UINT              nIDszFileDescription; // resource ID of file description 
  34. } DOCOBJECTINFO;
  35. #ifndef INITOBJECTS
  36. #define DEFINE_DOCOBJECT(name, clsid, progid, fn, ver, riid, pszh, piide, dwcf, dwap, w, szwc, cpp, rgppg, ccv, rgcv, dwmisc, bprint, nidext, niddesc) 
  37. extern DOCOBJECTINFO name##DocObj 
  38. #else
  39. #define DEFINE_DOCOBJECT(name, clsid, progid, fn, ver, riid, pszh, piide, dwcf, dwap, w, szwc, cpp, rgppg, ccv, rgcv, dwmisc, bprint, nidext, niddesc) 
  40. DOCOBJECTINFO name##DocObj = { { { {clsid, progid, fn}, ver, riid, pszh, NULL, 0}, piide, dwcf, dwap, TRUE, FALSE, w, szwc, FALSE, cpp, rgppg, ccv, rgcv, NULL }, dwmisc, bprint, nidext, niddesc }
  41. #endif // !INITOBJECTS
  42. #define MISCFLAGSOFDOCOBJECT(index)         ((DOCOBJECTINFO *)(g_ObjectInfo[index].pInfo))->dwMiscDocObj
  43. #define PRINTOFDOCOBJECT(index)             ((DOCOBJECTINFO *)(g_ObjectInfo[index].pInfo))->bPrint
  44. #define DEFAULTEXTIDOFDOCOBJECT(index)      ((DOCOBJECTINFO *)(g_ObjectInfo[index].pInfo))->nIDszExt
  45. #define FILEDESCRIPTIONIDOFDOCOBJECT(index) ((DOCOBJECTINFO *)(g_ObjectInfo[index].pInfo))->nIDszFileDescription
  46. // this is the macros you should use to fill in the table.  Note that the name
  47. // must be exactly the same as that used in the global structure you created
  48. // for this object.
  49. //
  50. // if we were adding docobj support right into the framework, we would
  51. // put this definition in localobj.h, and instead of using the OI_CONTROL
  52. // type, we would define a new type (eg OI_DOCOBJ). 
  53. //
  54. #define DOCOBJECT(name)    { OI_CONTROL,      (void *)&(name##DocObj) }
  55. //=--------------------------------------------------------------------------=
  56. // CDocumentObject
  57. //=--------------------------------------------------------------------------=
  58. //
  59. // if you don't want internet-aware support, change BASECLASS to COleControl
  60. //
  61. #define BASECLASS   CInternetControl
  62. class CDocumentObject : public BASECLASS, public IOleDocument, public IOleDocumentView
  63. {
  64. public:
  65.     // constructor and destructor
  66.     //
  67.     CDocumentObject(IUnknown* pUnkOuter, int iPrimaryDispatch, void* pMainInterface);
  68.     virtual ~CDocumentObject();
  69.     // IUnknown methods
  70.     //
  71.     DECLARE_STANDARD_UNKNOWN();
  72.     // IOleObject method overrides for DocObject support
  73.     STDMETHOD(SetClientSite)(IOleClientSite* pClientSite);
  74.     STDMETHOD(DoVerb)(LONG iVerb, LPMSG lpmsg, IOleClientSite  *pActiveSite, LONG lindex,
  75.                                      HWND hwndParent, LPCRECT lprcPosRect);
  76.     STDMETHOD(SetExtent)(DWORD dwDrawAspect, SIZEL *psizel);
  77.     STDMETHOD(Unadvise)(DWORD dwConnection);
  78.     // IOleDocument -- required DocObject server interface
  79.     //
  80.     STDMETHOD(CreateView)(IOleInPlaceSite* pIPSite, IStream* pstm,
  81.                           DWORD dwReserved, IOleDocumentView** ppView);
  82.     STDMETHOD(GetDocMiscStatus)(DWORD* pdwStatus);
  83.     STDMETHOD(EnumViews)(IEnumOleDocumentViews** ppEnum, IOleDocumentView** ppView);
  84.     
  85.     // IOleDocumentView -- required DocObject server interface
  86.     //
  87.     STDMETHOD(SetInPlaceSite)(IOleInPlaceSite* pIPSite);
  88.     STDMETHOD(GetInPlaceSite)(IOleInPlaceSite** ppIPSite);
  89.     STDMETHOD(GetDocument)(IUnknown** ppunk);
  90.     STDMETHOD(SetRect)(LPRECT prcView);
  91.     STDMETHOD(GetRect)(LPRECT prcView);
  92.     STDMETHOD(SetRectComplex)(LPRECT prcView, LPRECT prcHScroll,
  93.                               LPRECT prcVScroll, LPRECT prcSizeBox);
  94.     STDMETHOD(Show)(BOOL fShow);
  95.     STDMETHOD(UIActivate)(BOOL fUIActivate);
  96.     STDMETHOD(Open)(void);
  97.     STDMETHOD(CloseView)(ULONG ulReserved);
  98.     STDMETHOD(SaveViewState)(LPSTREAM pstm);
  99.     STDMETHOD(ApplyViewState)(LPSTREAM pstm);
  100.     STDMETHOD(Clone)(IOleInPlaceSite* pIPSiteNew, IOleDocumentView** ppViewNew);
  101.     // Override base class implementation...
  102.     virtual HRESULT InternalQueryInterface(REFIID, void**);
  103. protected:
  104.     BOOL              m_fDocObj;
  105.     IOleDocumentSite* m_pDocSite;
  106.     IOleInPlaceSite*  m_pViewSite;
  107.     // Functions to override to save/restore view state
  108.     virtual HRESULT OnSaveViewState(IStream* pstm);
  109.     virtual HRESULT OnApplyViewState(IStream* pstm);
  110.     // Helper function for DocObject activation
  111.     HRESULT ActivateAsDocObject(LONG lVerb);
  112. };
  113. //=--------------------------------------------------------------------------=
  114. // helper functions
  115. //=--------------------------------------------------------------------------=
  116. //
  117. BOOL RegisterDocObject(LPCSTR pszLibName, LPCSTR pszObjectName,
  118.                        REFCLSID riidObject, DWORD dwMiscDocObj,
  119.                    BOOL bPrint, LPCSTR szExt, LPCSTR szDescription);
  120. //=--------------------------------------------------------------------------=
  121. // Debugging macros
  122. //=--------------------------------------------------------------------------=
  123. // handy-dandy TRACE macro is useful for figuring out how docobj containers
  124. // are calling our interface methods 
  125. //
  126. #ifdef DEBUG
  127.     #define TRACE(szMsg)    OutputDebugString(szMsg)
  128. #else
  129.     #define TRACE(szMsg)
  130. #endif
  131. #endif __MKTYPLIB__
  132. #endif __CDOCOBJ_H_