/*************************************************************************
**
** 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_