/************************************************************************* ** ** OLE 2.0 Sample Code ** ** oleoutl.h ** ** This file contains file contains data structure defintions, ** function prototypes, constants, etc. which are common to the ** server version and the container version of the app. ** app version of the Outline series of sample applications: ** Outline -- base version of the app (without OLE functionality) ** SvrOutl -- OLE 2.0 Server sample app ** CntrOutl -- OLE 2.0 Containter sample app ** ** (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved ** *************************************************************************/ #if !defined( _OLEOUTL_H_ ) #define _OLEOUTL_H_ #ifndef RC_INVOKED #pragma message ("INCLUDING OLEOUTL.H from " __FILE__) // make 'different levels of inderection' considered an error #pragma warning (error:4047) #endif /* RC_INVOKED */ #if defined( USE_MSGFILTER ) #include "msgfiltr.h" #endif // USE_MSGFILTER #include "defguid.h" /* Defines */ /* OLE2NOTE: these strings should correspond to the strings registered ** in the registration database. */ // REVIEW: should load strings from resource file #if defined( INPLACE_SVR ) #define CLSID_APP CLSID_ISvrOtl #define FULLUSERTYPENAME "Ole 2.0 In-Place Server Outline" #define SHORTUSERTYPENAME "Outline" // max 15 chars #undef APPFILENAMEFILTER #define APPFILENAMEFILTER "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|" #undef DEFEXTENSION #define DEFEXTENSION "oln" // Default file extension #endif // INPLACE_SVR #if defined( INPLACE_CNTR ) #define CLSID_APP CLSID_ICntrOtl #define FULLUSERTYPENAME "Ole 2.0 In-Place Container Outline" // #define SHORTUSERTYPENAME "Outline" // max 15 chars #undef APPFILENAMEFILTER #define APPFILENAMEFILTER "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|" #undef DEFEXTENSION #define DEFEXTENSION "olc" // Default file extension #endif // INPLACE_CNTR #if defined( OLE_SERVER ) && !defined( INPLACE_SVR ) #define CLSID_APP CLSID_SvrOutl #define FULLUSERTYPENAME "Ole 2.0 Server Sample Outline" #define SHORTUSERTYPENAME "Outline" #undef APPFILENAMEFILTER #define APPFILENAMEFILTER "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|" #undef DEFEXTENSION #define DEFEXTENSION "oln" // Default file extension #endif // OLE_SERVER && ! INPLACE_SVR #if defined( OLE_CNTR ) && !defined( INPLACE_CNTR ) #define CLSID_APP CLSID_CntrOutl #define FULLUSERTYPENAME "Ole 2.0 Container Sample Outline" // #define SHORTUSERTYPENAME "Outline" // max 15 chars #undef APPFILENAMEFILTER #define APPFILENAMEFILTER "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|" #undef DEFEXTENSION #define DEFEXTENSION "olc" // Default file extension #endif // OLE_CNTR && ! INPLACE_CNTR // Maximum number of formats offered by IDataObject::GetData/SetData #define MAXNOFMTS 10 #define MAXNOLINKTYPES 3 #if defined( USE_DRAGDROP ) #define DD_SEL_THRESH HITTESTDELTA // Border threshold to start drag #define MAX_SEL_ITEMS 0x0080 #endif // USE_DRAGDROP /* Positions of the various menus */ #define POS_FILEMENU 0 #define POS_EDITMENU 1 #define POS_VIEWMENU 2 #define POS_LINEMENU 3 #define POS_NAMEMENU 4 #define POS_OPTIONSMENU 5 #define POS_DEBUGMENU 6 #define POS_HELPMENU 7 #define POS_OBJECT 11 /* Types */ // Document initialization type #define DOCTYPE_EMBEDDED 3 // init from an IStorage* of an embedded obj #define DOCTYPE_FROMSTG 4 // init from an IStorage* with doc bit set /* Forward type definitions */ typedef struct tagOLEAPP FAR* LPOLEAPP; typedef struct tagOLEDOC FAR* LPOLEDOC; /* Flags to control Moniker assignment for OleDoc_GetFullMoniker */ // REVIEW: should use official OLEGETMONIKER type for final version typedef enum tagGETMONIKERTYPE { GETMONIKER_ONLYIFTHERE = 1, GETMONIKER_FORCEASSIGN = 2, GETMONIKER_UNASSIGN = 3, GETMONIKER_TEMPFORUSER = 4 } GETMONIKERTYPE; /* Flags to control direction for drag scrolling */ typedef enum tagSCROLLDIR { SCROLLDIR_NULL = 0, SCROLLDIR_UP = 1, SCROLLDIR_DOWN = 2, SCROLLDIR_RIGHT = 3, // currently not used SCROLLDIR_LEFT = 4 // currently not used } SCROLLDIR; /************************************************************************* ** class OLEDOC : OUTLINEDOC ** OLEDOC is an extention to the base OUTLINEDOC object (structure) ** that adds common OLE 2.0 functionality used by both the server ** and container versions. This is an abstract class. You do not ** instantiate an instance of OLEDOC directly but instead ** instantiate one of its concrete subclasses: SERVERDOC or ** CONTAINERDOC. There is one instance of an document ** object created per document open in the app. The SDI ** version of the app supports one ServerDoc at a time. The MDI ** version of the app can manage multiple documents at one time. ** The OLEDOC class inherits all fields from the OUTLINEDOC class. ** This inheritance is achieved by including a member variable of ** type OUTLINEDOC as the first field in the OLEDOC ** structure. Thus a pointer to an OLEDOC object can be cast to be ** a pointer to a OUTLINEDOC object. *************************************************************************/ typedef struct tagOLEDOC { OUTLINEDOC m_OutlineDoc; // ServerDoc inherits from OutlineDoc ULONG m_cRef; // total ref count for document ULONG m_dwStrongExtConn; // total strong connection count // (from IExternalConnection) // when this count transitions to 0 // and fLastUnlockCloses==TRUE, then // IOleObject::Close is called to // close the document. #if defined( _DEBUG ) ULONG m_cCntrLock; // total count of LockContainer locks // (for debugging purposes only) #endif LPSTORAGE m_lpStg; // OleDoc must keep its stg open // even in-memory server doc should // keep Stg open for low memory save LPSTREAM m_lpLLStm; // Hold LineList IStream* open for // low memory save LPSTREAM m_lpNTStm; // Hold NameTable IStream* open for // low memory save BOOL m_fObjIsClosing; // flag to guard recursive close call BOOL m_fObjIsDestroying; // flag to guard recursiv destroy call DWORD m_dwRegROT; // key if doc registered as running LPMONIKER m_lpFileMoniker; // moniker if file-based/untitled doc BOOL m_fLinkSourceAvail; // can doc offer CF_LINKSOURCE LPOLEDOC m_lpSrcDocOfCopy; // src doc if doc created for copy BOOL m_fUpdateEditMenu; // need to update edit menu?? #if defined( USE_DRAGDROP ) DWORD m_dwTimeEnterScrollArea; // time entering scroll region DWORD m_dwLastScrollDir; // current dir for drag scroll DWORD m_dwNextScrollTime; // time for next scroll BOOL m_fRegDragDrop; // is doc registered as drop target? BOOL m_fLocalDrag; // is doc source of the drag BOOL m_fLocalDrop; // was doc target of the drop BOOL m_fCanDropCopy; // is Drag/Drop copy/move possible? BOOL m_fCanDropLink; // is Drag/Drop link possible? BOOL m_fDragLeave; // has drag left BOOL m_fPendingDrag; // LButtonDown--possible drag pending POINT m_ptButDown; // LButtonDown coordinates #endif // USE_DRAGDROP #if defined( INPLACE_SVR ) || defined( INPLACE_CNTR ) BOOL m_fCSHelpMode; // Shift-F1 context help mode #endif struct CDocUnknownImpl { IUnknownVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_Unknown; struct CDocPersistFileImpl { IPersistFileVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_PersistFile; struct CDocOleItemContainerImpl { IOleItemContainerVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_OleItemContainer; struct CDocExternalConnectionImpl { IExternalConnectionVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_ExternalConnection; struct CDocDataObjectImpl { IDataObjectVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_DataObject; #ifdef USE_DRAGDROP struct CDocDropSourceImpl { IDropSourceVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_DropSource; struct CDocDropTargetImpl { IDropTargetVtbl FAR* lpVtbl; LPOLEDOC lpOleDoc; int cRef; // interface specific ref count. } m_DropTarget; #endif // USE_DRAGDROP } OLEDOC; /* OleDoc methods (functions) */ BOOL OleDoc_Init(LPOLEDOC lpOleDoc, BOOL fDataTransferDoc); BOOL OleDoc_InitNewFile(LPOLEDOC lpOleDoc); void OleDoc_ShowWindow(LPOLEDOC lpOleDoc); void OleDoc_HideWindow(LPOLEDOC lpOleDoc, BOOL fShutDown); HRESULT OleDoc_Lock(LPOLEDOC lpOleDoc, BOOL fLock, BOOL fLastUnlockReleases); ULONG OleDoc_AddRef(LPOLEDOC lpOleDoc); ULONG OleDoc_Release (LPOLEDOC lpOleDoc); HRESULT OleDoc_QueryInterface( LPOLEDOC lpOleDoc, REFIID riid, LPVOID FAR* lplpUnk ); BOOL OleDoc_Close(LPOLEDOC lpOleDoc, DWORD dwSaveOption); void OleDoc_Destroy(LPOLEDOC lpOleDoc); void OleDoc_SetUpdateEditMenuFlag(LPOLEDOC lpOleDoc, BOOL fUpdate); BOOL OleDoc_GetUpdateEditMenuFlag(LPOLEDOC lpOleDoc); void OleDoc_GetExtent(LPOLEDOC lpOleDoc, LPSIZEL lpsizel); HGLOBAL OleDoc_GetObjectDescriptorData( LPOLEDOC lpOleDoc, LPLINERANGE lplrSel ); LPMONIKER OleDoc_GetFullMoniker(LPOLEDOC lpOleDoc, DWORD dwAssign); void OleDoc_GetExtent(LPOLEDOC lpOleDoc, LPSIZEL lpsizel); void OleDoc_DocRenamedUpdate(LPOLEDOC lpOleDoc, LPMONIKER lpmkDoc); void OleDoc_CopyCommand(LPOLEDOC lpSrcOleDoc); void OleDoc_PasteCommand(LPOLEDOC lpOleDoc); void OleDoc_PasteSpecialCommand(LPOLEDOC lpOleDoc); LPOUTLINEDOC OleDoc_CreateDataTransferDoc(LPOLEDOC lpSrcOleDoc); BOOL OleDoc_PasteFromData( LPOLEDOC lpOleDoc, LPDATAOBJECT lpSrcDataObj, BOOL fLocalDataObj, BOOL fLink ); BOOL OleDoc_PasteFormatFromData( LPOLEDOC lpOleDoc, CLIPFORMAT cfFormat, LPDATAOBJECT lpSrcDataObj, BOOL fLocalDataObj, BOOL fLink, BOOL fDisplayAsIcon, HGLOBAL hMetaPict, LPSIZEL lpSizelInSrc ); BOOL OleDoc_QueryPasteFromData( LPOLEDOC lpOleDoc, LPDATAOBJECT lpSrcDataObj, BOOL fLink ); #if defined( USE_DRAGDROP ) BOOL OleDoc_QueryDrag( LPOLEDOC lpOleDoc, int y ); BOOL OleDoc_QueryDrop ( LPOLEDOC lpOleDoc, DWORD grfKeyState, POINTL pointl, BOOL fDragScroll, LPDWORD lpdwEffect ); DWORD OleDoc_DoDragDrop (LPOLEDOC lpSrcOleDoc); BOOL OleDoc_DoDragScroll(LPOLEDOC lpOleDoc, POINTL pointl); #endif // USE_DRAGDROP /* OleDoc::IUnknown methods (functions) */ STDMETHODIMP OleDoc_Unk_QueryInterface( LPUNKNOWN lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_Unk_AddRef(LPUNKNOWN lpThis); STDMETHODIMP_(ULONG) OleDoc_Unk_Release (LPUNKNOWN lpThis); /* OleDoc::IPersistFile methods (functions) */ STDMETHODIMP OleDoc_PFile_QueryInterface( LPPERSISTFILE lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_PFile_AddRef(LPPERSISTFILE lpThis); STDMETHODIMP_(ULONG) OleDoc_PFile_Release (LPPERSISTFILE lpThis); STDMETHODIMP OleDoc_PFile_GetClassID ( LPPERSISTFILE lpThis, CLSID FAR* lpclsid ); STDMETHODIMP OleDoc_PFile_IsDirty(LPPERSISTFILE lpThis); STDMETHODIMP OleDoc_PFile_Load ( LPPERSISTFILE lpThis, LPCOLESTR lpszFileName, DWORD grfMode ); STDMETHODIMP OleDoc_PFile_Save ( LPPERSISTFILE lpThis, LPCOLESTR lpszFileName, BOOL fRemember ); STDMETHODIMP OleDoc_PFile_SaveCompleted ( LPPERSISTFILE lpThis, LPCOLESTR lpszFileName ); STDMETHODIMP OleDoc_PFile_GetCurFile ( LPPERSISTFILE lpThis, LPOLESTR FAR* lplpszFileName ); /* OleDoc::IOleItemContainer methods (functions) */ STDMETHODIMP OleDoc_ItemCont_QueryInterface( LPOLEITEMCONTAINER lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_ItemCont_AddRef(LPOLEITEMCONTAINER lpThis); STDMETHODIMP_(ULONG) OleDoc_ItemCont_Release(LPOLEITEMCONTAINER lpThis); STDMETHODIMP OleDoc_ItemCont_ParseDisplayName( LPOLEITEMCONTAINER lpThis, LPBC lpbc, LPOLESTR lpszDisplayName, ULONG FAR* lpchEaten, LPMONIKER FAR* lplpmkOut ); STDMETHODIMP OleDoc_ItemCont_EnumObjects( LPOLEITEMCONTAINER lpThis, DWORD grfFlags, LPENUMUNKNOWN FAR* lplpenumUnknown ); STDMETHODIMP OleDoc_ItemCont_LockContainer( LPOLEITEMCONTAINER lpThis, BOOL fLock ); STDMETHODIMP OleDoc_ItemCont_GetObject( LPOLEITEMCONTAINER lpThis, LPOLESTR lpszItem, DWORD dwSpeedNeeded, LPBINDCTX lpbc, REFIID riid, LPVOID FAR* lplpvObject ); STDMETHODIMP OleDoc_ItemCont_GetObjectStorage( LPOLEITEMCONTAINER lpThis, LPOLESTR lpszItem, LPBINDCTX lpbc, REFIID riid, LPVOID FAR* lplpvStorage ); STDMETHODIMP OleDoc_ItemCont_IsRunning( LPOLEITEMCONTAINER lpThis, LPOLESTR lpszItem ); /* OleDoc::IPersistFile methods (functions) */ STDMETHODIMP OleDoc_ExtConn_QueryInterface( LPEXTERNALCONNECTION lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_ExtConn_AddRef(LPEXTERNALCONNECTION lpThis); STDMETHODIMP_(ULONG) OleDoc_ExtConn_Release (LPEXTERNALCONNECTION lpThis); STDMETHODIMP_(DWORD) OleDoc_ExtConn_AddConnection( LPEXTERNALCONNECTION lpThis, DWORD extconn, DWORD reserved ); STDMETHODIMP_(DWORD) OleDoc_ExtConn_ReleaseConnection( LPEXTERNALCONNECTION lpThis, DWORD extconn, DWORD reserved, BOOL fLastReleaseCloses ); /* OleDoc::IDataObject methods (functions) */ STDMETHODIMP OleDoc_DataObj_QueryInterface ( LPDATAOBJECT lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_DataObj_AddRef(LPDATAOBJECT lpThis); STDMETHODIMP_(ULONG) OleDoc_DataObj_Release (LPDATAOBJECT lpThis); STDMETHODIMP OleDoc_DataObj_GetData ( LPDATAOBJECT lpThis, LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium ); STDMETHODIMP OleDoc_DataObj_GetDataHere ( LPDATAOBJECT lpThis, LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium ); STDMETHODIMP OleDoc_DataObj_QueryGetData ( LPDATAOBJECT lpThis, LPFORMATETC lpFormatetc ); STDMETHODIMP OleDoc_DataObj_GetCanonicalFormatEtc( LPDATAOBJECT lpThis, LPFORMATETC lpformatetc, LPFORMATETC lpformatetcOut ); STDMETHODIMP OleDoc_DataObj_SetData ( LPDATAOBJECT lpThis, LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium, BOOL fRelease ); STDMETHODIMP OleDoc_DataObj_EnumFormatEtc( LPDATAOBJECT lpThis, DWORD dwDirection, LPENUMFORMATETC FAR* lplpenumFormatEtc ); STDMETHODIMP OleDoc_DataObj_DAdvise( LPDATAOBJECT lpThis, FORMATETC FAR* lpFormatetc, DWORD advf, LPADVISESINK lpAdvSink, DWORD FAR* lpdwConnection ); STDMETHODIMP OleDoc_DataObj_DUnadvise(LPDATAOBJECT lpThis,DWORD dwConnection); STDMETHODIMP OleDoc_DataObj_EnumDAdvise( LPDATAOBJECT lpThis, LPENUMSTATDATA FAR* lplpenumAdvise ); #ifdef USE_DRAGDROP /* OleDoc::IDropSource methods (functions) */ STDMETHODIMP OleDoc_DropSource_QueryInterface( LPDROPSOURCE lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_DropSource_AddRef( LPDROPSOURCE lpThis ); STDMETHODIMP_(ULONG) OleDoc_DropSource_Release ( LPDROPSOURCE lpThis); STDMETHODIMP OleDoc_DropSource_QueryContinueDrag ( LPDROPSOURCE lpThis, BOOL fEscapePressed, DWORD grfKeyState ); STDMETHODIMP OleDoc_DropSource_GiveFeedback ( LPDROPSOURCE lpThis, DWORD dwEffect ); /* OleDoc::IDropTarget methods (functions) */ STDMETHODIMP OleDoc_DropTarget_QueryInterface( LPDROPTARGET lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleDoc_DropTarget_AddRef(LPDROPTARGET lpThis); STDMETHODIMP_(ULONG) OleDoc_DropTarget_Release ( LPDROPTARGET lpThis); STDMETHODIMP OleDoc_DropTarget_DragEnter ( LPDROPTARGET lpThis, LPDATAOBJECT lpDataObj, DWORD grfKeyState, POINTL pointl, LPDWORD lpdwEffect ); STDMETHODIMP OleDoc_DropTarget_DragOver ( LPDROPTARGET lpThis, DWORD grfKeyState, POINTL pointl, LPDWORD lpdwEffect ); STDMETHODIMP OleDoc_DropTarget_DragLeave ( LPDROPTARGET lpThis); STDMETHODIMP OleDoc_DropTarget_Drop ( LPDROPTARGET lpThis, LPDATAOBJECT lpDataObj, DWORD grfKeyState, POINTL pointl, LPDWORD lpdwEffect ); #endif // USE_DRAGDROP /************************************************************************* ** class APPCLASSFACTORY ** APPCLASSFACTORY implements the IClassFactory interface. it ** instantiates document instances of the correct type depending on ** how the application is compiled (either ServerDoc or ContainerDoc ** instances). by implementing this ** interface in a seperate interface from the App object itself, it ** is easier to manage when the IClassFactory should be ** registered/revoked. when the OleApp object is first initialized ** in OleApp_InitInstance an instance of APPCLASSFACTORY is created ** and registered (CoRegisterClassObject called). when the App ** object gets destroyed (in OleApp_Destroy) this APPCLASSFACTORY is ** revoked (CoRevokeClassObject called) and released. the simple ** fact that the IClassFactory is registered does not on its own keep ** the application alive. *************************************************************************/ typedef struct tagAPPCLASSFACTORY { IClassFactoryVtbl FAR* m_lpVtbl; UINT m_cRef; #if defined( _DEBUG ) LONG m_cSvrLock; // total count of LockServer locks // (for debugging purposes only) #endif } APPCLASSFACTORY, FAR* LPAPPCLASSFACTORY; /* PUBLIC FUNCTIONS */ LPCLASSFACTORY WINAPI AppClassFactory_Create(void); /* interface IClassFactory implementation */ STDMETHODIMP AppClassFactory_QueryInterface( LPCLASSFACTORY lpThis, REFIID riid, LPVOID FAR* ppvObj); STDMETHODIMP_(ULONG) AppClassFactory_AddRef(LPCLASSFACTORY lpThis); STDMETHODIMP_(ULONG) AppClassFactory_Release(LPCLASSFACTORY lpThis); STDMETHODIMP AppClassFactory_CreateInstance ( LPCLASSFACTORY lpThis, LPUNKNOWN lpUnkOuter, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP AppClassFactory_LockServer ( LPCLASSFACTORY lpThis, BOOL fLock ); /************************************************************************* ** class OLEAPP : OUTLINEAPP ** OLEAPP is an extention to the base OUTLINEAPP object (structure) ** that adds common OLE 2.0 functionality used by both the server ** and container versions. This is an abstract class. You do not ** instantiate an instance of OLEAPP directly but instead ** instantiate one of its concrete subclasses: SERVERAPP or ** CONTAINERAPP. There is one instance of an document application ** object created per running application instance. This ** object holds many fields that could otherwise be organized as ** global variables. The OLEAPP class inherits all fields ** from the OUTLINEAPP class. This inheritance is achieved by including a ** member variable of type OUTLINEAPP as the first field in the OLEAPP ** structure. Thus a pointer to a OLEAPP object can be cast to be ** a pointer to a OUTLINEAPP object. *************************************************************************/ typedef struct tagOLEAPP { OUTLINEAPP m_OutlineApp; // inherits all fields of OutlineApp ULONG m_cRef; // total ref count for app ULONG m_cDoc; // total count of open documents BOOL m_fUserCtrl; // does user control life-time of app? DWORD m_dwRegClassFac; // value returned by CoRegisterClassObject LPCLASSFACTORY m_lpClassFactory;// ptr to allocated ClassFactory instance #if defined( USE_MSGFILTER ) LPMESSAGEFILTER m_lpMsgFilter; // ptr to allocated MsgFilter instance MSGPENDINGPROC m_lpfnMsgPending;// ptr to msg pending callback function #endif // USE_MSGFILTER BOOL m_fOleInitialized; // was OleInitialize called UINT m_cModalDlgActive; // count of modal dialogs up; 0 = no dlg. UINT m_cfEmbedSource; // OLE 2.0 clipboard format UINT m_cfEmbeddedObject; // OLE 2.0 clipboard format UINT m_cfLinkSource; // OLE 2.0 clipboard format UINT m_cfObjectDescriptor; // OLE 2.0 clipboard format UINT m_cfLinkSrcDescriptor; // OLE 2.0 clipboard format UINT m_cfFileName; // std Windows clipboard format FORMATETC m_arrDocGetFmts[MAXNOFMTS]; // fmts offered by copy & GetData UINT m_nDocGetFmts; // no of fmtetc's for GetData OLEUIPASTEENTRY m_arrPasteEntries[MAXNOFMTS]; // input for PasteSpl. int m_nPasteEntries; // input for PasteSpl. UINT m_arrLinkTypes[MAXNOLINKTYPES]; // input for PasteSpl. int m_nLinkTypes; // input for PasteSpl. #if defined( USE_DRAGDROP ) int m_nDragDelay; // time delay (in msec) before drag should start int m_nDragMinDist; // min. distance (radius) before drag should start int m_nScrollDelay; // time delay (in msec) before scroll should start int m_nScrollInset; // Border inset distance to start drag scroll int m_nScrollInterval; // scroll interval time (in msec) #if defined( IF_SPECIAL_DD_CURSORS_NEEDED ) // This would be used if the app wanted to have custom drag/drop cursors HCURSOR m_hcursorDragNone; HCURSOR m_hcursorDragCopy; HCURSOR m_hcursorDragLink; #endif // IF_SPECIAL_DD_CURSORS_NEEDED #endif // USE_DRAGDROP #if defined( OLE_CNTR ) HPALETTE m_hStdPal; // standard color palette for OLE // it is a good idea for containers // to use this standard palette // even if they do not use colors // themselves. this will allow // embedded object to get a good // distribution of colors when they // are being drawn by the container. // #endif struct CAppUnknownImpl { IUnknownVtbl FAR* lpVtbl; LPOLEAPP lpOleApp; int cRef; // interface specific ref count. } m_Unknown; } OLEAPP; /* ServerApp methods (functions) */ BOOL OleApp_InitInstance(LPOLEAPP lpOleApp, HINSTANCE hInst, int nCmdShow); void OleApp_TerminateApplication(LPOLEAPP lpOleApp); BOOL OleApp_ParseCmdLine(LPOLEAPP lpOleApp, LPSTR lpszCmdLine, int nCmdShow); void OleApp_Destroy(LPOLEAPP lpOleApp); BOOL OleApp_CloseAllDocsAndExitCommand( LPOLEAPP lpOleApp, BOOL fForceEndSession ); void OleApp_ShowWindow(LPOLEAPP lpOleApp, BOOL fGiveUserCtrl); void OleApp_HideWindow(LPOLEAPP lpOleApp); void OleApp_HideIfNoReasonToStayVisible(LPOLEAPP lpOleApp); void OleApp_DocLockApp(LPOLEAPP lpOleApp); void OleApp_DocUnlockApp(LPOLEAPP lpOleApp, LPOUTLINEDOC lpOutlineDoc); HRESULT OleApp_Lock(LPOLEAPP lpOleApp, BOOL fLock, BOOL fLastUnlockReleases); ULONG OleApp_AddRef(LPOLEAPP lpOleApp); ULONG OleApp_Release (LPOLEAPP lpOleApp); HRESULT OleApp_QueryInterface ( LPOLEAPP lpOleApp, REFIID riid, LPVOID FAR* lplpUnk ); void OleApp_RejectInComingCalls(LPOLEAPP lpOleApp, BOOL fReject); void OleApp_DisableBusyDialogs( LPOLEAPP lpOleApp, BOOL FAR* lpfPrevBusyEnable, BOOL FAR* lpfPrevNREnable ); void OleApp_EnableBusyDialogs( LPOLEAPP lpOleApp, BOOL fPrevBusyEnable, BOOL fPrevNREnable ); void OleApp_PreModalDialog(LPOLEAPP lpOleApp, LPOLEDOC lpActiveOleDoc); void OleApp_PostModalDialog(LPOLEAPP lpOleApp, LPOLEDOC lpActiveOleDoc); BOOL OleApp_InitVtbls (LPOLEAPP lpOleApp); void OleApp_InitMenu( LPOLEAPP lpOleApp, LPOLEDOC lpOleDoc, HMENU hMenu ); void OleApp_UpdateEditMenu( LPOLEAPP lpOleApp, LPOUTLINEDOC lpOutlineDoc, HMENU hMenuEdit ); BOOL OleApp_RegisterClassFactory(LPOLEAPP lpOleApp); void OleApp_RevokeClassFactory(LPOLEAPP lpOleApp); #if defined( USE_MSGFILTER ) BOOL OleApp_RegisterMessageFilter(LPOLEAPP lpOleApp); void OleApp_RevokeMessageFilter(LPOLEAPP lpOleApp); BOOL FAR PASCAL EXPORT MessagePendingProc(MSG FAR *lpMsg); #endif // USE_MSGFILTER void OleApp_FlushClipboard(LPOLEAPP lpOleApp); void OleApp_NewCommand(LPOLEAPP lpOleApp); void OleApp_OpenCommand(LPOLEAPP lpOleApp); #if defined( OLE_CNTR ) LRESULT OleApp_QueryNewPalette(LPOLEAPP lpOleApp); #endif // OLE_CNTR LRESULT wSelectPalette(HWND hWnd, HPALETTE hPal, BOOL fBackground); /* OleApp::IUnknown methods (functions) */ STDMETHODIMP OleApp_Unk_QueryInterface( LPUNKNOWN lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) OleApp_Unk_AddRef(LPUNKNOWN lpThis); STDMETHODIMP_(ULONG) OleApp_Unk_Release (LPUNKNOWN lpThis); /* Function prototypes in debug.c */ void InstallMessageFilterCommand(void); void RejectIncomingCommand(void); #if defined( OLE_SERVER ) #include "svroutl.h" #endif #if defined( OLE_CNTR ) #include "cntroutl.h" #endif #endif // _OLEOUTL_H_