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

Windows编程

开发平台:

Visual C++

  1. /*************************************************************************
  2. **
  3. **    OLE 2.0 Sample Code
  4. **
  5. **    oleoutl.h
  6. **
  7. **    This file contains file contains data structure defintions,
  8. **    function prototypes, constants, etc. which are common to the
  9. **    server version and the container version of the app.
  10. **    app version of the Outline series of sample applications:
  11. **          Outline -- base version of the app (without OLE functionality)
  12. **          SvrOutl -- OLE 2.0 Server sample app
  13. **          CntrOutl -- OLE 2.0 Containter sample app
  14. **
  15. **    (c) Copyright Microsoft Corp. 1992 - 1996 All Rights Reserved
  16. **
  17. *************************************************************************/
  18. #if !defined( _OLEOUTL_H_ )
  19. #define _OLEOUTL_H_
  20. #ifndef RC_INVOKED
  21. #pragma message ("INCLUDING OLEOUTL.H from " __FILE__)
  22. // make 'different levels of inderection' considered an error
  23. #pragma warning (error:4047)
  24. #endif  /* RC_INVOKED */
  25. #if defined( USE_MSGFILTER )
  26. //#include "..includemsgfiltr.h"
  27. #include "msgfiltr.h"
  28. #endif  // USE_MSGFILTER
  29. #include "defguid.h"
  30. #include "ansiapi.h"
  31. /* Defines */
  32. /* NOTE: these strings should correspond to the strings registered
  33. **    in the registration database.
  34. */
  35. // REVIEW: should load strings from resource file
  36. #if defined( INPLACE_SVR )
  37. #ifdef TEST32
  38. #define CLSID_APP   CLSID_ISvrOu32
  39. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 In-Place Server Outline 32")
  40. #define SHORTUSERTYPENAME   OLESTR("Outline32")   // max 15 chars
  41. #undef  APPFILENAMEFILTER
  42. #define APPFILENAMEFILTER   "Outline Files (*.OLT)|*.olt|All files (*.*)|*.*|"
  43. #undef  DEFEXTENSION
  44. #define DEFEXTENSION    "olt"           // Default file extension
  45. #else
  46. #define CLSID_APP   CLSID_ISvrOtl
  47. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 In-Place Server Outline")
  48. #define SHORTUSERTYPENAME   OLESTR("Outline")   // max 15 chars
  49. #undef  APPFILENAMEFILTER
  50. #define APPFILENAMEFILTER   "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
  51. #undef  DEFEXTENSION
  52. #define DEFEXTENSION    "oln"           // Default file extension
  53. #endif  // TEST32
  54. #endif  // INPLACE_SVR
  55. #if defined( INPLACE_CNTR )
  56. #ifdef TEST32
  57. #define CLSID_APP   CLSID_ICntrO32
  58. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 In-Place Container Outline 32")
  59. // #define SHORTUSERTYPENAME    "Outline32"   // max 15 chars
  60. #undef  APPFILENAMEFILTER
  61. #define APPFILENAMEFILTER   "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLT)|*.olt|All files (*.*)|*.*|"
  62. #undef  DEFEXTENSION
  63. #define DEFEXTENSION    "olc"           // Default file extension
  64. #else
  65. #define CLSID_APP   CLSID_ICntrOtl
  66. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 In-Place Container Outline")
  67. // #define SHORTUSERTYPENAME    "Outline"   // max 15 chars
  68. #undef  APPFILENAMEFILTER
  69. #define APPFILENAMEFILTER   "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
  70. #undef  DEFEXTENSION
  71. #define DEFEXTENSION    "olc"           // Default file extension
  72. #endif TEST32
  73. #endif  // INPLACE_CNTR
  74. #if defined( OLE_SERVER ) && !defined( INPLACE_SVR )
  75. #ifdef TEST32
  76. #define CLSID_APP   CLSID_SvrOut32
  77. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 Server Sample Outline 32")
  78. #define SHORTUSERTYPENAME   OLESTR("Outline32")
  79. #undef  APPFILENAMEFILTER
  80. #define APPFILENAMEFILTER   "Outline Files (*.OLT)|*.olt|All files (*.*)|*.*|"
  81. #undef  DEFEXTENSION
  82. #define DEFEXTENSION    "olt"           // Default file extension
  83. #else
  84. #define CLSID_APP   CLSID_SvrOutl
  85. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 Server Sample Outline")
  86. #define SHORTUSERTYPENAME   OLESTR("Outline")
  87. #undef  APPFILENAMEFILTER
  88. #define APPFILENAMEFILTER   "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
  89. #undef  DEFEXTENSION
  90. #define DEFEXTENSION    "oln"           // Default file extension
  91. #endif  //TEST32
  92. #endif  // OLE_SERVER && ! INPLACE_SVR
  93. #if defined( OLE_CNTR ) && !defined( INPLACE_CNTR )
  94. #ifdef TEST32
  95. #define CLSID_APP   CLSID_CntrOu32
  96. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 Container Sample Outline 32")
  97. // #define SHORTUSERTYPENAME    "Outline32"  // max 15 chars
  98. #undef  APPFILENAMEFILTER
  99. #define APPFILENAMEFILTER   "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLT)|*.olt|All files (*.*)|*.*|"
  100. #undef  DEFEXTENSION
  101. #define DEFEXTENSION    "olc"           // Default file extension
  102. #else
  103. #define CLSID_APP   CLSID_CntrOutl
  104. #define FULLUSERTYPENAME    OLESTR("Ole 2.0 Container Sample Outline")
  105. // #define SHORTUSERTYPENAME    "Outline"  // max 15 chars
  106. #undef  APPFILENAMEFILTER
  107. #define APPFILENAMEFILTER   "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
  108. #undef  DEFEXTENSION
  109. #define DEFEXTENSION    "olc"           // Default file extension
  110. #endif  //TEST32
  111. #endif  // OLE_CNTR && ! INPLACE_CNTR
  112. // Maximum number of formats offered by IDataObject::GetData/SetData
  113. #define MAXNOFMTS       10
  114. #define MAXNOLINKTYPES   3
  115. #if defined( USE_DRAGDROP )
  116. #define DD_SEL_THRESH       HITTESTDELTA    // Border threshold to start drag
  117. #define MAX_SEL_ITEMS       0x0080
  118. #endif  // USE_DRAGDROP
  119. /* Positions of the various menus */
  120. #define POS_FILEMENU        0
  121. #define POS_EDITMENU        1
  122. #define POS_VIEWMENU        2
  123. #define POS_LINEMENU        3
  124. #define POS_NAMEMENU        4
  125. #define POS_OPTIONSMENU     5
  126. #define POS_DEBUGMENU       6
  127. #define POS_HELPMENU        7
  128. #define POS_OBJECT      11
  129. /* Types */
  130. // Document initialization type
  131. #define DOCTYPE_EMBEDDED    3   // init from an IStorage* of an embedded obj
  132. #define DOCTYPE_FROMSTG     4   // init from an IStorage* with doc bit set
  133. /* Forward type definitions */
  134. typedef struct tagOLEAPP FAR* LPOLEAPP;
  135. typedef struct tagOLEDOC FAR* LPOLEDOC;
  136. /* Flags to control Moniker assignment for OleDoc_GetFullMoniker */
  137. // REVIEW: should use official OLEGETMONIKER type for final version
  138. typedef enum tagGETMONIKERTYPE {
  139.    GETMONIKER_ONLYIFTHERE  = 1,
  140.    GETMONIKER_FORCEASSIGN  = 2,
  141.    GETMONIKER_UNASSIGN     = 3,
  142.    GETMONIKER_TEMPFORUSER  = 4
  143. } GETMONIKERTYPE;
  144. /* Flags to control direction for drag scrolling */
  145. typedef enum tagSCROLLDIR {
  146.    SCROLLDIR_NULL          = 0,
  147.    SCROLLDIR_UP            = 1,
  148.    SCROLLDIR_DOWN          = 2,
  149.    SCROLLDIR_RIGHT         = 3,    // currently not used
  150.    SCROLLDIR_LEFT          = 4     // currently not used
  151. } SCROLLDIR;
  152. /*************************************************************************
  153. ** class OLEDOC : OUTLINEDOC
  154. **    OLEDOC is an extention to the base OUTLINEDOC object (structure)
  155. **    that adds common OLE 2.0 functionality used by both the server
  156. **    and container versions. This is an abstract class. You do not
  157. **    instantiate an instance of OLEDOC directly but instead
  158. **    instantiate one of its concrete subclasses: SERVERDOC or
  159. **    CONTAINERDOC. There is one instance of an document
  160. **    object created per document open in the app. The SDI
  161. **    version of the app supports one ServerDoc at a time. The MDI
  162. **    version of the app can manage multiple documents at one time.
  163. **    The OLEDOC class inherits all fields from the OUTLINEDOC class.
  164. **    This inheritance is achieved by including a member variable of
  165. **    type OUTLINEDOC as the first field in the OLEDOC
  166. **    structure. Thus a pointer to an OLEDOC object can be cast to be
  167. **    a pointer to a OUTLINEDOC object.
  168. *************************************************************************/
  169. typedef struct tagOLEDOC {
  170.    OUTLINEDOC      m_OutlineDoc;       // ServerDoc inherits from OutlineDoc
  171.    ULONG           m_cRef;             // total ref count for document
  172.    ULONG           m_dwStrongExtConn;  // total strong connection count
  173.                               //  (from IExternalConnection)
  174.                               //  when this count transitions to 0
  175.                               //  and fLastUnlockCloses==TRUE, then
  176.                               //  IOleObject::Close is called to
  177.                               //  close the document.
  178. #if defined( _DEBUG )
  179.    ULONG           m_cCntrLock;        // total count of LockContainer locks
  180.                               //  (for debugging purposes only)
  181. #endif
  182.    LPSTORAGE       m_lpStg;            // OleDoc must keep its stg open
  183.                               //  even in-memory server doc should
  184.                               //  keep Stg open for low memory save
  185.    LPSTREAM        m_lpLLStm;          // Hold LineList IStream* open for
  186.                               //  low memory save
  187.    LPSTREAM        m_lpNTStm;          // Hold NameTable IStream* open for
  188.                               //  low memory save
  189.    BOOL            m_fObjIsClosing;    // flag to guard recursive close call
  190.    BOOL            m_fObjIsDestroying; // flag to guard recursiv destroy call
  191.    DWORD           m_dwRegROT;         // key if doc registered as running
  192.    LPMONIKER       m_lpFileMoniker;    // moniker if file-based/untitled doc
  193.    BOOL            m_fLinkSourceAvail; // can doc offer CF_LINKSOURCE
  194.    LPOLEDOC        m_lpSrcDocOfCopy;   // src doc if doc created for copy
  195.    BOOL            m_fUpdateEditMenu;  // need to update edit menu??
  196. #if defined( USE_DRAGDROP )
  197.    DWORD           m_dwTimeEnterScrollArea;  // time entering scroll region
  198.    DWORD           m_dwLastScrollDir;  // current dir for drag scroll
  199.    DWORD           m_dwNextScrollTime; // time for next scroll
  200.    BOOL            m_fRegDragDrop;     // is doc registered as drop target?
  201.    BOOL            m_fLocalDrag;       // is doc source of the drag
  202.    BOOL            m_fLocalDrop;       // was doc target of the drop
  203.    BOOL            m_fCanDropCopy;     // is Drag/Drop copy/move possible?
  204.    BOOL            m_fCanDropLink;     // is Drag/Drop link possible?
  205.    BOOL            m_fDragLeave;       // has drag left
  206.    BOOL            m_fPendingDrag;     // LButtonDown--possible drag pending
  207.    POINT           m_ptButDown;        // LButtonDown coordinates
  208. #endif  // USE_DRAGDROP
  209. #if defined( INPLACE_SVR ) || defined( INPLACE_CNTR )
  210.    BOOL            m_fCSHelpMode;      // Shift-F1 context help mode
  211. #endif
  212.    struct CDocUnknownImpl {
  213.       IUnknownVtbl FAR*       lpVtbl;
  214.       LPOLEDOC                lpOleDoc;
  215.       int                     cRef;   // interface specific ref count.
  216.    } m_Unknown;
  217.    struct CDocPersistFileImpl {
  218.       IPersistFileVtbl FAR*   lpVtbl;
  219.       LPOLEDOC                lpOleDoc;
  220.       int                     cRef;   // interface specific ref count.
  221.    } m_PersistFile;
  222.    struct CDocOleItemContainerImpl {
  223.       IOleItemContainerVtbl FAR*  lpVtbl;
  224.       LPOLEDOC                    lpOleDoc;
  225.       int                         cRef;   // interface specific ref count.
  226.    } m_OleItemContainer;
  227.    struct CDocExternalConnectionImpl {
  228.       IExternalConnectionVtbl FAR* lpVtbl;
  229.       LPOLEDOC                lpOleDoc;
  230.       int                     cRef;   // interface specific ref count.
  231.    } m_ExternalConnection;
  232.    struct CDocDataObjectImpl {
  233.       IDataObjectVtbl FAR*        lpVtbl;
  234.       LPOLEDOC                    lpOleDoc;
  235.       int                         cRef;   // interface specific ref count.
  236.    } m_DataObject;
  237. #ifdef USE_DRAGDROP
  238.    struct CDocDropSourceImpl {
  239.       IDropSourceVtbl FAR*    lpVtbl;
  240.       LPOLEDOC                lpOleDoc;
  241.       int                     cRef;   // interface specific ref count.
  242.    } m_DropSource;
  243.    struct CDocDropTargetImpl {
  244.       IDropTargetVtbl FAR*    lpVtbl;
  245.       LPOLEDOC                lpOleDoc;
  246.       int                     cRef;   // interface specific ref count.
  247.    } m_DropTarget;
  248. #endif  // USE_DRAGDROP
  249. } OLEDOC;
  250. /* OleDoc methods (functions) */
  251. BOOL OleDoc_Init(LPOLEDOC lpOleDoc, BOOL fDataTransferDoc);
  252. BOOL OleDoc_InitNewFile(LPOLEDOC lpOleDoc);
  253. void OleDoc_ShowWindow(LPOLEDOC lpOleDoc);
  254. void OleDoc_HideWindow(LPOLEDOC lpOleDoc, BOOL fShutDown);
  255. HRESULT OleDoc_Lock(LPOLEDOC lpOleDoc, BOOL fLock, BOOL fLastUnlockReleases);
  256. ULONG OleDoc_AddRef(LPOLEDOC lpOleDoc);
  257. ULONG OleDoc_Release (LPOLEDOC lpOleDoc);
  258. HRESULT OleDoc_QueryInterface(
  259.       LPOLEDOC          lpOleDoc,
  260.       REFIID            riid,
  261.       LPVOID FAR*       lplpUnk
  262. );
  263. BOOL OleDoc_Close(LPOLEDOC lpOleDoc, DWORD dwSaveOption);
  264. void OleDoc_Destroy(LPOLEDOC lpOleDoc);
  265. void OleDoc_SetUpdateEditMenuFlag(LPOLEDOC lpOleDoc, BOOL fUpdate);
  266. BOOL OleDoc_GetUpdateEditMenuFlag(LPOLEDOC lpOleDoc);
  267. void OleDoc_GetExtent(LPOLEDOC lpOleDoc, LPSIZEL lpsizel);
  268. HGLOBAL OleDoc_GetObjectDescriptorData(
  269.       LPOLEDOC            lpOleDoc,
  270.       LPLINERANGE         lplrSel
  271. );
  272. LPMONIKER OleDoc_GetFullMoniker(LPOLEDOC lpOleDoc, DWORD dwAssign);
  273. void OleDoc_GetExtent(LPOLEDOC lpOleDoc, LPSIZEL lpsizel);
  274. void OleDoc_DocRenamedUpdate(LPOLEDOC lpOleDoc, LPMONIKER lpmkDoc);
  275. void OleDoc_CopyCommand(LPOLEDOC lpSrcOleDoc);
  276. void OleDoc_PasteCommand(LPOLEDOC lpOleDoc);
  277. void OleDoc_PasteSpecialCommand(LPOLEDOC lpOleDoc);
  278. LPOUTLINEDOC OleDoc_CreateDataTransferDoc(LPOLEDOC lpSrcOleDoc);
  279. BOOL OleDoc_PasteFromData(
  280.       LPOLEDOC            lpOleDoc,
  281.       LPDATAOBJECT        lpSrcDataObj,
  282.       BOOL                fLocalDataObj,
  283.       BOOL                fLink
  284. );
  285. BOOL OleDoc_PasteFormatFromData(
  286.       LPOLEDOC            lpOleDoc,
  287.       CLIPFORMAT          cfFormat,
  288.       LPDATAOBJECT        lpSrcDataObj,
  289.       BOOL                fLocalDataObj,
  290.       BOOL                fLink,
  291.       BOOL                fDisplayAsIcon,
  292.       HGLOBAL             hMetaPict,
  293.       LPSIZEL             lpSizelInSrc
  294. );
  295. BOOL OleDoc_QueryPasteFromData(
  296.       LPOLEDOC            lpOleDoc,
  297.       LPDATAOBJECT        lpSrcDataObj,
  298.       BOOL                fLink
  299. );
  300. #if defined( USE_DRAGDROP )
  301. BOOL OleDoc_QueryDrag( LPOLEDOC lpOleDoc, int y );
  302. BOOL OleDoc_QueryDrop (
  303.    LPOLEDOC        lpOleDoc,
  304.    DWORD           grfKeyState,
  305.    POINTL          pointl,
  306.    BOOL            fDragScroll,
  307.    LPDWORD         lpdwEffect
  308. );
  309. DWORD OleDoc_DoDragDrop (LPOLEDOC lpSrcOleDoc);
  310. BOOL OleDoc_DoDragScroll(LPOLEDOC lpOleDoc, POINTL pointl);
  311. #endif  // USE_DRAGDROP
  312. /* OleDoc::IUnknown methods (functions) */
  313. STDMETHODIMP OleDoc_Unk_QueryInterface(
  314.       LPUNKNOWN           lpThis,
  315.       REFIID              riid,
  316.       LPVOID FAR*         lplpvObj
  317. );
  318. STDMETHODIMP_(ULONG) OleDoc_Unk_AddRef(LPUNKNOWN lpThis);
  319. STDMETHODIMP_(ULONG) OleDoc_Unk_Release (LPUNKNOWN lpThis);
  320. /* OleDoc::IPersistFile methods (functions) */
  321. STDMETHODIMP OleDoc_PFile_QueryInterface(
  322.       LPPERSISTFILE       lpThis,
  323.       REFIID              riid,
  324.       LPVOID FAR*         lplpvObj
  325. );
  326. STDMETHODIMP_(ULONG) OleDoc_PFile_AddRef(LPPERSISTFILE lpThis);
  327. STDMETHODIMP_(ULONG) OleDoc_PFile_Release (LPPERSISTFILE lpThis);
  328. STDMETHODIMP OleDoc_PFile_GetClassID (
  329.       LPPERSISTFILE       lpThis,
  330.       CLSID FAR*          lpclsid
  331. );
  332. STDMETHODIMP  OleDoc_PFile_IsDirty(LPPERSISTFILE lpThis);
  333. STDMETHODIMP OleDoc_PFile_Load (
  334.       LPPERSISTFILE       lpThis,
  335.       LPCOLESTR           lpszFileName,
  336.       DWORD               grfMode
  337. );
  338. STDMETHODIMP OleDoc_PFile_Save (
  339.       LPPERSISTFILE       lpThis,
  340.       LPCOLESTR           lpszFileName,
  341.       BOOL                fRemember
  342. );
  343. STDMETHODIMP OleDoc_PFile_SaveCompleted (
  344.       LPPERSISTFILE       lpThis,
  345.       LPCOLESTR           lpszFileName
  346. );
  347. STDMETHODIMP OleDoc_PFile_GetCurFile (
  348.       LPPERSISTFILE   lpThis,
  349.       LPOLESTR FAR*   lplpszFileName
  350. );
  351. /* OleDoc::IOleItemContainer methods (functions) */
  352. STDMETHODIMP OleDoc_ItemCont_QueryInterface(
  353.       LPOLEITEMCONTAINER  lpThis,
  354.       REFIID              riid,
  355.       LPVOID FAR*         lplpvObj
  356. );
  357. STDMETHODIMP_(ULONG) OleDoc_ItemCont_AddRef(LPOLEITEMCONTAINER lpThis);
  358. STDMETHODIMP_(ULONG) OleDoc_ItemCont_Release(LPOLEITEMCONTAINER lpThis);
  359. STDMETHODIMP OleDoc_ItemCont_ParseDisplayName(
  360.       LPOLEITEMCONTAINER  lpThis,
  361.       LPBC                lpbc,
  362.       LPOLESTR            lpszDisplayName,
  363.       ULONG FAR*          lpchEaten,
  364.       LPMONIKER FAR*      lplpmkOut
  365. );
  366. STDMETHODIMP OleDoc_ItemCont_EnumObjects(
  367.       LPOLEITEMCONTAINER  lpThis,
  368.       DWORD               grfFlags,
  369.       LPENUMUNKNOWN FAR*  lplpenumUnknown
  370. );
  371. STDMETHODIMP OleDoc_ItemCont_LockContainer(
  372.       LPOLEITEMCONTAINER  lpThis,
  373.       BOOL                fLock
  374. );
  375. STDMETHODIMP OleDoc_ItemCont_GetObject(
  376.       LPOLEITEMCONTAINER  lpThis,
  377.       LPOLESTR            lpszItem,
  378.       DWORD               dwSpeedNeeded,
  379.       LPBINDCTX           lpbc,
  380.       REFIID              riid,
  381.       LPVOID FAR*         lplpvObject
  382. );
  383. STDMETHODIMP OleDoc_ItemCont_GetObjectStorage(
  384.       LPOLEITEMCONTAINER  lpThis,
  385.       LPOLESTR            lpszItem,
  386.       LPBINDCTX           lpbc,
  387.       REFIID              riid,
  388.       LPVOID FAR*         lplpvStorage
  389. );
  390. STDMETHODIMP OleDoc_ItemCont_IsRunning(
  391.       LPOLEITEMCONTAINER  lpThis,
  392.       LPOLESTR            lpszItem
  393. );
  394. /* OleDoc::IPersistFile methods (functions) */
  395. STDMETHODIMP OleDoc_ExtConn_QueryInterface(
  396.       LPEXTERNALCONNECTION    lpThis,
  397.       REFIID                  riid,
  398.       LPVOID FAR*             lplpvObj
  399. );
  400. STDMETHODIMP_(ULONG) OleDoc_ExtConn_AddRef(LPEXTERNALCONNECTION lpThis);
  401. STDMETHODIMP_(ULONG) OleDoc_ExtConn_Release (LPEXTERNALCONNECTION lpThis);
  402. STDMETHODIMP_(DWORD) OleDoc_ExtConn_AddConnection(
  403.       LPEXTERNALCONNECTION    lpThis,
  404.       DWORD                   extconn,
  405.       DWORD                   reserved
  406. );
  407. STDMETHODIMP_(DWORD) OleDoc_ExtConn_ReleaseConnection(
  408.       LPEXTERNALCONNECTION    lpThis,
  409.       DWORD                   extconn,
  410.       DWORD                   reserved,
  411.       BOOL                    fLastReleaseCloses
  412. );
  413. /* OleDoc::IDataObject methods (functions) */
  414. STDMETHODIMP OleDoc_DataObj_QueryInterface (
  415.       LPDATAOBJECT        lpThis,
  416.       REFIID              riid,
  417.       LPVOID FAR*         lplpvObj
  418. );
  419. STDMETHODIMP_(ULONG) OleDoc_DataObj_AddRef(LPDATAOBJECT lpThis);
  420. STDMETHODIMP_(ULONG) OleDoc_DataObj_Release (LPDATAOBJECT lpThis);
  421. STDMETHODIMP OleDoc_DataObj_GetData (
  422.       LPDATAOBJECT        lpThis,
  423.       LPFORMATETC         lpFormatetc,
  424.       LPSTGMEDIUM         lpMedium
  425. );
  426. STDMETHODIMP OleDoc_DataObj_GetDataHere (
  427.       LPDATAOBJECT        lpThis,
  428.       LPFORMATETC         lpFormatetc,
  429.       LPSTGMEDIUM         lpMedium
  430. );
  431. STDMETHODIMP OleDoc_DataObj_QueryGetData (
  432.       LPDATAOBJECT        lpThis,
  433.       LPFORMATETC         lpFormatetc
  434. );
  435. STDMETHODIMP OleDoc_DataObj_GetCanonicalFormatEtc(
  436.       LPDATAOBJECT        lpThis,
  437.       LPFORMATETC         lpformatetc,
  438.       LPFORMATETC         lpformatetcOut
  439. );
  440. STDMETHODIMP OleDoc_DataObj_SetData (
  441.       LPDATAOBJECT    lpThis,
  442.       LPFORMATETC     lpFormatetc,
  443.       LPSTGMEDIUM     lpMedium,
  444.       BOOL            fRelease
  445. );
  446. STDMETHODIMP OleDoc_DataObj_EnumFormatEtc(
  447.       LPDATAOBJECT            lpThis,
  448.       DWORD                   dwDirection,
  449.       LPENUMFORMATETC FAR*    lplpenumFormatEtc
  450. );
  451. STDMETHODIMP OleDoc_DataObj_DAdvise(
  452.       LPDATAOBJECT        lpThis,
  453.       FORMATETC FAR*      lpFormatetc,
  454.       DWORD               advf,
  455.       LPADVISESINK        lpAdvSink,
  456.       DWORD FAR*          lpdwConnection
  457. );
  458. STDMETHODIMP OleDoc_DataObj_DUnadvise(LPDATAOBJECT lpThis,DWORD dwConnection);
  459. STDMETHODIMP OleDoc_DataObj_EnumDAdvise(
  460.       LPDATAOBJECT        lpThis,
  461.       LPENUMSTATDATA FAR* lplpenumAdvise
  462. );
  463. #ifdef USE_DRAGDROP
  464. /* OleDoc::IDropSource methods (functions) */
  465. STDMETHODIMP OleDoc_DropSource_QueryInterface(
  466.    LPDROPSOURCE            lpThis,
  467.    REFIID                  riid,
  468.    LPVOID FAR*             lplpvObj
  469. );
  470. STDMETHODIMP_(ULONG) OleDoc_DropSource_AddRef( LPDROPSOURCE lpThis );
  471. STDMETHODIMP_(ULONG) OleDoc_DropSource_Release ( LPDROPSOURCE lpThis);
  472. STDMETHODIMP    OleDoc_DropSource_QueryContinueDrag (
  473.    LPDROPSOURCE            lpThis,
  474.    BOOL                    fEscapePressed,
  475.    DWORD                   grfKeyState
  476. );
  477. STDMETHODIMP    OleDoc_DropSource_GiveFeedback (
  478.    LPDROPSOURCE            lpThis,
  479.    DWORD                   dwEffect
  480. );
  481. /* OleDoc::IDropTarget methods (functions) */
  482. STDMETHODIMP OleDoc_DropTarget_QueryInterface(
  483.       LPDROPTARGET        lpThis,
  484.       REFIID              riid,
  485.       LPVOID FAR*         lplpvObj
  486. );
  487. STDMETHODIMP_(ULONG) OleDoc_DropTarget_AddRef(LPDROPTARGET lpThis);
  488. STDMETHODIMP_(ULONG) OleDoc_DropTarget_Release ( LPDROPTARGET lpThis);
  489. STDMETHODIMP    OleDoc_DropTarget_DragEnter (
  490.    LPDROPTARGET            lpThis,
  491.    LPDATAOBJECT            lpDataObj,
  492.    DWORD                   grfKeyState,
  493.    POINTL                  pointl,
  494.    LPDWORD                 lpdwEffect
  495. );
  496. STDMETHODIMP    OleDoc_DropTarget_DragOver (
  497.    LPDROPTARGET            lpThis,
  498.    DWORD                   grfKeyState,
  499.    POINTL                  pointl,
  500.    LPDWORD                 lpdwEffect
  501. );
  502. STDMETHODIMP    OleDoc_DropTarget_DragLeave ( LPDROPTARGET lpThis);
  503. STDMETHODIMP    OleDoc_DropTarget_Drop (
  504.    LPDROPTARGET            lpThis,
  505.    LPDATAOBJECT            lpDataObj,
  506.    DWORD                   grfKeyState,
  507.    POINTL                  pointl,
  508.    LPDWORD                 lpdwEffect
  509. );
  510. #endif  // USE_DRAGDROP
  511. /*************************************************************************
  512. ** class APPCLASSFACTORY
  513. **  APPCLASSFACTORY implements the IClassFactory interface. it
  514. **    instantiates document instances of the correct type depending on
  515. **    how the application is compiled (either ServerDoc or ContainerDoc
  516. **    instances). by implementing this
  517. **    interface in a seperate interface from the App object itself, it
  518. **    is easier to manage when the IClassFactory should be
  519. **    registered/revoked. when the OleApp object is first initialized
  520. **    in OleApp_InitInstance an instance of APPCLASSFACTORY is created
  521. **    and registered (CoRegisterClassObject called). when the App
  522. **    object gets destroyed (in OleApp_Destroy) this APPCLASSFACTORY is
  523. **    revoked (CoRevokeClassObject called) and released. the simple
  524. **    fact that the IClassFactory is registered does not on its own keep
  525. **    the application alive.
  526. *************************************************************************/
  527. typedef struct tagAPPCLASSFACTORY {
  528.    IClassFactoryVtbl FAR*  m_lpVtbl;
  529.    UINT                    m_cRef;
  530. #if defined( _DEBUG )
  531.    LONG                    m_cSvrLock; // total count of LockServer locks
  532.                               //  (for debugging purposes only)
  533. #endif
  534.  } APPCLASSFACTORY, FAR* LPAPPCLASSFACTORY;
  535. /* PUBLIC FUNCTIONS */
  536. LPCLASSFACTORY WINAPI AppClassFactory_Create(void);
  537. /* interface IClassFactory implementation */
  538. STDMETHODIMP AppClassFactory_QueryInterface(
  539.       LPCLASSFACTORY lpThis, REFIID riid, LPVOID FAR* ppvObj);
  540. STDMETHODIMP_(ULONG) AppClassFactory_AddRef(LPCLASSFACTORY lpThis);
  541. STDMETHODIMP_(ULONG) AppClassFactory_Release(LPCLASSFACTORY lpThis);
  542. STDMETHODIMP AppClassFactory_CreateInstance (
  543.       LPCLASSFACTORY      lpThis,
  544.       LPUNKNOWN           lpUnkOuter,
  545.       REFIID              riid,
  546.       LPVOID FAR*         lplpvObj
  547. );
  548. STDMETHODIMP AppClassFactory_LockServer (
  549.       LPCLASSFACTORY      lpThis,
  550.       BOOL                fLock
  551. );
  552. /*************************************************************************
  553. ** class OLEAPP : OUTLINEAPP
  554. **    OLEAPP is an extention to the base OUTLINEAPP object (structure)
  555. **    that adds common OLE 2.0 functionality used by both the server
  556. **    and container versions. This is an abstract class. You do not
  557. **    instantiate an instance of OLEAPP directly but instead
  558. **    instantiate one of its concrete subclasses: SERVERAPP or
  559. **    CONTAINERAPP. There is one instance of an document application
  560. **    object created per running application instance. This
  561. **    object holds many fields that could otherwise be organized as
  562. **    global variables. The OLEAPP class inherits all fields
  563. **    from the OUTLINEAPP class. This inheritance is achieved by including a
  564. **    member variable of type OUTLINEAPP as the first field in the OLEAPP
  565. **    structure. Thus a pointer to a OLEAPP object can be cast to be
  566. **    a pointer to a OUTLINEAPP object.
  567. *************************************************************************/
  568. typedef struct tagOLEAPP {
  569.    OUTLINEAPP  m_OutlineApp;       // inherits all fields of OutlineApp
  570.    ULONG       m_cRef;             // total ref count for app
  571.    ULONG       m_cDoc;             // total count of open documents
  572.    BOOL        m_fUserCtrl;        // does user control life-time of app?
  573.    DWORD       m_dwRegClassFac;    // value returned by CoRegisterClassObject
  574.    LPCLASSFACTORY m_lpClassFactory;// ptr to allocated ClassFactory instance
  575. #if defined( USE_MSGFILTER )
  576.    LPMESSAGEFILTER m_lpMsgFilter;  // ptr to allocated MsgFilter instance
  577.    MSGPENDINGPROC m_lpfnMsgPending;// ptr to msg pending callback function
  578. #endif  // USE_MSGFILTER
  579.    BOOL        m_fOleInitialized;  // was OleInitialize called
  580.    BOOL        m_fOleStdInit;      // was OleStdInitialize called
  581.    UINT        m_cModalDlgActive;  // count of modal dialogs up; 0 = no dlg.
  582.    UINT        m_cfEmbedSource;    // OLE 2.0 clipboard format
  583.    UINT        m_cfEmbeddedObject; // OLE 2.0 clipboard format
  584.    UINT        m_cfLinkSource;     // OLE 2.0 clipboard format
  585.    UINT        m_cfObjectDescriptor; // OLE 2.0 clipboard format
  586.    UINT        m_cfLinkSrcDescriptor; // OLE 2.0 clipboard format
  587.    UINT        m_cfFileName;       // std Windows clipboard format
  588.    FORMATETC   m_arrDocGetFmts[MAXNOFMTS];  // fmts offered by copy & GetData
  589.    UINT        m_nDocGetFmts;      // no of fmtetc's for GetData
  590.    OLEUIPASTEENTRY m_arrPasteEntries[MAXNOFMTS];   // input for PasteSpl.
  591.    int         m_nPasteEntries;                    // input for PasteSpl.
  592.    UINT        m_arrLinkTypes[MAXNOLINKTYPES];     // input for PasteSpl.
  593.    int         m_nLinkTypes;                       // input for PasteSpl.
  594. #if defined( USE_DRAGDROP )
  595.    int m_nDragDelay;       // time delay (in msec) before drag should start
  596.    int m_nDragMinDist;     // min. distance (radius) before drag should start
  597.    int m_nScrollDelay;     // time delay (in msec) before scroll should start
  598.    int m_nScrollInset;     // Border inset distance to start drag scroll
  599.    int m_nScrollInterval;  // scroll interval time (in msec)
  600. #if defined( IF_SPECIAL_DD_CURSORS_NEEDED )
  601.    // This would be used if the app wanted to have custom drag/drop cursors
  602.    HCURSOR     m_hcursorDragNone;
  603.    HCURSOR     m_hcursorDragCopy;
  604.    HCURSOR     m_hcursorDragLink;
  605. #endif  // IF_SPECIAL_DD_CURSORS_NEEDED
  606. #endif  // USE_DRAGDROP
  607. #if defined( OLE_CNTR )
  608.    HPALETTE    m_hStdPal;        // standard color palette for OLE
  609.                              //  it is a good idea for containers
  610.                              //  to use this standard palette
  611.                              //  even if they do not use colors
  612.                              //  themselves. this will allow
  613.                              //  embedded object to get a good
  614.                              //  distribution of colors when they
  615.                              //  are being drawn by the container.
  616.                              //
  617. #endif
  618.    struct CAppUnknownImpl {
  619.       IUnknownVtbl FAR*       lpVtbl;
  620.       LPOLEAPP                lpOleApp;
  621.       int                     cRef;   // interface specific ref count.
  622.    } m_Unknown;
  623. } OLEAPP;
  624. /* ServerApp methods (functions) */
  625. BOOL OleApp_InitInstance(LPOLEAPP lpOleApp, HINSTANCE hInst, int nCmdShow);
  626. void OleApp_TerminateApplication(LPOLEAPP lpOleApp);
  627. BOOL OleApp_ParseCmdLine(LPOLEAPP lpOleApp, LPSTR lpszCmdLine, int nCmdShow);
  628. void OleApp_Destroy(LPOLEAPP lpOleApp);
  629. BOOL OleApp_CloseAllDocsAndExitCommand(
  630.       LPOLEAPP            lpOleApp,
  631.       BOOL                fForceEndSession
  632. );
  633. void OleApp_ShowWindow(LPOLEAPP lpOleApp, BOOL fGiveUserCtrl);
  634. void OleApp_HideWindow(LPOLEAPP lpOleApp);
  635. void OleApp_HideIfNoReasonToStayVisible(LPOLEAPP lpOleApp);
  636. void OleApp_DocLockApp(LPOLEAPP lpOleApp);
  637. void OleApp_DocUnlockApp(LPOLEAPP lpOleApp, LPOUTLINEDOC lpOutlineDoc);
  638. HRESULT OleApp_Lock(LPOLEAPP lpOleApp, BOOL fLock, BOOL fLastUnlockReleases);
  639. ULONG OleApp_AddRef(LPOLEAPP lpOleApp);
  640. ULONG OleApp_Release (LPOLEAPP lpOleApp);
  641. HRESULT OleApp_QueryInterface (
  642.       LPOLEAPP                lpOleApp,
  643.       REFIID                  riid,
  644.       LPVOID FAR*             lplpUnk
  645. );
  646. void OleApp_RejectInComingCalls(LPOLEAPP lpOleApp, BOOL fReject);
  647. void OleApp_DisableBusyDialogs(
  648.       LPOLEAPP        lpOleApp,
  649.       BOOL FAR*       lpfPrevBusyEnable,
  650.       BOOL FAR*       lpfPrevNREnable
  651. );
  652. void OleApp_EnableBusyDialogs(
  653.       LPOLEAPP        lpOleApp,
  654.       BOOL            fPrevBusyEnable,
  655.       BOOL            fPrevNREnable
  656. );
  657. void OleApp_PreModalDialog(LPOLEAPP lpOleApp, LPOLEDOC lpActiveOleDoc);
  658. void OleApp_PostModalDialog(LPOLEAPP lpOleApp, LPOLEDOC lpActiveOleDoc);
  659. BOOL OleApp_InitVtbls (LPOLEAPP lpOleApp);
  660. void OleApp_InitMenu(
  661.       LPOLEAPP                lpOleApp,
  662.       LPOLEDOC                lpOleDoc,
  663.       HMENU                   hMenu
  664. );
  665. void OleApp_UpdateEditMenu(
  666.       LPOLEAPP                lpOleApp,
  667.       LPOUTLINEDOC            lpOutlineDoc,
  668.       HMENU                   hMenuEdit
  669. );
  670. BOOL OleApp_RegisterClassFactory(LPOLEAPP lpOleApp);
  671. void OleApp_RevokeClassFactory(LPOLEAPP lpOleApp);
  672. #if defined( USE_MSGFILTER )
  673. BOOL OleApp_RegisterMessageFilter(LPOLEAPP lpOleApp);
  674. void OleApp_RevokeMessageFilter(LPOLEAPP lpOleApp);
  675. BOOL FAR PASCAL EXPORT MessagePendingProc(MSG FAR *lpMsg);
  676. #endif  // USE_MSGFILTER
  677. void OleApp_FlushClipboard(LPOLEAPP lpOleApp);
  678. void OleApp_NewCommand(LPOLEAPP lpOleApp);
  679. void OleApp_OpenCommand(LPOLEAPP lpOleApp);
  680. #if defined( OLE_CNTR )
  681. LRESULT OleApp_QueryNewPalette(LPOLEAPP lpOleApp);
  682. #endif // OLE_CNTR
  683. LRESULT wSelectPalette(HWND hWnd, HPALETTE hPal, BOOL fBackground);
  684. /* OleApp::IUnknown methods (functions) */
  685. STDMETHODIMP OleApp_Unk_QueryInterface(
  686.       LPUNKNOWN           lpThis,
  687.       REFIID              riid,
  688.       LPVOID FAR*         lplpvObj
  689. );
  690. STDMETHODIMP_(ULONG) OleApp_Unk_AddRef(LPUNKNOWN lpThis);
  691. STDMETHODIMP_(ULONG) OleApp_Unk_Release (LPUNKNOWN lpThis);
  692. /* Function prototypes in debug.c */
  693. void InstallMessageFilterCommand(void);
  694. void RejectIncomingCommand(void);
  695. #if defined( OLE_SERVER )
  696. #include "svroutl.h"
  697. #endif
  698. #if defined( OLE_CNTR )
  699. #include "cntroutl.h"
  700. #endif
  701. #endif // _OLEOUTL_H_