889 lines
31 KiB
C
889 lines
31 KiB
C
/*************************************************************************
|
|
**
|
|
** 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_
|