/************************************************************************* ** ** OLE 2.0 Server Sample Code ** ** svroutl.h ** ** This file contains file contains data structure defintions, ** function prototypes, constants, etc. used by the OLE 2.0 server ** 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( _SVROUTL_H_ ) #define _SVROUTL_H_ #ifndef RC_INVOKED #pragma message ("INCLUDING SVROUTL.H from " __FILE__) #endif /* RC_INVOKED */ #include "oleoutl.h" /* Defines */ // Enable SVROUTL and ISVROTL to emulate each other (TreatAs aka. ActivateAs) #define SVR_TREATAS 1 // Enable SVROUTL and ISVROTL to convert each other (TreatAs aka. ActivateAs) #define SVR_CONVERTTO 1 // Enable ISVROTL to operate as in inside-out style in-place object #define SVR_INSIDEOUT 1 /* Default name used for container of the embedded object. used if ** container forgets to call IOleObject::SetHostNames */ // REVIEW: should load from string resource #define DEFCONTAINERNAME "Unknown Document" /* Default prefix for auto-generated range names. This is used with ** links to unnamed ranges (pseudo objects). */ // REVIEW: should load from string resource #define DEFRANGENAMEPREFIX "Range" // Maximum length of strings accepted through IOleObject::SetHostNames // (note: this is rather arbitrary; a better strategy would be to // dynamically allocated buffers for these strings.) #define MAXAPPNAME 80 #define MAXCONTAINERNAME 80 // Menu option in embedding mode #define IDM_F_UPDATE 1151 /* Types */ /* Codes for CallBack events */ typedef enum tagOLE_NOTIFICATION { OLE_ONDATACHANGE, // 0 OLE_ONSAVE, // 1 OLE_ONRENAME, // 2 OLE_ONCLOSE // 3 } OLE_NOTIFICATION; /* Codes to indicate mode of storage for an object. ** Mode of the storage is modified by the IPersistStorage methods: ** Save, HandsOffStorage, and SaveCompleted. */ typedef enum tagSTGMODE { STGMODE_NORMAL = 0, STGMODE_NOSCRIBBLE = 1, STGMODE_HANDSOFF = 2 } STGMODE; /* Forward type definitions */ typedef struct tagSERVERAPP FAR* LPSERVERAPP; typedef struct tagSERVERDOC FAR* LPSERVERDOC; typedef struct tagPSEUDOOBJ FAR* LPPSEUDOOBJ; typedef struct tagINPLACEDATA { OLEMENUGROUPWIDTHS menuGroupWidths; HOLEMENU hOlemenu; HMENU hMenuShared; LPOLEINPLACESITE lpSite; LPOLEINPLACEUIWINDOW lpDoc; LPOLEINPLACEFRAME lpFrame; OLEINPLACEFRAMEINFO frameInfo; HWND hWndFrame; BOOL fBorderOn; RECT rcPosRect; RECT rcClipRect; } INPLACEDATA, FAR* LPINPLACEDATA; /************************************************************************* ** class SERVERDOC : OLEDOC ** SERVERDOC is an extention to the abstract base OLEDOC class. ** The OLEDOC class defines the fields, methods and interfaces that ** are common to both server and client implementations. The ** SERVERDOC class adds the fields, methods and interfaces that are ** specific to OLE 2.0 Server functionality. There is one instance ** of SERVERDOC 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 SERVERDOC class inherits all fields from the OLEDOC class. ** This inheritance is achieved by including a member variable of ** type OLEDOC as the first field in the SERVERDOC structure. Thus a ** pointer to a SERVERDOC object can be cast to be a pointer to a ** OLEDOC object or an OUTLINEDOC object *************************************************************************/ typedef struct tagSERVERDOC { OLEDOC m_OleDoc; // ServerDoc inherits from OleDoc ULONG m_cPseudoObj; // total count of pseudo obj's LPOLECLIENTSITE m_lpOleClientSite; // Client associated with the obj LPOLEADVISEHOLDER m_lpOleAdviseHldr; // helper obj to hold ole advises LPDATAADVISEHOLDER m_lpDataAdviseHldr; // helper obj to hold data advises BOOL m_fNoScribbleMode; // was IPS::Save called BOOL m_fSaveWithSameAsLoad; // was IPS::Save called with // fSameAsLoad==TRUE. char m_szContainerApp[MAXAPPNAME]; char m_szContainerObj[MAXCONTAINERNAME]; ULONG m_nNextRangeNo; // next no. for unnamed range LINERANGE m_lrSrcSelOfCopy; // src sel if doc created for copy BOOL m_fDataChanged; // data changed when draw disabled BOOL m_fSizeChanged; // size changed when draw disabled BOOL m_fSendDataOnStop; // did data ever change? #if defined( SVR_TREATAS ) CLSID m_clsidTreatAs; // clsid to pretend to be LPSTR m_lpszTreatAsType; // user type name to pretend to be #endif // SVR_TREATAS #if defined( LATER ) // REVIEW: is it necessary to register a WildCard Moniker DWORD m_dwWildCardRegROT; // key if wildcard reg'ed in ROT #endif #if defined( INPLACE_SVR ) BOOL m_fInPlaceActive; BOOL m_fInPlaceVisible; BOOL m_fUIActive; HWND m_hWndParent; HWND m_hWndHatch; LPINPLACEDATA m_lpIPData; BOOL m_fMenuHelpMode;// is F1 pressed in menu, give help struct CDocOleInPlaceObjectImpl { IOleInPlaceObjectVtbl FAR* lpVtbl; LPSERVERDOC lpServerDoc; int cRef; // interface specific ref count. } m_OleInPlaceObject; struct CDocOleInPlaceActiveObjectImpl { IOleInPlaceActiveObjectVtbl FAR* lpVtbl; LPSERVERDOC lpServerDoc; int cRef;// interface specific ref count. } m_OleInPlaceActiveObject; #endif // INPLACE_SVR struct CDocOleObjectImpl { IOleObjectVtbl FAR* lpVtbl; LPSERVERDOC lpServerDoc; int cRef; // interface specific ref count. } m_OleObject; struct CDocPersistStorageImpl { IPersistStorageVtbl FAR* lpVtbl; LPSERVERDOC lpServerDoc; int cRef; // interface specific ref count. } m_PersistStorage; #if defined( SVR_TREATAS ) struct CDocStdMarshalInfoImpl { IStdMarshalInfoVtbl FAR* lpVtbl; LPSERVERDOC lpServerDoc; int cRef; // interface specific ref count. } m_StdMarshalInfo; #endif // SVR_TREATAS } SERVERDOC; /* ServerDoc methods (functions) */ BOOL ServerDoc_Init(LPSERVERDOC lpServerDoc, BOOL fDataTransferDoc); BOOL ServerDoc_InitNewEmbed(LPSERVERDOC lpServerDoc); void ServerDoc_PseudoObjUnlockDoc( LPSERVERDOC lpServerDoc, LPPSEUDOOBJ lpPseudoObj ); void ServerDoc_PseudoObjLockDoc(LPSERVERDOC lpServerDoc); BOOL ServerDoc_PasteFormatFromData( LPSERVERDOC lpServerDoc, CLIPFORMAT cfFormat, LPDATAOBJECT lpSrcDataObj, BOOL fLocalDataObj, BOOL fLink ); BOOL ServerDoc_QueryPasteFromData( LPSERVERDOC lpServerDoc, LPDATAOBJECT lpSrcDataObj, BOOL fLink ); HRESULT ServerDoc_GetClassID(LPSERVERDOC lpServerDoc, LPCLSID lpclsid); void ServerDoc_UpdateMenu(LPSERVERDOC lpServerDoc); void ServerDoc_RestoreMenu(LPSERVERDOC lpServerDoc); HRESULT ServerDoc_GetData ( LPSERVERDOC lpServerDoc, LPFORMATETC lpformatetc, LPSTGMEDIUM lpMedium ); HRESULT ServerDoc_GetDataHere ( LPSERVERDOC lpServerDoc, LPFORMATETC lpformatetc, LPSTGMEDIUM lpMedium ); HRESULT ServerDoc_QueryGetData(LPSERVERDOC lpServerDoc,LPFORMATETC lpformatetc); HRESULT ServerDoc_EnumFormatEtc( LPSERVERDOC lpServerDoc, DWORD dwDirection, LPENUMFORMATETC FAR* lplpenumFormatEtc ); HANDLE ServerDoc_GetMetafilePictData( LPSERVERDOC lpServerDoc, LPLINERANGE lplrSel ); void ServerDoc_SendAdvise( LPSERVERDOC lpServerDoc, WORD wAdvise, LPMONIKER lpmkDoc, DWORD dwAdvf ); HRESULT ServerDoc_GetObject( LPSERVERDOC lpServerDoc, LPOLESTR lpszItem, REFIID riid, LPVOID FAR* lplpvObject ); HRESULT ServerDoc_IsRunning(LPSERVERDOC lpServerDoc, LPOLESTR lpszItem); LPMONIKER ServerDoc_GetSelRelMoniker( LPSERVERDOC lpServerDoc, LPLINERANGE lplrSel, DWORD dwAssign ); LPMONIKER ServerDoc_GetSelFullMoniker( LPSERVERDOC lpServerDoc, LPLINERANGE lplrSel, DWORD dwAssign ); #if defined( INPLACE_SVR ) HRESULT ServerDoc_DoInPlaceActivate( LPSERVERDOC lpServerDoc, LONG lVerb, LPMSG lpmsg, LPOLECLIENTSITE lpActiveSite ); HRESULT ServerDoc_DoInPlaceDeactivate(LPSERVERDOC lpServerDoc); HRESULT ServerDoc_DoInPlaceHide(LPSERVERDOC lpServerDoc); BOOL ServerDoc_AllocInPlaceData(LPSERVERDOC lpServerDoc); void ServerDoc_FreeInPlaceData(LPSERVERDOC lpServerDoc); HRESULT ServerDoc_AssembleMenus(LPSERVERDOC lpServerDoc); void ServerDoc_DisassembleMenus(LPSERVERDOC lpServerDoc); void ServerDoc_CalcInPlaceWindowPos( LPSERVERDOC lpServerDoc, LPRECT lprcListBox, LPRECT lprcDoc, LPSCALEFACTOR lpscale ); void ServerDoc_UpdateInPlaceWindowOnExtentChange(LPSERVERDOC lpServerDoc); void ServerDoc_ResizeInPlaceWindow( LPSERVERDOC lpServerDoc, LPCRECT lprcPosRect, LPCRECT lprcClipRect ); void ServerDoc_ShadeInPlaceBorder(LPSERVERDOC lpServerDoc, BOOL fShadeOn); void ServerDoc_SetStatusText(LPSERVERDOC lpServerDoc, LPSTR lpszMessage); LPOLEINPLACEFRAME ServerDoc_GetTopInPlaceFrame(LPSERVERDOC lpServerDoc); void ServerDoc_GetSharedMenuHandles( LPSERVERDOC lpServerDoc, HMENU FAR* lphSharedMenu, HOLEMENU FAR* lphOleMenu ); void ServerDoc_AddFrameLevelUI(LPSERVERDOC lpServerDoc); void ServerDoc_AddFrameLevelTools(LPSERVERDOC lpServerDoc); void ServerDoc_UIActivate (LPSERVERDOC lpServerDoc); #if defined( USE_FRAMETOOLS ) void ServerDoc_RemoveFrameLevelTools(LPSERVERDOC lpServerDoc); #endif // USE_FRAMETOOLS #endif // INPLACE_SVR /* ServerDoc::IOleObject methods (functions) */ STDMETHODIMP SvrDoc_OleObj_QueryInterface( LPOLEOBJECT lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) SvrDoc_OleObj_AddRef(LPOLEOBJECT lpThis); STDMETHODIMP_(ULONG) SvrDoc_OleObj_Release(LPOLEOBJECT lpThis); STDMETHODIMP SvrDoc_OleObj_SetClientSite( LPOLEOBJECT lpThis, LPOLECLIENTSITE lpclientSite ); STDMETHODIMP SvrDoc_OleObj_GetClientSite( LPOLEOBJECT lpThis, LPOLECLIENTSITE FAR* lplpClientSite ); STDMETHODIMP SvrDoc_OleObj_SetHostNames( LPOLEOBJECT lpThis, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj ); STDMETHODIMP SvrDoc_OleObj_Close( LPOLEOBJECT lpThis, DWORD dwSaveOption ); STDMETHODIMP SvrDoc_OleObj_SetMoniker( LPOLEOBJECT lpThis, DWORD dwWhichMoniker, LPMONIKER lpmk ); STDMETHODIMP SvrDoc_OleObj_GetMoniker( LPOLEOBJECT lpThis, DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER FAR* lplpmk ); STDMETHODIMP SvrDoc_OleObj_InitFromData( LPOLEOBJECT lpThis, LPDATAOBJECT lpDataObject, BOOL fCreation, DWORD reserved ); STDMETHODIMP SvrDoc_OleObj_GetClipboardData( LPOLEOBJECT lpThis, DWORD reserved, LPDATAOBJECT FAR* lplpDataObject ); STDMETHODIMP SvrDoc_OleObj_DoVerb( LPOLEOBJECT lpThis, LONG lVerb, LPMSG lpmsg, LPOLECLIENTSITE lpActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect ); STDMETHODIMP SvrDoc_OleObj_EnumVerbs( LPOLEOBJECT lpThis, LPENUMOLEVERB FAR* lplpenumOleVerb ); STDMETHODIMP SvrDoc_OleObj_Update(LPOLEOBJECT lpThis); STDMETHODIMP SvrDoc_OleObj_IsUpToDate(LPOLEOBJECT lpThis); STDMETHODIMP SvrDoc_OleObj_GetUserClassID( LPOLEOBJECT lpThis, LPCLSID lpclsid ); STDMETHODIMP SvrDoc_OleObj_GetUserType( LPOLEOBJECT lpThis, DWORD dwFormOfType, LPOLESTR FAR* lpszUserType ); STDMETHODIMP SvrDoc_OleObj_SetExtent( LPOLEOBJECT lpThis, DWORD dwDrawAspect, LPSIZEL lplgrc ); STDMETHODIMP SvrDoc_OleObj_GetExtent( LPOLEOBJECT lpThis, DWORD dwDrawAspect, LPSIZEL lplgrc ); STDMETHODIMP SvrDoc_OleObj_Advise( LPOLEOBJECT lpThis, LPADVISESINK lpAdvSink, LPDWORD lpdwConnection ); STDMETHODIMP SvrDoc_OleObj_Unadvise(LPOLEOBJECT lpThis, DWORD dwConnection); STDMETHODIMP SvrDoc_OleObj_EnumAdvise( LPOLEOBJECT lpThis, LPENUMSTATDATA FAR* lplpenumAdvise ); STDMETHODIMP SvrDoc_OleObj_GetMiscStatus( LPOLEOBJECT lpThis, DWORD dwAspect, DWORD FAR* lpdwStatus ); STDMETHODIMP SvrDoc_OleObj_SetColorScheme( LPOLEOBJECT lpThis, LPLOGPALETTE lpLogpal ); STDMETHODIMP SvrDoc_OleObj_LockObject( LPOLEOBJECT lpThis, BOOL fLock ); /* ServerDoc::IPersistStorage methods (functions) */ STDMETHODIMP SvrDoc_PStg_QueryInterface( LPPERSISTSTORAGE lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) SvrDoc_PStg_AddRef(LPPERSISTSTORAGE lpThis); STDMETHODIMP_(ULONG) SvrDoc_PStg_Release(LPPERSISTSTORAGE lpThis); STDMETHODIMP SvrDoc_PStg_GetClassID( LPPERSISTSTORAGE lpThis, LPCLSID lpClassID ); STDMETHODIMP SvrDoc_PStg_IsDirty(LPPERSISTSTORAGE lpThis); STDMETHODIMP SvrDoc_PStg_InitNew( LPPERSISTSTORAGE lpThis, LPSTORAGE lpStg ); STDMETHODIMP SvrDoc_PStg_Load( LPPERSISTSTORAGE lpThis, LPSTORAGE lpStg ); STDMETHODIMP SvrDoc_PStg_Save( LPPERSISTSTORAGE lpThis, LPSTORAGE lpStg, BOOL fSameAsLoad ); STDMETHODIMP SvrDoc_PStg_SaveCompleted( LPPERSISTSTORAGE lpThis, LPSTORAGE lpStgNew ); STDMETHODIMP SvrDoc_PStg_HandsOffStorage(LPPERSISTSTORAGE lpThis); #if defined( SVR_TREATAS ) /* ServerDoc::IStdMarshalInfo methods (functions) */ STDMETHODIMP SvrDoc_StdMshl_QueryInterface( LPSTDMARSHALINFO lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) SvrDoc_StdMshl_AddRef(LPSTDMARSHALINFO lpThis); STDMETHODIMP_(ULONG) SvrDoc_StdMshl_Release(LPSTDMARSHALINFO lpThis); STDMETHODIMP SvrDoc_StdMshl_GetClassForHandler( LPSTDMARSHALINFO lpThis, DWORD dwDestContext, LPVOID pvDestContext, LPCLSID lpClassID ); #endif // SVR_TREATAS /************************************************************************* ** class SERVERAPP : OLEAPP ** SERVERAPP is an extention to the abstract base OLEAPP class. ** The OLEAPP class defines the fields, methods and interfaces that ** are common to both server and client implementations. The ** SERVERAPP class adds the fields and methods that are specific to ** OLE 2.0 Server functionality. There is one instance of ** SERVERAPP object created per running application instance. This ** object holds many fields that could otherwise be organized as ** global variables. The SERVERAPP class inherits all fields ** from the OLEAPP class. This inheritance is achieved by including a ** member variable of type OLEAPP as the first field in the SERVERAPP ** structure. OLEAPP inherits from OLEAPP. This inheritance is ** achieved in the same manner. Thus a pointer to a SERVERAPP object ** can be cast to be a pointer to an OLEAPP or an OUTLINEAPP object *************************************************************************/ typedef struct tagSERVERAPP { OLEAPP m_OleApp; // ServerApp inherits all fields of OleApp #if defined( INPLACE_SVR ) HACCEL m_hAccelIPSvr; // accelerators for server's active object commands HACCEL m_hAccelBaseApp; // normal accel for non-inplace server mode HMENU m_hMenuEdit; // handle to Edit menu of the server app HMENU m_hMenuLine; // handle to Line menu of the server app HMENU m_hMenuName; // handle to Name menu of the server app HMENU m_hMenuOptions; // handle to Options menu of the server app HMENU m_hMenuDebug; // handle to Debug menu of the server app HMENU m_hMenuHelp; // handle to Help menu of the server app LPINPLACEDATA m_lpIPData; #endif } SERVERAPP; /* ServerApp methods (functions) */ BOOL ServerApp_InitInstance( LPSERVERAPP lpServerApp, HINSTANCE hInst, int nCmdShow ); BOOL ServerApp_InitVtbls (LPSERVERAPP lpServerApp); /************************************************************************* ** class SERVERNAME : OUTLINENAME ** SERVERNAME class is an extension to the OUTLINENAME base class that ** adds functionallity required to support linking to ranges (pseudo ** objects). Pseudo objects are used to allow linking to a range ** (sub-selection) of a SERVERDOC document. The base class OUTLINENAME ** stores a particular named selection in the document. The ** NAMETABLE class holds all of the names defined in a particular ** document. Each OUTLINENAME object has a string as its key and a ** starting line index and an ending line index for the named range. ** The SERVERNAME class, also, stores a pointer to a PSEUDOOBJ if one ** has been allocated that corresponds to the named selection. ** The SERVERNAME class inherits all fields from the OUTLINENAME class. ** This inheritance is achieved by including a member variable of ** type OUTLINENAME as the first field in the SERVERNAME ** structure. Thus a pointer to an SERVERNAME object can be cast to be ** a pointer to a OUTLINENAME object. *************************************************************************/ typedef struct tagSERVERNAME { OUTLINENAME m_Name; // ServerName inherits all fields of Name LPPSEUDOOBJ m_lpPseudoObj; // ptr to pseudo object if allocated } SERVERNAME, FAR* LPSERVERNAME; /* ServerName methods (functions) */ void ServerName_SetSel( LPSERVERNAME lpServerName, LPLINERANGE lplrSel, BOOL fRangeModified ); void ServerName_SendPendingAdvises(LPSERVERNAME lpServerName); LPPSEUDOOBJ ServerName_GetPseudoObj( LPSERVERNAME lpServerName, LPSERVERDOC lpServerDoc ); void ServerName_ClosePseudoObj(LPSERVERNAME lpServerName); /************************************************************************* ** class PSEUDOOBJ ** The PSEUDOOBJ (pseudo object) is a concrete class. A pseudo object ** is created when a link is made to a range of lines within an ** SERVERDOC document. A pseudo object is dependent on the existance ** of the SERVERDOC which represents the whole document. *************************************************************************/ typedef struct tagPSEUDOOBJ { ULONG m_cRef; // total ref count for obj BOOL m_fObjIsClosing; // flag to guard recursive close LPSERVERNAME m_lpName; // named range for this pseudo obj LPSERVERDOC m_lpDoc; // ptr to whole document LPOLEADVISEHOLDER m_lpOleAdviseHldr; // helper obj to hold ole advises LPDATAADVISEHOLDER m_lpDataAdviseHldr; // helper obj to hold data advises BOOL m_fDataChanged; // data changed when draw disabled struct CPseudoObjUnknownImpl { IUnknownVtbl FAR* lpVtbl; LPPSEUDOOBJ lpPseudoObj; int cRef; // interface specific ref count. } m_Unknown; struct CPseudoObjOleObjectImpl { IOleObjectVtbl FAR* lpVtbl; LPPSEUDOOBJ lpPseudoObj; int cRef; // interface specific ref count. } m_OleObject; struct CPseudoObjDataObjectImpl { IDataObjectVtbl FAR* lpVtbl; LPPSEUDOOBJ lpPseudoObj; int cRef; // interface specific ref count. } m_DataObject; } PSEUDOOBJ; /* PseudoObj methods (functions) */ void PseudoObj_Init( LPPSEUDOOBJ lpPseudoObj, LPSERVERNAME lpServerName, LPSERVERDOC lpServerDoc ); ULONG PseudoObj_AddRef(LPPSEUDOOBJ lpPseudoObj); ULONG PseudoObj_Release(LPPSEUDOOBJ lpPseudoObj); HRESULT PseudoObj_QueryInterface( LPPSEUDOOBJ lpPseudoObj, REFIID riid, LPVOID FAR* lplpUnk ); BOOL PseudoObj_Close(LPPSEUDOOBJ lpPseudoObj); void PseudoObj_Destroy(LPPSEUDOOBJ lpPseudoObj); void PseudoObj_GetSel(LPPSEUDOOBJ lpPseudoObj, LPLINERANGE lplrSel); void PseudoObj_GetExtent(LPPSEUDOOBJ lpPseudoObj, LPSIZEL lpsizel); void PseudoObj_GetExtent(LPPSEUDOOBJ lpPseudoObj, LPSIZEL lpsizel); void PseudoObj_SendAdvise( LPPSEUDOOBJ lpPseudoObj, WORD wAdvise, LPMONIKER lpmkObj, DWORD dwAdvf ); LPMONIKER PseudoObj_GetFullMoniker(LPPSEUDOOBJ lpPseudoObj, LPMONIKER lpmkDoc); /* PseudoObj::IUnknown methods (functions) */ STDMETHODIMP PseudoObj_Unk_QueryInterface( LPUNKNOWN lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) PseudoObj_Unk_AddRef(LPUNKNOWN lpThis); STDMETHODIMP_(ULONG) PseudoObj_Unk_Release (LPUNKNOWN lpThis); /* PseudoObj::IOleObject methods (functions) */ STDMETHODIMP PseudoObj_OleObj_QueryInterface( LPOLEOBJECT lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) PseudoObj_OleObj_AddRef(LPOLEOBJECT lpThis); STDMETHODIMP_(ULONG) PseudoObj_OleObj_Release(LPOLEOBJECT lpThis); STDMETHODIMP PseudoObj_OleObj_SetClientSite( LPOLEOBJECT lpThis, LPOLECLIENTSITE lpClientSite ); STDMETHODIMP PseudoObj_OleObj_GetClientSite( LPOLEOBJECT lpThis, LPOLECLIENTSITE FAR* lplpClientSite ); STDMETHODIMP PseudoObj_OleObj_SetHostNames( LPOLEOBJECT lpThis, LPCOLESTR szContainerApp, LPCOLESTR szContainerObj ); STDMETHODIMP PseudoObj_OleObj_Close( LPOLEOBJECT lpThis, DWORD dwSaveOption ); STDMETHODIMP PseudoObj_OleObj_SetMoniker( LPOLEOBJECT lpThis, DWORD dwWhichMoniker, LPMONIKER lpmk ); STDMETHODIMP PseudoObj_OleObj_GetMoniker( LPOLEOBJECT lpThis, DWORD dwAssign, DWORD dwWhichMoniker, LPMONIKER FAR* lplpmk ); STDMETHODIMP PseudoObj_OleObj_InitFromData( LPOLEOBJECT lpThis, LPDATAOBJECT lpDataObject, BOOL fCreation, DWORD reserved ); STDMETHODIMP PseudoObj_OleObj_GetClipboardData( LPOLEOBJECT lpThis, DWORD reserved, LPDATAOBJECT FAR* lplpDataObject ); STDMETHODIMP PseudoObj_OleObj_DoVerb( LPOLEOBJECT lpThis, LONG lVerb, LPMSG lpmsg, LPOLECLIENTSITE lpActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect ); STDMETHODIMP PseudoObj_OleObj_EnumVerbs( LPOLEOBJECT lpThis, LPENUMOLEVERB FAR* lplpenumOleVerb ); STDMETHODIMP PseudoObj_OleObj_Update(LPOLEOBJECT lpThis); STDMETHODIMP PseudoObj_OleObj_IsUpToDate(LPOLEOBJECT lpThis); STDMETHODIMP PseudoObj_OleObj_GetUserClassID( LPOLEOBJECT lpThis, LPCLSID lpclsid ); STDMETHODIMP PseudoObj_OleObj_GetUserType( LPOLEOBJECT lpThis, DWORD dwFormOfType, LPOLESTR FAR* lpszUserType ); STDMETHODIMP PseudoObj_OleObj_SetExtent( LPOLEOBJECT lpThis, DWORD dwDrawAspect, LPSIZEL lplgrc ); STDMETHODIMP PseudoObj_OleObj_GetExtent( LPOLEOBJECT lpThis, DWORD dwDrawAspect, LPSIZEL lplgrc ); STDMETHODIMP PseudoObj_OleObj_Advise( LPOLEOBJECT lpThis, LPADVISESINK lpAdvSink, LPDWORD lpdwConnection ); STDMETHODIMP PseudoObj_OleObj_Unadvise(LPOLEOBJECT lpThis,DWORD dwConnection); STDMETHODIMP PseudoObj_OleObj_EnumAdvise( LPOLEOBJECT lpThis, LPENUMSTATDATA FAR* lplpenumAdvise ); STDMETHODIMP PseudoObj_OleObj_GetMiscStatus( LPOLEOBJECT lpThis, DWORD dwAspect, DWORD FAR* lpdwStatus ); STDMETHODIMP PseudoObj_OleObj_SetColorScheme( LPOLEOBJECT lpThis, LPLOGPALETTE lpLogpal ); STDMETHODIMP PseudoObj_OleObj_LockObject( LPOLEOBJECT lpThis, BOOL fLock ); /* PseudoObj::IDataObject methods (functions) */ STDMETHODIMP PseudoObj_DataObj_QueryInterface ( LPDATAOBJECT lpThis, REFIID riid, LPVOID FAR* lplpvObj ); STDMETHODIMP_(ULONG) PseudoObj_DataObj_AddRef(LPDATAOBJECT lpThis); STDMETHODIMP_(ULONG) PseudoObj_DataObj_Release (LPDATAOBJECT lpThis); STDMETHODIMP PseudoObj_DataObj_GetData ( LPDATAOBJECT lpThis, LPFORMATETC lpformatetc, LPSTGMEDIUM lpMedium ); STDMETHODIMP PseudoObj_DataObj_GetDataHere ( LPDATAOBJECT lpThis, LPFORMATETC lpformatetc, LPSTGMEDIUM lpMedium ); STDMETHODIMP PseudoObj_DataObj_QueryGetData ( LPDATAOBJECT lpThis, LPFORMATETC lpformatetc ); STDMETHODIMP PseudoObj_DataObj_GetCanonicalFormatEtc ( LPDATAOBJECT lpThis, LPFORMATETC lpformatetc, LPFORMATETC lpformatetcOut ); STDMETHODIMP PseudoObj_DataObj_SetData ( LPDATAOBJECT lpThis, LPFORMATETC lpformatetc, LPSTGMEDIUM lpmedium, BOOL fRelease ); STDMETHODIMP PseudoObj_DataObj_EnumFormatEtc( LPDATAOBJECT lpThis, DWORD dwDirection, LPENUMFORMATETC FAR* lplpenumFormatEtc ); STDMETHODIMP PseudoObj_DataObj_DAdvise( LPDATAOBJECT lpThis, FORMATETC FAR* lpFormatetc, DWORD advf, LPADVISESINK lpAdvSink, DWORD FAR* lpdwConnection ); STDMETHODIMP PseudoObj_DataObj_DUnadvise(LPDATAOBJECT lpThis, DWORD dwConnection); STDMETHODIMP PseudoObj_DataObj_EnumAdvise( LPDATAOBJECT lpThis, LPENUMSTATDATA FAR* lplpenumAdvise ); /************************************************************************* ** class SERVERNAMETABLE : OUTLINENAMETABLE ** SERVERNAMETABLE class is an extension to the OUTLINENAMETABLE ** base class that adds functionallity required to support linking ** to ranges (pseudo objects). The name table manages the table of ** named selections in the document. Each name table entry has a ** string as its key and a starting line index and an ending line ** index for the named range. The SERVERNAMETABLE entries, in ** addition, maintain a pointer to a PSEUDOOBJ pseudo object if one ** has been already allocated. There is always one instance of ** SERVERNAMETABLE for each SERVERDOC object created. ** The SERVERNAME class inherits all fields from the NAME class. ** This inheritance is achieved by including a member variable of ** type NAME as the first field in the SERVERNAME ** structure. Thus a pointer to an SERVERNAME object can be cast to be ** a pointer to a NAME object. *************************************************************************/ typedef struct tagSERVERNAMETABLE { OUTLINENAMETABLE m_NameTable; // we inherit from OUTLINENAMETABLE // ServerNameTable does NOT add any fields } SERVERNAMETABLE, FAR* LPSERVERNAMETABLE; /* ServerNameTable methods (functions) */ void ServerNameTable_EditLineUpdate( LPSERVERNAMETABLE lpServerNameTable, int nEditIndex ); void ServerNameTable_InformAllPseudoObjectsDocRenamed( LPSERVERNAMETABLE lpServerNameTable, LPMONIKER lpmkDoc ); void ServerNameTable_InformAllPseudoObjectsDocSaved( LPSERVERNAMETABLE lpServerNameTable, LPMONIKER lpmkDoc ); void ServerNameTable_SendPendingAdvises(LPSERVERNAMETABLE lpServerNameTable); LPPSEUDOOBJ ServerNameTable_GetPseudoObj( LPSERVERNAMETABLE lpServerNameTable, LPSTR lpszItem, LPSERVERDOC lpServerDoc ); void ServerNameTable_CloseAllPseudoObjs(LPSERVERNAMETABLE lpServerNameTable); #if defined( INPLACE_SVR) /* ServerDoc::IOleInPlaceObject methods (functions) */ STDMETHODIMP SvrDoc_IPObj_QueryInterface( LPOLEINPLACEOBJECT lpThis, REFIID riid, LPVOID FAR * lplpvObj ); STDMETHODIMP_(ULONG) SvrDoc_IPObj_AddRef(LPOLEINPLACEOBJECT lpThis); STDMETHODIMP_(ULONG) SvrDoc_IPObj_Release(LPOLEINPLACEOBJECT lpThis); STDMETHODIMP SvrDoc_IPObj_GetWindow( LPOLEINPLACEOBJECT lpThis, HWND FAR* lphwnd ); STDMETHODIMP SvrDoc_IPObj_ContextSensitiveHelp( LPOLEINPLACEOBJECT lpThis, BOOL fEnable ); STDMETHODIMP SvrDoc_IPObj_InPlaceDeactivate(LPOLEINPLACEOBJECT lpThis); STDMETHODIMP SvrDoc_IPObj_UIDeactivate(LPOLEINPLACEOBJECT lpThis); STDMETHODIMP SvrDoc_IPObj_SetObjectRects( LPOLEINPLACEOBJECT lpThis, LPCRECT lprcPosRect, LPCRECT lprcClipRect ); STDMETHODIMP SvrDoc_IPObj_ReactivateAndUndo(LPOLEINPLACEOBJECT lpThis); /* ServerDoc::IOleInPlaceActiveObject methods (functions) */ STDMETHODIMP SvrDoc_IPActiveObj_QueryInterface( LPOLEINPLACEACTIVEOBJECT lpThis, REFIID riidReq, LPVOID FAR * lplpUnk ); STDMETHODIMP_(ULONG) SvrDoc_IPActiveObj_AddRef( LPOLEINPLACEACTIVEOBJECT lpThis ); STDMETHODIMP_(ULONG) SvrDoc_IPActiveObj_Release( LPOLEINPLACEACTIVEOBJECT lpThis ); STDMETHODIMP SvrDoc_IPActiveObj_GetWindow( LPOLEINPLACEACTIVEOBJECT lpThis, HWND FAR* lphwnd ); STDMETHODIMP SvrDoc_IPActiveObj_ContextSensitiveHelp( LPOLEINPLACEACTIVEOBJECT lpThis, BOOL fEnable ); STDMETHODIMP SvrDoc_IPActiveObj_TranslateAccelerator( LPOLEINPLACEACTIVEOBJECT lpThis, LPMSG lpmsg ); STDMETHODIMP SvrDoc_IPActiveObj_OnFrameWindowActivate( LPOLEINPLACEACTIVEOBJECT lpThis, BOOL fActivate ); STDMETHODIMP SvrDoc_IPActiveObj_OnDocWindowActivate( LPOLEINPLACEACTIVEOBJECT lpThis, BOOL fActivate ); STDMETHODIMP SvrDoc_IPActiveObj_ResizeBorder( LPOLEINPLACEACTIVEOBJECT lpThis, LPCRECT lprectBorder, LPOLEINPLACEUIWINDOW lpIPUiWnd, BOOL fFrameWindow ); STDMETHODIMP SvrDoc_IPActiveObj_EnableModeless( LPOLEINPLACEACTIVEOBJECT lpThis, BOOL fEnable ); #endif // INPLACE_SVR #endif // _SVROUTL_H_