|
|
1.1 ! root 1: /************************************************************************* ! 2: ** ! 3: ** OLE 2.0 Server Sample Code ! 4: ** ! 5: ** svroutl.h ! 6: ** ! 7: ** This file contains file contains data structure defintions, ! 8: ** function prototypes, constants, etc. used by the OLE 2.0 server ! 9: ** app version of the Outline series of sample applications: ! 10: ** Outline -- base version of the app (without OLE functionality) ! 11: ** SvrOutl -- OLE 2.0 Server sample app ! 12: ** CntrOutl -- OLE 2.0 Containter sample app ! 13: ** ! 14: ** (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved ! 15: ** ! 16: *************************************************************************/ ! 17: ! 18: #if !defined( _SVROUTL_H_ ) ! 19: #define _SVROUTL_H_ ! 20: ! 21: #ifndef RC_INVOKED ! 22: #pragma message ("INCLUDING SVROUTL.H from " __FILE__) ! 23: #endif /* RC_INVOKED */ ! 24: ! 25: #include "oleoutl.h" ! 26: ! 27: /* Defines */ ! 28: ! 29: // Enable SVROUTL and ISVROTL to emulate each other (TreatAs aka. ActivateAs) ! 30: #define SVR_TREATAS 1 ! 31: ! 32: // Enable SVROUTL and ISVROTL to convert each other (TreatAs aka. ActivateAs) ! 33: #define SVR_CONVERTTO 1 ! 34: ! 35: // Enable ISVROTL to operate as in inside-out style in-place object ! 36: #define SVR_INSIDEOUT 1 ! 37: ! 38: /* Default name used for container of the embedded object. used if ! 39: ** container forgets to call IOleObject::SetHostNames ! 40: */ ! 41: // REVIEW: should load from string resource ! 42: #define DEFCONTAINERNAME "Unknown Document" ! 43: ! 44: /* Default prefix for auto-generated range names. This is used with ! 45: ** links to unnamed ranges (pseudo objects). ! 46: */ ! 47: // REVIEW: should load from string resource ! 48: #define DEFRANGENAMEPREFIX "Range" ! 49: ! 50: // Maximum length of strings passed through IOleObject::SetHostNames ! 51: #define MAXAPPNAME 32 ! 52: #define MAXCONTAINERNAME 32 ! 53: ! 54: // Menu option in embedding mode ! 55: #define IDM_F_UPDATE 1151 ! 56: ! 57: /* Types */ ! 58: ! 59: /* Codes for CallBack events */ ! 60: typedef enum tagOLE_NOTIFICATION { ! 61: OLE_ONDATACHANGE, // 0 ! 62: OLE_ONSAVE, // 1 ! 63: OLE_ONRENAME, // 2 ! 64: OLE_ONCLOSE // 3 ! 65: } OLE_NOTIFICATION; ! 66: ! 67: /* Codes to indicate mode of storage for an object. ! 68: ** Mode of the storage is modified by the IPersistStorage methods: ! 69: ** Save, HandsOffStorage, and SaveCompleted. ! 70: */ ! 71: typedef enum tagSTGMODE { ! 72: STGMODE_NORMAL = 0, ! 73: STGMODE_NOSCRIBBLE = 1, ! 74: STGMODE_HANDSOFF = 2 ! 75: } STGMODE; ! 76: ! 77: ! 78: /* Forward type definitions */ ! 79: typedef struct tagSERVERAPP FAR* LPSERVERAPP; ! 80: typedef struct tagSERVERDOC FAR* LPSERVERDOC; ! 81: typedef struct tagPSEUDOOBJ FAR* LPPSEUDOOBJ; ! 82: ! 83: typedef struct tagINPLACEDATA { ! 84: OLEMENUGROUPWIDTHS menuGroupWidths; ! 85: HOLEMENU hOlemenu; ! 86: HMENU hMenuShared; ! 87: LPOLEINPLACESITE lpSite; ! 88: LPOLEINPLACEUIWINDOW lpDoc; ! 89: LPOLEINPLACEFRAME lpFrame; ! 90: OLEINPLACEFRAMEINFO frameInfo; ! 91: HWND hWndFrame; ! 92: BOOL fInCSHelpMode; ! 93: BOOL fBorderOn; ! 94: RECT rcPosRect; ! 95: RECT rcClipRect; ! 96: } INPLACEDATA, FAR* LPINPLACEDATA; ! 97: ! 98: ! 99: /************************************************************************* ! 100: ** class SERVERDOC : OLEDOC ! 101: ** SERVERDOC is an extention to the abstract base OLEDOC class. ! 102: ** The OLEDOC class defines the fields, methods and interfaces that ! 103: ** are common to both server and client implementations. The ! 104: ** SERVERDOC class adds the fields, methods and interfaces that are ! 105: ** specific to OLE 2.0 Server functionality. There is one instance ! 106: ** of SERVERDOC object created per document open in the app. The SDI ! 107: ** version of the app supports one SERVERDOC at a time. The MDI ! 108: ** version of the app can manage multiple documents at one time. ! 109: ** The SERVERDOC class inherits all fields from the OLEDOC class. ! 110: ** This inheritance is achieved by including a member variable of ! 111: ** type OLEDOC as the first field in the SERVERDOC structure. Thus a ! 112: ** pointer to a SERVERDOC object can be cast to be a pointer to a ! 113: ** OLEDOC object or an OUTLINEDOC object ! 114: *************************************************************************/ ! 115: ! 116: typedef struct tagSERVERDOC { ! 117: OLEDOC m_OleDoc; // ServerDoc inherits from OleDoc ! 118: ULONG m_cPseudoObj; // total count of pseudo obj's ! 119: LPOLECLIENTSITE m_lpOleClientSite; // Client associated with the obj ! 120: LPOLEADVISEHOLDER m_lpOleAdviseHldr; // helper obj to hold ole advises ! 121: LPDATAADVISEHOLDER m_lpDataAdviseHldr; // helper obj to hold data advises ! 122: DWORD m_dwStorageMode; // indicates state during save ! 123: BOOL m_fSaveWithSameAsLoad; // was IPS::Save called with ! 124: // fSameAsLoad==TRUE. ! 125: char m_szContainerApp[MAXAPPNAME]; ! 126: char m_szContainerObj[MAXCONTAINERNAME]; ! 127: ULONG m_nNextRangeNo; // next no. for unnamed range ! 128: LINERANGE m_lrSrcSelOfCopy; // src sel if doc created for copy ! 129: BOOL m_fDataChanged; // data changed when draw disabled ! 130: BOOL m_fSizeChanged; // size changed when draw disabled ! 131: BOOL m_fSendDataOnStop; // did data ever change? ! 132: #if defined( SVR_TREATAS ) ! 133: CLSID m_clsidTreatAs; // clsid to pretend to be ! 134: LPSTR m_lpszTreatAsType; // user type name to pretend to be ! 135: #endif // SVR_TREATAS ! 136: ! 137: #if defined( LATER ) ! 138: // REVIEW: is it necessary to register a WildCard Moniker ! 139: DWORD m_dwWildCardRegROT; // key if wildcard reg'ed in ROT ! 140: #endif ! 141: ! 142: #if defined( INPLACE_SVR ) ! 143: BOOL m_fInPlaceActive; ! 144: BOOL m_fInPlaceVisible; ! 145: BOOL m_fUIActive; ! 146: HWND m_hWndParent; ! 147: HWND m_hWndHatch; ! 148: LPINPLACEDATA m_lpIPData; ! 149: ! 150: struct CDocOleInPlaceObjectImpl { ! 151: IOleInPlaceObjectVtbl FAR* lpVtbl; ! 152: LPSERVERDOC lpServerDoc; ! 153: int cRef; // interface specific ref count. ! 154: } m_OleInPlaceObject; ! 155: ! 156: struct CDocOleInPlaceActiveObjectImpl { ! 157: IOleInPlaceActiveObjectVtbl FAR* lpVtbl; ! 158: LPSERVERDOC lpServerDoc; ! 159: int cRef;// interface specific ref count. ! 160: } m_OleInPlaceActiveObject; ! 161: #endif // INPLACE_SVR ! 162: ! 163: struct CDocOleObjectImpl { ! 164: IOleObjectVtbl FAR* lpVtbl; ! 165: LPSERVERDOC lpServerDoc; ! 166: int cRef; // interface specific ref count. ! 167: } m_OleObject; ! 168: ! 169: struct CDocPersistStorageImpl { ! 170: IPersistStorageVtbl FAR* lpVtbl; ! 171: LPSERVERDOC lpServerDoc; ! 172: int cRef; // interface specific ref count. ! 173: } m_PersistStorage; ! 174: ! 175: #if defined( SVR_TREATAS ) ! 176: struct CDocStdMarshalInfoImpl { ! 177: IStdMarshalInfoVtbl FAR* lpVtbl; ! 178: LPSERVERDOC lpServerDoc; ! 179: int cRef; // interface specific ref count. ! 180: } m_StdMarshalInfo; ! 181: #endif // SVR_TREATAS ! 182: ! 183: } SERVERDOC; ! 184: ! 185: /* ServerDoc methods (functions) */ ! 186: BOOL ServerDoc_Init(LPSERVERDOC lpServerDoc, BOOL fDataTransferDoc); ! 187: BOOL ServerDoc_InitNewEmbed(LPSERVERDOC lpServerDoc); ! 188: void ServerDoc_PseudoObjUnlockDoc( ! 189: LPSERVERDOC lpServerDoc, ! 190: LPPSEUDOOBJ lpPseudoObj ! 191: ); ! 192: void ServerDoc_PseudoObjLockDoc(LPSERVERDOC lpServerDoc); ! 193: BOOL ServerDoc_PasteFormatFromData( ! 194: LPSERVERDOC lpServerDoc, ! 195: CLIPFORMAT cfFormat, ! 196: LPDATAOBJECT lpSrcDataObj, ! 197: BOOL fLocalDataObj, ! 198: BOOL fLink ! 199: ); ! 200: BOOL ServerDoc_QueryPasteFromData( ! 201: LPSERVERDOC lpServerDoc, ! 202: LPDATAOBJECT lpSrcDataObj, ! 203: BOOL fLink ! 204: ); ! 205: HRESULT ServerDoc_GetClassID(LPSERVERDOC lpServerDoc, LPCLSID lpclsid); ! 206: void ServerDoc_UpdateMenu(LPSERVERDOC lpServerDoc); ! 207: void ServerDoc_RestoreMenu(LPSERVERDOC lpServerDoc); ! 208: HRESULT ServerDoc_GetData ( ! 209: LPSERVERDOC lpServerDoc, ! 210: LPFORMATETC lpformatetc, ! 211: LPSTGMEDIUM lpMedium ! 212: ); ! 213: HRESULT ServerDoc_GetDataHere ( ! 214: LPSERVERDOC lpServerDoc, ! 215: LPFORMATETC lpformatetc, ! 216: LPSTGMEDIUM lpMedium ! 217: ); ! 218: HRESULT ServerDoc_QueryGetData(LPSERVERDOC lpServerDoc,LPFORMATETC lpformatetc); ! 219: HRESULT ServerDoc_EnumFormatEtc( ! 220: LPSERVERDOC lpServerDoc, ! 221: DWORD dwDirection, ! 222: LPENUMFORMATETC FAR* lplpenumFormatEtc ! 223: ); ! 224: HANDLE ServerDoc_GetMetafilePictData( ! 225: LPSERVERDOC lpServerDoc, ! 226: LPLINERANGE lplrSel ! 227: ); ! 228: void ServerDoc_SendAdvise( ! 229: LPSERVERDOC lpServerDoc, ! 230: WORD wAdvise, ! 231: LPMONIKER lpmkDoc, ! 232: DWORD dwAdvf ! 233: ); ! 234: HRESULT ServerDoc_GetObject( ! 235: LPSERVERDOC lpServerDoc, ! 236: LPSTR lpszItem, ! 237: REFIID riid, ! 238: LPVOID FAR* lplpvObject ! 239: ); ! 240: HRESULT ServerDoc_IsRunning(LPSERVERDOC lpServerDoc, LPSTR lpszItem); ! 241: LPMONIKER ServerDoc_GetSelRelMoniker( ! 242: LPSERVERDOC lpServerDoc, ! 243: LPLINERANGE lplrSel, ! 244: DWORD dwAssign ! 245: ); ! 246: LPMONIKER ServerDoc_GetSelFullMoniker( ! 247: LPSERVERDOC lpServerDoc, ! 248: LPLINERANGE lplrSel, ! 249: DWORD dwAssign ! 250: ); ! 251: ! 252: ! 253: #if defined( INPLACE_SVR ) ! 254: HRESULT ServerDoc_DoInPlaceActivate( ! 255: LPSERVERDOC lpServerDoc, ! 256: LONG lVerb, ! 257: LPMSG lpmsg, ! 258: LPOLECLIENTSITE lpActiveSite ! 259: ); ! 260: HRESULT ServerDoc_DoInPlaceDeactivate(LPSERVERDOC lpServerDoc); ! 261: HRESULT ServerDoc_DoInPlaceHide(LPSERVERDOC lpServerDoc); ! 262: BOOL ServerDoc_AllocInPlaceData(LPSERVERDOC lpServerDoc); ! 263: void ServerDoc_FreeInPlaceData(LPSERVERDOC lpServerDoc); ! 264: ! 265: HRESULT ServerDoc_AssembleMenus(LPSERVERDOC lpServerDoc); ! 266: void ServerDoc_DisassembleMenus(LPSERVERDOC lpServerDoc); ! 267: void ServerDoc_CalcInPlaceWindowPos( ! 268: LPSERVERDOC lpServerDoc, ! 269: LPRECT lprcListBox, ! 270: LPRECT lprcDoc, ! 271: LPSCALEFACTOR lpscale ! 272: ); ! 273: void ServerDoc_UpdateInPlaceWindowOnExtentChange(LPSERVERDOC lpServerDoc); ! 274: void ServerDoc_ResizeInPlaceWindow( ! 275: LPSERVERDOC lpServerDoc, ! 276: LPCRECT lprcPosRect, ! 277: LPCRECT lprcClipRect ! 278: ); ! 279: void ServerDoc_ShadeInPlaceBorder(LPSERVERDOC lpServerDoc, BOOL fShadeOn); ! 280: LPOLEINPLACEFRAME ServerDoc_GetTopInPlaceFrame(LPSERVERDOC lpServerDoc); ! 281: void ServerDoc_GetSharedMenuHandles( ! 282: LPSERVERDOC lpServerDoc, ! 283: HMENU FAR* lphSharedMenu, ! 284: HOLEMENU FAR* lphOleMenu ! 285: ); ! 286: void ServerDoc_AddFrameLevelUI(LPSERVERDOC lpServerDoc); ! 287: void ServerDoc_AddFrameLevelTools(LPSERVERDOC lpServerDoc); ! 288: void ServerDoc_UIActivate (LPSERVERDOC lpServerDoc); ! 289: ! 290: #if defined( USE_FRAMETOOLS ) ! 291: void ServerDoc_RemoveFrameLevelTools(LPSERVERDOC lpServerDoc); ! 292: #endif // USE_FRAMETOOLS ! 293: ! 294: #endif // INPLACE_SVR ! 295: ! 296: ! 297: /* ServerDoc::IOleObject methods (functions) */ ! 298: STDMETHODIMP SvrDoc_OleObj_QueryInterface( ! 299: LPOLEOBJECT lpThis, ! 300: REFIID riid, ! 301: LPVOID FAR* lplpvObj ! 302: ); ! 303: STDMETHODIMP_(ULONG) SvrDoc_OleObj_AddRef(LPOLEOBJECT lpThis); ! 304: STDMETHODIMP_(ULONG) SvrDoc_OleObj_Release(LPOLEOBJECT lpThis); ! 305: STDMETHODIMP SvrDoc_OleObj_SetClientSite( ! 306: LPOLEOBJECT lpThis, ! 307: LPOLECLIENTSITE lpclientSite ! 308: ); ! 309: STDMETHODIMP SvrDoc_OleObj_GetClientSite( ! 310: LPOLEOBJECT lpThis, ! 311: LPOLECLIENTSITE FAR* lplpClientSite ! 312: ); ! 313: STDMETHODIMP SvrDoc_OleObj_SetHostNames( ! 314: LPOLEOBJECT lpThis, ! 315: LPCSTR szContainerApp, ! 316: LPCSTR szContainerObj ! 317: ); ! 318: STDMETHODIMP SvrDoc_OleObj_Close( ! 319: LPOLEOBJECT lpThis, ! 320: DWORD dwSaveOption ! 321: ); ! 322: STDMETHODIMP SvrDoc_OleObj_SetMoniker( ! 323: LPOLEOBJECT lpThis, ! 324: DWORD dwWhichMoniker, ! 325: LPMONIKER lpmk ! 326: ); ! 327: STDMETHODIMP SvrDoc_OleObj_GetMoniker( ! 328: LPOLEOBJECT lpThis, ! 329: DWORD dwAssign, ! 330: DWORD dwWhichMoniker, ! 331: LPMONIKER FAR* lplpmk ! 332: ); ! 333: STDMETHODIMP SvrDoc_OleObj_InitFromData( ! 334: LPOLEOBJECT lpThis, ! 335: LPDATAOBJECT lpDataObject, ! 336: BOOL fCreation, ! 337: DWORD reserved ! 338: ); ! 339: STDMETHODIMP SvrDoc_OleObj_GetClipboardData( ! 340: LPOLEOBJECT lpThis, ! 341: DWORD reserved, ! 342: LPDATAOBJECT FAR* lplpDataObject ! 343: ); ! 344: STDMETHODIMP SvrDoc_OleObj_DoVerb( ! 345: LPOLEOBJECT lpThis, ! 346: LONG lVerb, ! 347: LPMSG lpmsg, ! 348: LPOLECLIENTSITE lpActiveSite, ! 349: LONG lindex, ! 350: HWND hwndParent, ! 351: LPCRECT lprcPosRect ! 352: ); ! 353: STDMETHODIMP SvrDoc_OleObj_EnumVerbs( ! 354: LPOLEOBJECT lpThis, ! 355: LPENUMOLEVERB FAR* lplpenumOleVerb ! 356: ); ! 357: STDMETHODIMP SvrDoc_OleObj_Update(LPOLEOBJECT lpThis); ! 358: STDMETHODIMP SvrDoc_OleObj_IsUpToDate(LPOLEOBJECT lpThis); ! 359: STDMETHODIMP SvrDoc_OleObj_GetUserClassID( ! 360: LPOLEOBJECT lpThis, ! 361: LPCLSID lpclsid ! 362: ); ! 363: STDMETHODIMP SvrDoc_OleObj_GetUserType( ! 364: LPOLEOBJECT lpThis, ! 365: DWORD dwFormOfType, ! 366: LPSTR FAR* lpszUserType ! 367: ); ! 368: STDMETHODIMP SvrDoc_OleObj_SetExtent( ! 369: LPOLEOBJECT lpThis, ! 370: DWORD dwDrawAspect, ! 371: LPSIZEL lplgrc ! 372: ); ! 373: STDMETHODIMP SvrDoc_OleObj_GetExtent( ! 374: LPOLEOBJECT lpThis, ! 375: DWORD dwDrawAspect, ! 376: LPSIZEL lplgrc ! 377: ); ! 378: STDMETHODIMP SvrDoc_OleObj_Advise( ! 379: LPOLEOBJECT lpThis, ! 380: LPADVISESINK lpAdvSink, ! 381: LPDWORD lpdwConnection ! 382: ); ! 383: STDMETHODIMP SvrDoc_OleObj_Unadvise(LPOLEOBJECT lpThis, DWORD dwConnection); ! 384: STDMETHODIMP SvrDoc_OleObj_EnumAdvise( ! 385: LPOLEOBJECT lpThis, ! 386: LPENUMSTATDATA FAR* lplpenumAdvise ! 387: ); ! 388: STDMETHODIMP SvrDoc_OleObj_GetMiscStatus( ! 389: LPOLEOBJECT lpThis, ! 390: DWORD dwAspect, ! 391: DWORD FAR* lpdwStatus ! 392: ); ! 393: STDMETHODIMP SvrDoc_OleObj_SetColorScheme( ! 394: LPOLEOBJECT lpThis, ! 395: LPLOGPALETTE lpLogpal ! 396: ); ! 397: STDMETHODIMP SvrDoc_OleObj_LockObject( ! 398: LPOLEOBJECT lpThis, ! 399: BOOL fLock ! 400: ); ! 401: ! 402: /* ServerDoc::IPersistStorage methods (functions) */ ! 403: STDMETHODIMP SvrDoc_PStg_QueryInterface( ! 404: LPPERSISTSTORAGE lpThis, ! 405: REFIID riid, ! 406: LPVOID FAR* lplpvObj ! 407: ); ! 408: STDMETHODIMP_(ULONG) SvrDoc_PStg_AddRef(LPPERSISTSTORAGE lpThis); ! 409: STDMETHODIMP_(ULONG) SvrDoc_PStg_Release(LPPERSISTSTORAGE lpThis); ! 410: STDMETHODIMP SvrDoc_PStg_GetClassID( ! 411: LPPERSISTSTORAGE lpThis, ! 412: LPCLSID lpClassID ! 413: ); ! 414: STDMETHODIMP SvrDoc_PStg_IsDirty(LPPERSISTSTORAGE lpThis); ! 415: STDMETHODIMP SvrDoc_PStg_InitNew( ! 416: LPPERSISTSTORAGE lpThis, ! 417: LPSTORAGE lpStg ! 418: ); ! 419: STDMETHODIMP SvrDoc_PStg_Load( ! 420: LPPERSISTSTORAGE lpThis, ! 421: LPSTORAGE lpStg ! 422: ); ! 423: STDMETHODIMP SvrDoc_PStg_Save( ! 424: LPPERSISTSTORAGE lpThis, ! 425: LPSTORAGE lpStg, ! 426: BOOL fSameAsLoad ! 427: ); ! 428: STDMETHODIMP SvrDoc_PStg_SaveCompleted( ! 429: LPPERSISTSTORAGE lpThis, ! 430: LPSTORAGE lpStgNew ! 431: ); ! 432: STDMETHODIMP SvrDoc_PStg_HandsOffStorage(LPPERSISTSTORAGE lpThis); ! 433: ! 434: ! 435: #if defined( SVR_TREATAS ) ! 436: ! 437: /* ServerDoc::IStdMarshalInfo methods (functions) */ ! 438: STDMETHODIMP SvrDoc_StdMshl_QueryInterface( ! 439: LPSTDMARSHALINFO lpThis, ! 440: REFIID riid, ! 441: LPVOID FAR* lplpvObj ! 442: ); ! 443: STDMETHODIMP_(ULONG) SvrDoc_StdMshl_AddRef(LPSTDMARSHALINFO lpThis); ! 444: STDMETHODIMP_(ULONG) SvrDoc_StdMshl_Release(LPSTDMARSHALINFO lpThis); ! 445: STDMETHODIMP SvrDoc_StdMshl_GetClassForHandler( ! 446: LPSTDMARSHALINFO lpThis, ! 447: DWORD dwDestContext, ! 448: LPVOID pvDestContext, ! 449: LPCLSID lpClassID ! 450: ); ! 451: #endif // SVR_TREATAS ! 452: ! 453: /************************************************************************* ! 454: ** class SERVERAPP : OLEAPP ! 455: ** SERVERAPP is an extention to the abstract base OLEAPP class. ! 456: ** The OLEAPP class defines the fields, methods and interfaces that ! 457: ** are common to both server and client implementations. The ! 458: ** SERVERAPP class adds the fields and methods that are specific to ! 459: ** OLE 2.0 Server functionality. There is one instance of ! 460: ** SERVERAPP object created per running application instance. This ! 461: ** object holds many fields that could otherwise be organized as ! 462: ** global variables. The SERVERAPP class inherits all fields ! 463: ** from the OLEAPP class. This inheritance is achieved by including a ! 464: ** member variable of type OLEAPP as the first field in the SERVERAPP ! 465: ** structure. OLEAPP inherits from OLEAPP. This inheritance is ! 466: ** achieved in the same manner. Thus a pointer to a SERVERAPP object ! 467: ** can be cast to be a pointer to an OLEAPP or an OUTLINEAPP object ! 468: *************************************************************************/ ! 469: ! 470: typedef struct tagSERVERAPP { ! 471: OLEAPP m_OleApp; // ServerApp inherits all fields of OleApp ! 472: ! 473: #if defined( INPLACE_SVR ) ! 474: HACCEL m_hAccelIPSvr; // accelerators for server's active object commands ! 475: HMENU m_hMenuEdit; // handle to Edit menu of the server app ! 476: HMENU m_hMenuLine; // handle to Line menu of the server app ! 477: HMENU m_hMenuName; // handle to Name menu of the server app ! 478: HMENU m_hMenuOptions; // handle to Options menu of the server app ! 479: HMENU m_hMenuDebug; // handle to Debug menu of the server app ! 480: HMENU m_hMenuHelp; // handle to Help menu of the server app ! 481: LPINPLACEDATA m_lpIPData; ! 482: #endif ! 483: ! 484: } SERVERAPP; ! 485: ! 486: /* ServerApp methods (functions) */ ! 487: BOOL ServerApp_InitInstance( ! 488: LPSERVERAPP lpServerApp, ! 489: HINSTANCE hInst, ! 490: int nCmdShow ! 491: ); ! 492: BOOL ServerApp_InitVtbls (LPSERVERAPP lpServerApp); ! 493: ! 494: ! 495: ! 496: /************************************************************************* ! 497: ** class SERVERNAME : OUTLINENAME ! 498: ** SERVERNAME class is an extension to the OUTLINENAME base class that ! 499: ** adds functionallity required to support linking to ranges (pseudo ! 500: ** objects). Pseudo objects are used to allow linking to a range ! 501: ** (sub-selection) of a SERVERDOC document. The base class OUTLINENAME ! 502: ** stores a particular named selection in the document. The ! 503: ** NAMETABLE class holds all of the names defined in a particular ! 504: ** document. Each OUTLINENAME object has a string as its key and a ! 505: ** starting line index and an ending line index for the named range. ! 506: ** The SERVERNAME class, also, stores a pointer to a PSEUDOOBJ if one ! 507: ** has been allocated that corresponds to the named selection. ! 508: ** The SERVERNAME class inherits all fields from the OUTLINENAME class. ! 509: ** This inheritance is achieved by including a member variable of ! 510: ** type OUTLINENAME as the first field in the SERVERNAME ! 511: ** structure. Thus a pointer to an SERVERNAME object can be cast to be ! 512: ** a pointer to a OUTLINENAME object. ! 513: *************************************************************************/ ! 514: ! 515: typedef struct tagSERVERNAME { ! 516: OUTLINENAME m_Name; // ServerName inherits all fields of Name ! 517: LPPSEUDOOBJ m_lpPseudoObj; // ptr to pseudo object if allocated ! 518: } SERVERNAME, FAR* LPSERVERNAME; ! 519: ! 520: /* ServerName methods (functions) */ ! 521: void ServerName_SetSel( ! 522: LPSERVERNAME lpServerName, ! 523: LPLINERANGE lplrSel, ! 524: BOOL fRangeModified ! 525: ); ! 526: void ServerName_SendPendingAdvises(LPSERVERNAME lpServerName); ! 527: LPPSEUDOOBJ ServerName_GetPseudoObj( ! 528: LPSERVERNAME lpServerName, ! 529: LPSERVERDOC lpServerDoc ! 530: ); ! 531: void ServerName_ClosePseudoObj(LPSERVERNAME lpServerName); ! 532: ! 533: ! 534: /************************************************************************* ! 535: ** class PSEUDOOBJ ! 536: ** The PSEUDOOBJ (pseudo object) is a concrete class. A pseudo object ! 537: ** is created when a link is made to a range of lines within an ! 538: ** SERVERDOC document. A pseudo object is dependent on the existance ! 539: ** of the SERVERDOC which represents the whole document. ! 540: *************************************************************************/ ! 541: ! 542: typedef struct tagPSEUDOOBJ { ! 543: ULONG m_cRef; // total ref count for obj ! 544: BOOL m_fObjIsClosing; // flag to guard recursive close ! 545: LPSERVERNAME m_lpName; // named range for this pseudo obj ! 546: LPSERVERDOC m_lpDoc; // ptr to whole document ! 547: LPOLEADVISEHOLDER m_lpOleAdviseHldr; // helper obj to hold ole advises ! 548: LPDATAADVISEHOLDER m_lpDataAdviseHldr; // helper obj to hold data advises ! 549: BOOL m_fDataChanged; // data changed when draw disabled ! 550: ! 551: struct CPseudoObjUnknownImpl { ! 552: IUnknownVtbl FAR* lpVtbl; ! 553: LPPSEUDOOBJ lpPseudoObj; ! 554: int cRef; // interface specific ref count. ! 555: } m_Unknown; ! 556: ! 557: struct CPseudoObjOleObjectImpl { ! 558: IOleObjectVtbl FAR* lpVtbl; ! 559: LPPSEUDOOBJ lpPseudoObj; ! 560: int cRef; // interface specific ref count. ! 561: } m_OleObject; ! 562: ! 563: struct CPseudoObjDataObjectImpl { ! 564: IDataObjectVtbl FAR* lpVtbl; ! 565: LPPSEUDOOBJ lpPseudoObj; ! 566: int cRef; // interface specific ref count. ! 567: } m_DataObject; ! 568: ! 569: } PSEUDOOBJ; ! 570: ! 571: /* PseudoObj methods (functions) */ ! 572: void PseudoObj_Init( ! 573: LPPSEUDOOBJ lpPseudoObj, ! 574: LPSERVERNAME lpServerName, ! 575: LPSERVERDOC lpServerDoc ! 576: ); ! 577: ULONG PseudoObj_AddRef(LPPSEUDOOBJ lpPseudoObj); ! 578: ULONG PseudoObj_Release(LPPSEUDOOBJ lpPseudoObj); ! 579: HRESULT PseudoObj_QueryInterface( ! 580: LPPSEUDOOBJ lpPseudoObj, ! 581: REFIID riid, ! 582: LPVOID FAR* lplpUnk ! 583: ); ! 584: BOOL PseudoObj_Close(LPPSEUDOOBJ lpPseudoObj); ! 585: void PseudoObj_Destroy(LPPSEUDOOBJ lpPseudoObj); ! 586: void PseudoObj_GetSel(LPPSEUDOOBJ lpPseudoObj, LPLINERANGE lplrSel); ! 587: void PseudoObj_GetExtent(LPPSEUDOOBJ lpPseudoObj, LPSIZEL lpsizel); ! 588: void PseudoObj_GetExtent(LPPSEUDOOBJ lpPseudoObj, LPSIZEL lpsizel); ! 589: void PseudoObj_SendAdvise( ! 590: LPPSEUDOOBJ lpPseudoObj, ! 591: WORD wAdvise, ! 592: LPMONIKER lpmkObj, ! 593: DWORD dwAdvf ! 594: ); ! 595: LPMONIKER PseudoObj_GetFullMoniker(LPPSEUDOOBJ lpPseudoObj, LPMONIKER lpmkDoc); ! 596: ! 597: /* PseudoObj::IUnknown methods (functions) */ ! 598: STDMETHODIMP PseudoObj_Unk_QueryInterface( ! 599: LPUNKNOWN lpThis, ! 600: REFIID riid, ! 601: LPVOID FAR* lplpvObj ! 602: ); ! 603: STDMETHODIMP_(ULONG) PseudoObj_Unk_AddRef(LPUNKNOWN lpThis); ! 604: STDMETHODIMP_(ULONG) PseudoObj_Unk_Release (LPUNKNOWN lpThis); ! 605: ! 606: /* PseudoObj::IOleObject methods (functions) */ ! 607: STDMETHODIMP PseudoObj_OleObj_QueryInterface( ! 608: LPOLEOBJECT lpThis, ! 609: REFIID riid, ! 610: LPVOID FAR* lplpvObj ! 611: ); ! 612: STDMETHODIMP_(ULONG) PseudoObj_OleObj_AddRef(LPOLEOBJECT lpThis); ! 613: STDMETHODIMP_(ULONG) PseudoObj_OleObj_Release(LPOLEOBJECT lpThis); ! 614: STDMETHODIMP PseudoObj_OleObj_SetClientSite( ! 615: LPOLEOBJECT lpThis, ! 616: LPOLECLIENTSITE lpClientSite ! 617: ); ! 618: STDMETHODIMP PseudoObj_OleObj_GetClientSite( ! 619: LPOLEOBJECT lpThis, ! 620: LPOLECLIENTSITE FAR* lplpClientSite ! 621: ); ! 622: STDMETHODIMP PseudoObj_OleObj_SetHostNames( ! 623: LPOLEOBJECT lpThis, ! 624: LPCSTR szContainerApp, ! 625: LPCSTR szContainerObj ! 626: ); ! 627: STDMETHODIMP PseudoObj_OleObj_Close( ! 628: LPOLEOBJECT lpThis, ! 629: DWORD dwSaveOption ! 630: ); ! 631: STDMETHODIMP PseudoObj_OleObj_SetMoniker( ! 632: LPOLEOBJECT lpThis, ! 633: DWORD dwWhichMoniker, ! 634: LPMONIKER lpmk ! 635: ); ! 636: STDMETHODIMP PseudoObj_OleObj_GetMoniker( ! 637: LPOLEOBJECT lpThis, ! 638: DWORD dwAssign, ! 639: DWORD dwWhichMoniker, ! 640: LPMONIKER FAR* lplpmk ! 641: ); ! 642: STDMETHODIMP PseudoObj_OleObj_InitFromData( ! 643: LPOLEOBJECT lpThis, ! 644: LPDATAOBJECT lpDataObject, ! 645: BOOL fCreation, ! 646: DWORD reserved ! 647: ); ! 648: STDMETHODIMP PseudoObj_OleObj_GetClipboardData( ! 649: LPOLEOBJECT lpThis, ! 650: DWORD reserved, ! 651: LPDATAOBJECT FAR* lplpDataObject ! 652: ); ! 653: STDMETHODIMP PseudoObj_OleObj_DoVerb( ! 654: LPOLEOBJECT lpThis, ! 655: LONG lVerb, ! 656: LPMSG lpmsg, ! 657: LPOLECLIENTSITE lpActiveSite, ! 658: LONG lindex, ! 659: HWND hwndParent, ! 660: LPCRECT lprcPosRect ! 661: ); ! 662: STDMETHODIMP PseudoObj_OleObj_EnumVerbs( ! 663: LPOLEOBJECT lpThis, ! 664: LPENUMOLEVERB FAR* lplpenumOleVerb ! 665: ); ! 666: STDMETHODIMP PseudoObj_OleObj_Update(LPOLEOBJECT lpThis); ! 667: STDMETHODIMP PseudoObj_OleObj_IsUpToDate(LPOLEOBJECT lpThis); ! 668: STDMETHODIMP PseudoObj_OleObj_GetUserClassID( ! 669: LPOLEOBJECT lpThis, ! 670: LPCLSID lpclsid ! 671: ); ! 672: STDMETHODIMP PseudoObj_OleObj_GetUserType( ! 673: LPOLEOBJECT lpThis, ! 674: DWORD dwFormOfType, ! 675: LPSTR FAR* lpszUserType ! 676: ); ! 677: STDMETHODIMP PseudoObj_OleObj_SetExtent( ! 678: LPOLEOBJECT lpThis, ! 679: DWORD dwDrawAspect, ! 680: LPSIZEL lplgrc ! 681: ); ! 682: STDMETHODIMP PseudoObj_OleObj_GetExtent( ! 683: LPOLEOBJECT lpThis, ! 684: DWORD dwDrawAspect, ! 685: LPSIZEL lplgrc ! 686: ); ! 687: STDMETHODIMP PseudoObj_OleObj_Advise( ! 688: LPOLEOBJECT lpThis, ! 689: LPADVISESINK lpAdvSink, ! 690: LPDWORD lpdwConnection ! 691: ); ! 692: STDMETHODIMP PseudoObj_OleObj_Unadvise(LPOLEOBJECT lpThis,DWORD dwConnection); ! 693: STDMETHODIMP PseudoObj_OleObj_EnumAdvise( ! 694: LPOLEOBJECT lpThis, ! 695: LPENUMSTATDATA FAR* lplpenumAdvise ! 696: ); ! 697: STDMETHODIMP PseudoObj_OleObj_GetMiscStatus( ! 698: LPOLEOBJECT lpThis, ! 699: DWORD dwAspect, ! 700: DWORD FAR* lpdwStatus ! 701: ); ! 702: STDMETHODIMP PseudoObj_OleObj_SetColorScheme( ! 703: LPOLEOBJECT lpThis, ! 704: LPLOGPALETTE lpLogpal ! 705: ); ! 706: STDMETHODIMP PseudoObj_OleObj_LockObject( ! 707: LPOLEOBJECT lpThis, ! 708: BOOL fLock ! 709: ); ! 710: ! 711: /* PseudoObj::IDataObject methods (functions) */ ! 712: STDMETHODIMP PseudoObj_DataObj_QueryInterface ( ! 713: LPDATAOBJECT lpThis, ! 714: REFIID riid, ! 715: LPVOID FAR* lplpvObj ! 716: ); ! 717: STDMETHODIMP_(ULONG) PseudoObj_DataObj_AddRef(LPDATAOBJECT lpThis); ! 718: STDMETHODIMP_(ULONG) PseudoObj_DataObj_Release (LPDATAOBJECT lpThis); ! 719: STDMETHODIMP PseudoObj_DataObj_GetData ( ! 720: LPDATAOBJECT lpThis, ! 721: LPFORMATETC lpformatetc, ! 722: LPSTGMEDIUM lpMedium ! 723: ); ! 724: STDMETHODIMP PseudoObj_DataObj_GetDataHere ( ! 725: LPDATAOBJECT lpThis, ! 726: LPFORMATETC lpformatetc, ! 727: LPSTGMEDIUM lpMedium ! 728: ); ! 729: STDMETHODIMP PseudoObj_DataObj_QueryGetData ( ! 730: LPDATAOBJECT lpThis, ! 731: LPFORMATETC lpformatetc ! 732: ); ! 733: STDMETHODIMP PseudoObj_DataObj_GetCanonicalFormatEtc ( ! 734: LPDATAOBJECT lpThis, ! 735: LPFORMATETC lpformatetc, ! 736: LPFORMATETC lpformatetcOut ! 737: ); ! 738: STDMETHODIMP PseudoObj_DataObj_SetData ( ! 739: LPDATAOBJECT lpThis, ! 740: LPFORMATETC lpformatetc, ! 741: LPSTGMEDIUM lpmedium, ! 742: BOOL fRelease ! 743: ); ! 744: STDMETHODIMP PseudoObj_DataObj_EnumFormatEtc( ! 745: LPDATAOBJECT lpThis, ! 746: DWORD dwDirection, ! 747: LPENUMFORMATETC FAR* lplpenumFormatEtc ! 748: ); ! 749: STDMETHODIMP PseudoObj_DataObj_Advise( ! 750: LPDATAOBJECT lpThis, ! 751: FORMATETC FAR* lpFormatetc, ! 752: DWORD advf, ! 753: LPADVISESINK lpAdvSink, ! 754: DWORD FAR* lpdwConnection ! 755: ); ! 756: STDMETHODIMP PseudoObj_DataObj_Unadvise(LPDATAOBJECT lpThis, DWORD dwConnection); ! 757: STDMETHODIMP PseudoObj_DataObj_EnumAdvise( ! 758: LPDATAOBJECT lpThis, ! 759: LPENUMSTATDATA FAR* lplpenumAdvise ! 760: ); ! 761: ! 762: ! 763: /************************************************************************* ! 764: ** class SERVERNAMETABLE : OUTLINENAMETABLE ! 765: ** SERVERNAMETABLE class is an extension to the OUTLINENAMETABLE ! 766: ** base class that adds functionallity required to support linking ! 767: ** to ranges (pseudo objects). The name table manages the table of ! 768: ** named selections in the document. Each name table entry has a ! 769: ** string as its key and a starting line index and an ending line ! 770: ** index for the named range. The SERVERNAMETABLE entries, in ! 771: ** addition, maintain a pointer to a PSEUDOOBJ pseudo object if one ! 772: ** has been already allocated. There is always one instance of ! 773: ** SERVERNAMETABLE for each SERVERDOC object created. ! 774: ** The SERVERNAME class inherits all fields from the NAME class. ! 775: ** This inheritance is achieved by including a member variable of ! 776: ** type NAME as the first field in the SERVERNAME ! 777: ** structure. Thus a pointer to an SERVERNAME object can be cast to be ! 778: ** a pointer to a NAME object. ! 779: *************************************************************************/ ! 780: ! 781: typedef struct tagSERVERNAMETABLE { ! 782: OUTLINENAMETABLE m_NameTable; // we inherit from OUTLINENAMETABLE ! 783: ! 784: // ServerNameTable does NOT add any fields ! 785: ! 786: } SERVERNAMETABLE, FAR* LPSERVERNAMETABLE; ! 787: ! 788: /* ServerNameTable methods (functions) */ ! 789: void ServerNameTable_EditLineUpdate( ! 790: LPSERVERNAMETABLE lpServerNameTable, ! 791: int nEditIndex ! 792: ); ! 793: void ServerNameTable_InformAllPseudoObjectsDocRenamed( ! 794: LPSERVERNAMETABLE lpServerNameTable, ! 795: LPMONIKER lpmkDoc ! 796: ); ! 797: void ServerNameTable_InformAllPseudoObjectsDocSaved( ! 798: LPSERVERNAMETABLE lpServerNameTable, ! 799: LPMONIKER lpmkDoc ! 800: ); ! 801: void ServerNameTable_SendPendingAdvises(LPSERVERNAMETABLE lpServerNameTable); ! 802: LPPSEUDOOBJ ServerNameTable_GetPseudoObj( ! 803: LPSERVERNAMETABLE lpServerNameTable, ! 804: LPSTR lpszItem, ! 805: LPSERVERDOC lpServerDoc ! 806: ); ! 807: void ServerNameTable_CloseAllPseudoObjs(LPSERVERNAMETABLE lpServerNameTable); ! 808: ! 809: ! 810: #if defined( INPLACE_SVR) ! 811: ! 812: /* ServerDoc::IOleInPlaceObject methods (functions) */ ! 813: ! 814: STDMETHODIMP SvrDoc_IPObj_QueryInterface( ! 815: LPOLEINPLACEOBJECT lpThis, ! 816: REFIID riid, ! 817: LPVOID FAR * lplpvObj ! 818: ); ! 819: STDMETHODIMP_(ULONG) SvrDoc_IPObj_AddRef(LPOLEINPLACEOBJECT lpThis); ! 820: STDMETHODIMP_(ULONG) SvrDoc_IPObj_Release(LPOLEINPLACEOBJECT lpThis); ! 821: STDMETHODIMP SvrDoc_IPObj_GetWindow( ! 822: LPOLEINPLACEOBJECT lpThis, ! 823: HWND FAR* lphwnd ! 824: ); ! 825: STDMETHODIMP SvrDoc_IPObj_ContextSensitiveHelp( ! 826: LPOLEINPLACEOBJECT lpThis, ! 827: BOOL fEnable ! 828: ); ! 829: STDMETHODIMP SvrDoc_IPObj_InPlaceDeactivate(LPOLEINPLACEOBJECT lpThis); ! 830: STDMETHODIMP SvrDoc_IPObj_UIDeactivate(LPOLEINPLACEOBJECT lpThis); ! 831: STDMETHODIMP SvrDoc_IPObj_SetObjectRects( ! 832: LPOLEINPLACEOBJECT lpThis, ! 833: LPCRECT lprcPosRect, ! 834: LPCRECT lprcClipRect ! 835: ); ! 836: STDMETHODIMP SvrDoc_IPObj_ReactivateAndUndo(LPOLEINPLACEOBJECT lpThis); ! 837: ! 838: /* ServerDoc::IOleInPlaceActiveObject methods (functions) */ ! 839: ! 840: STDMETHODIMP SvrDoc_IPActiveObj_QueryInterface( ! 841: LPOLEINPLACEACTIVEOBJECT lpThis, ! 842: REFIID riidReq, ! 843: LPVOID FAR * lplpUnk ! 844: ); ! 845: STDMETHODIMP_(ULONG) SvrDoc_IPActiveObj_AddRef( ! 846: LPOLEINPLACEACTIVEOBJECT lpThis ! 847: ); ! 848: STDMETHODIMP_(ULONG) SvrDoc_IPActiveObj_Release( ! 849: LPOLEINPLACEACTIVEOBJECT lpThis ! 850: ); ! 851: STDMETHODIMP SvrDoc_IPActiveObj_GetWindow( ! 852: LPOLEINPLACEACTIVEOBJECT lpThis, ! 853: HWND FAR* lphwnd ! 854: ); ! 855: STDMETHODIMP SvrDoc_IPActiveObj_ContextSensitiveHelp( ! 856: LPOLEINPLACEACTIVEOBJECT lpThis, ! 857: BOOL fEnable ! 858: ); ! 859: STDMETHODIMP SvrDoc_IPActiveObj_TranslateAccelerator( ! 860: LPOLEINPLACEACTIVEOBJECT lpThis, ! 861: LPMSG lpmsg ! 862: ); ! 863: STDMETHODIMP SvrDoc_IPActiveObj_OnFrameWindowActivate( ! 864: LPOLEINPLACEACTIVEOBJECT lpThis, ! 865: BOOL fActivate ! 866: ); ! 867: STDMETHODIMP SvrDoc_IPActiveObj_OnDocWindowActivate( ! 868: LPOLEINPLACEACTIVEOBJECT lpThis, ! 869: BOOL fActivate ! 870: ); ! 871: STDMETHODIMP SvrDoc_IPActiveObj_ResizeBorder( ! 872: LPOLEINPLACEACTIVEOBJECT lpThis, ! 873: LPCRECT lprectBorder, ! 874: LPOLEINPLACEUIWINDOW lpIPUiWnd, ! 875: BOOL fFrameWindow ! 876: ); ! 877: STDMETHODIMP SvrDoc_IPActiveObj_EnableModeless( ! 878: LPOLEINPLACEACTIVEOBJECT lpThis, ! 879: BOOL fEnable ! 880: ); ! 881: ! 882: #endif // INPLACE_SVR ! 883: ! 884: #endif // _SVROUTL_H_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.