Annotation of mstools/ole20/samples/outline/oleoutl.h, revision 1.1.1.1

1.1       root        1: /*************************************************************************
                      2: **
                      3: **    OLE 2.0 Sample Code
                      4: **
                      5: **    oleoutl.h
                      6: **
                      7: **    This file contains file contains data structure defintions,
                      8: **    function prototypes, constants, etc. which are common to the
                      9: **    server version and the container version of the app.
                     10: **    app version of the Outline series of sample applications:
                     11: **          Outline -- base version of the app (without OLE functionality)
                     12: **          SvrOutl -- OLE 2.0 Server sample app
                     13: **          CntrOutl -- OLE 2.0 Containter sample app
                     14: **
                     15: **    (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved
                     16: **
                     17: *************************************************************************/
                     18: 
                     19: #if !defined( _OLEOUTL_H_ )
                     20: #define _OLEOUTL_H_
                     21: 
                     22: #ifndef RC_INVOKED
                     23: #pragma message ("INCLUDING OLEOUTL.H from " __FILE__)
                     24: // make 'different levels of inderection' considered an error
                     25: #pragma warning (error:4047)
                     26: #endif  /* RC_INVOKED */
                     27: 
                     28: #if defined( USE_MSGFILTER )
                     29: #include <msgfiltr.h>
                     30: #endif  // USE_MSGFILTER
                     31: 
                     32: /* Defines */
                     33: 
                     34: #if defined( INITCLSID )
                     35: // OLE2NOTE: we must force our CLSID GUIDs to be initialized exactly once.
                     36: // Each dll/exe must initialize its GUIDs once.  This is done by
                     37: // including initguid.h after including ole2.h but prior to any GUID
                     38: // defintion statements (DEFINE_OLEGUID statements).
                     39: 
                     40: #include "initguid.h"           // forces our GUIDs to be initialized
                     41: #endif
                     42: 
                     43: /* CLASS ID CONSTANTS (GUID's)
                     44: **    OLE2NOTE: these class id values are allocated out of a private pool
                     45: **    of GUID's allocated to the OLE 2.0 development team. GUID's of
                     46: **    the following range have been allocated to OLE 2.0 sample code:
                     47: **         00000400-0000-0000-C000-000000000046
                     48: **         000004FF-0000-0000-C000-000000000046
                     49: **
                     50: **    values reserverd thus far:
                     51: **          00000400                -- Ole 2.0 Server Sample Outline
                     52: **          00000401                -- Ole 2.0 Container Sample Outline
                     53: **          00000402                -- Ole 2.0 In-Place Server Outline
                     54: **          00000403                -- Ole 2.0 In-Place Container Outline
                     55: **          00000404 : 0000040F     -- reserved for Outline Series
                     56: **          000004F0 : 000004FF     -- Developer Relations Series
                     57: */
                     58: DEFINE_OLEGUID(CLSID_SvrOutl,       0x00000400, 0, 0);
                     59: DEFINE_OLEGUID(CLSID_CntrOutl,      0x00000401, 0, 0);
                     60: DEFINE_OLEGUID(CLSID_ISvrOtl,       0x00000402, 0, 0);
                     61: DEFINE_OLEGUID(CLSID_ICntrOtl,      0x00000403, 0, 0);
                     62: 
                     63: /* OLE2NOTE: these strings should correspond to the strings registered
                     64: **    in the registration database.
                     65: */
                     66: // REVIEW: should load strings from resource file
                     67: #if defined( INPLACE_SVR )
                     68: 
                     69: #define CLSID_APP   CLSID_ISvrOtl
                     70: #define FULLUSERTYPENAME    "Ole 2.0 In-Place Server Outline"
                     71: #define SHORTUSERTYPENAME   "Outline"   // max 15 chars
                     72: #undef  APPFILENAMEFILTER
                     73: #define APPFILENAMEFILTER   "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
                     74: #undef  DEFEXTENSION
                     75: #define DEFEXTENSION    "oln"           // Default file extension
                     76: 
                     77: #elif defined( INPLACE_CNTR )
                     78: 
                     79: #define CLSID_APP   CLSID_ICntrOtl
                     80: #define FULLUSERTYPENAME    "Ole 2.0 In-Place Container Outline"
                     81: // #define SHORTUSERTYPENAME    "Outline"   // max 15 chars
                     82: #undef  APPFILENAMEFILTER
                     83: #define APPFILENAMEFILTER   "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
                     84: #undef  DEFEXTENSION
                     85: #define DEFEXTENSION    "olc"           // Default file extension
                     86: 
                     87: #elif defined( OLE_SERVER )
                     88: 
                     89: #define CLSID_APP   CLSID_SvrOutl
                     90: #define FULLUSERTYPENAME    "Ole 2.0 Server Sample Outline"
                     91: #define SHORTUSERTYPENAME   "Outline"
                     92: #undef  APPFILENAMEFILTER
                     93: #define APPFILENAMEFILTER   "Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
                     94: #undef  DEFEXTENSION
                     95: #define DEFEXTENSION    "oln"           // Default file extension
                     96: 
                     97: #elif defined( OLE_CNTR )
                     98: 
                     99: #define CLSID_APP   CLSID_CntrOutl
                    100: #define FULLUSERTYPENAME    "Ole 2.0 Container Sample Outline"
                    101: // #define SHORTUSERTYPENAME    "Outline"  // max 15 chars
                    102: #undef  APPFILENAMEFILTER
                    103: #define APPFILENAMEFILTER   "CntrOutl Files (*.OLC)|*.olc|Outline Files (*.OLN)|*.oln|All files (*.*)|*.*|"
                    104: #undef  DEFEXTENSION
                    105: #define DEFEXTENSION    "olc"           // Default file extension
                    106: 
                    107: #endif
                    108: 
                    109: // Maximum number of formats offered by IDataObject::GetData/SetData
                    110: #define MAXNOFMTS       10
                    111: #define MAXNOLINKTYPES   3
                    112: 
                    113: #if defined( USE_DRAGDROP )
                    114: #define DD_SEL_THRESH       HITTESTDELTA    // Border threshold to start drag
                    115: #define MAX_SEL_ITEMS       0x0080
                    116: #endif  // USE_DRAGDROP
                    117: 
                    118: 
                    119: 
                    120: /* Positions of the various menus */
                    121: #define POS_FILEMENU        0
                    122: #define POS_EDITMENU        1
                    123: #define POS_VIEWMENU        2
                    124: #define POS_LINEMENU        3
                    125: #define POS_NAMEMENU        4
                    126: #define POS_OPTIONSMENU     5
                    127: #define POS_DEBUGMENU       6
                    128: #define POS_HELPMENU        7
                    129: 
                    130: 
                    131: #define POS_OBJECT      11
                    132: 
                    133: 
                    134: /* Types */
                    135: 
                    136: // Document initialization type
                    137: #define DOCTYPE_EMBEDDED    3   // init from an IStorage* of an embedded obj
                    138: #define DOCTYPE_FROMSTG     4   // init from an IStorage* with doc bit set
                    139: 
                    140: 
                    141: /* Forward type definitions */
                    142: typedef struct tagOLEAPP FAR* LPOLEAPP;
                    143: typedef struct tagOLEDOC FAR* LPOLEDOC;
                    144: 
                    145: /* Flags to control Moniker assignment for OleDoc_GetFullMoniker */
                    146: // REVIEW: should use official OLEGETMONIKER type for final version
                    147: typedef enum tagGETMONIKERTYPE {
                    148:     GETMONIKER_ONLYIFTHERE  = 1,
                    149:     GETMONIKER_FORCEASSIGN  = 2,
                    150:     GETMONIKER_UNASSIGN     = 3,
                    151:     GETMONIKER_TEMPFORUSER  = 4
                    152: } GETMONIKERTYPE;
                    153: 
                    154: /* Flags to control direction for drag scrolling */
                    155: typedef enum tagSCROLLDIR {
                    156:     SCROLLDIR_NULL          = 0,
                    157:     SCROLLDIR_UP            = 1,
                    158:     SCROLLDIR_DOWN          = 2,
                    159:     SCROLLDIR_RIGHT         = 3,    // currently not used
                    160:     SCROLLDIR_LEFT          = 4     // currently not used
                    161: } SCROLLDIR;
                    162: 
                    163: 
                    164: /*************************************************************************
                    165: ** class OLEDOC : OUTLINEDOC
                    166: **    OLEDOC is an extention to the base OUTLINEDOC object (structure)
                    167: **    that adds common OLE 2.0 functionality used by both the server
                    168: **    and container versions. This is an abstract class. You do not
                    169: **    instantiate an instance of OLEDOC directly but instead
                    170: **    instantiate one of its concrete subclasses: SERVERDOC or
                    171: **    CONTAINERDOC. There is one instance of an document
                    172: **    object created per document open in the app. The SDI
                    173: **    version of the app supports one ServerDoc at a time. The MDI
                    174: **    version of the app can manage multiple documents at one time.
                    175: **    The OLEDOC class inherits all fields from the OUTLINEDOC class.
                    176: **    This inheritance is achieved by including a member variable of
                    177: **    type OUTLINEDOC as the first field in the OLEDOC
                    178: **    structure. Thus a pointer to an OLEDOC object can be cast to be
                    179: **    a pointer to a OUTLINEDOC object.
                    180: *************************************************************************/
                    181: 
                    182: typedef struct tagOLEDOC {
                    183:     OUTLINEDOC      m_OutlineDoc;       // ServerDoc inherits from OutlineDoc
                    184:     ULONG           m_cRef;             // total ref count for document
                    185:     ULONG           m_cLock;            // total lock count for document
                    186:     BOOL            m_fObjIsClosing;    // flag to guard recursive close call
                    187:     BOOL            m_fObjIsDestroying; // flag to guard recursiv destroy call
                    188:     DWORD           m_dwRegROT;         // key if doc registered as running
                    189:     LPMONIKER       m_lpFileMoniker;    // moniker if file-based/untitled doc
                    190:     BOOL            m_fLinkSourceAvail; // can doc offer CF_LINKSOURCE
                    191:     LPOLEDOC        m_lpSrcDocOfCopy;   // src doc if doc created for copy
                    192:     BOOL            m_fUpdateEditMenu;  // need to update edit menu??
                    193: 
                    194: #if defined( USE_DRAGDROP )
                    195:     DWORD           m_dwTimeEnterScrollArea; // start time for scroll delay
                    196:     DWORD           m_lastdwScrollDir;  // current dir for drag scroll
                    197:     BOOL            m_fRegDragDrop;     // is doc registered as drop target?
                    198:     BOOL            m_fLocalDrag;       // is doc source of the drag
                    199:     BOOL            m_fLocalDrop;       // was doc target of the drop
                    200:     BOOL            m_fCanDropCopy;     // is Drag/Drop copy/move possible?
                    201:     BOOL            m_fCanDropLink;     // is Drag/Drop link possible?
                    202:     BOOL            m_fDragLeave;       // has drag left
                    203:     BOOL            m_fPendingDrag;     // LButtonDown--possible drag pending
                    204:     POINT           m_ptButDown;        // LButtonDown coordinates
                    205: 
                    206: #endif  // USE_DRAGDROP
                    207: 
                    208:     struct CDocUnknownImpl {
                    209:         IUnknownVtbl FAR*       lpVtbl;
                    210:         LPOLEDOC                lpOleDoc;
                    211:         int                     cRef;   // interface specific ref count.
                    212:     } m_Unknown;
                    213: 
                    214:     struct CDocPersistFileImpl {
                    215:         IPersistFileVtbl FAR*   lpVtbl;
                    216:         LPOLEDOC                lpOleDoc;
                    217:         int                     cRef;   // interface specific ref count.
                    218:     } m_PersistFile;
                    219: 
                    220:     struct CDocOleItemContainerImpl {
                    221:         IOleItemContainerVtbl FAR*  lpVtbl;
                    222:         LPOLEDOC                    lpOleDoc;
                    223:         int                         cRef;   // interface specific ref count.
                    224:     } m_OleItemContainer;
                    225: 
                    226:     struct CDocDataObjectImpl {
                    227:         IDataObjectVtbl FAR*        lpVtbl;
                    228:         LPOLEDOC                    lpOleDoc;
                    229:         int                         cRef;   // interface specific ref count.
                    230:     } m_DataObject;
                    231: 
                    232: #ifdef USE_DRAGDROP
                    233:     struct CDocDropSourceImpl {
                    234:         IDropSourceVtbl FAR*    lpVtbl;
                    235:         LPOLEDOC                lpOleDoc;
                    236:         int                     cRef;   // interface specific ref count.
                    237:     } m_DropSource;
                    238: 
                    239:     struct CDocDropTargetImpl {
                    240:         IDropTargetVtbl FAR*    lpVtbl;
                    241:         LPOLEDOC                lpOleDoc;
                    242:         int                     cRef;   // interface specific ref count.
                    243:     } m_DropTarget;
                    244: #endif  // USE_DRAGDROP
                    245: 
                    246: } OLEDOC;
                    247: 
                    248: /* OleDoc methods (functions) */
                    249: BOOL OleDoc_Init(LPOLEDOC lpOleDoc, BOOL fDataTransferDoc);
                    250: BOOL OleDoc_InitNewFile(LPOLEDOC lpOleDoc);
                    251: void OleDoc_ShowWindow(LPOLEDOC lpOleDoc);
                    252: void OleDoc_HideWindow(LPOLEDOC lpOleDoc, BOOL fShutDown);
                    253: HRESULT OleDoc_Lock(LPOLEDOC lpOleDoc, BOOL fLock, BOOL fLastUnlockReleases);
                    254: ULONG OleDoc_AddRef(LPOLEDOC lpOleDoc);
                    255: ULONG OleDoc_Release (LPOLEDOC lpOleDoc);
                    256: HRESULT OleDoc_QueryInterface(
                    257:         LPOLEDOC          lpOleDoc,
                    258:         REFIID            riid,
                    259:         LPVOID FAR*       lplpUnk
                    260: );
                    261: BOOL OleDoc_Close(LPOLEDOC lpOleDoc, DWORD dwSaveOption);
                    262: void OleDoc_Destroy(LPOLEDOC lpOleDoc);
                    263: void OleDoc_SetUpdateEditMenuFlag(LPOLEDOC lpOleDoc, BOOL fUpdate);
                    264: BOOL OleDoc_GetUpdateEditMenuFlag(LPOLEDOC lpOleDoc);
                    265: void OleDoc_GetExtent(LPOLEDOC lpOleDoc, LPSIZEL lpsizel);
                    266: HGLOBAL OleDoc_GetObjectDescriptorData(
                    267:         LPOLEDOC            lpOleDoc,
                    268:         LPLINERANGE         lplrSel
                    269: );
                    270: LPMONIKER OleDoc_GetFullMoniker(LPOLEDOC lpOleDoc, DWORD dwAssign);
                    271: void OleDoc_GetExtent(LPOLEDOC lpOleDoc, LPSIZEL lpsizel);
                    272: void OleDoc_DocRenamedUpdate(LPOLEDOC lpOleDoc, LPMONIKER lpmkDoc);
                    273: void OleDoc_PasteCommand(LPOLEDOC lpOleDoc);
                    274: void OleDoc_PasteSpecialCommand(LPOLEDOC lpOleDoc);
                    275: BOOL OleDoc_PasteFromData(
                    276:         LPOLEDOC            lpOleDoc,
                    277:         LPDATAOBJECT        lpSrcDataObj,
                    278:         BOOL                fLocalDataObj,
                    279:         BOOL                fLink
                    280: );
                    281: BOOL OleDoc_PasteFormatFromData(
                    282:         LPOLEDOC            lpOleDoc,
                    283:         CLIPFORMAT          cfFormat,
                    284:         LPDATAOBJECT        lpSrcDataObj,
                    285:         BOOL                fLocalDataObj,
                    286:         BOOL                fLink,
                    287:         BOOL                fDisplayAsIcon,
                    288:         HGLOBAL             hMetaPict
                    289: );
                    290: BOOL OleDoc_QueryPasteFromData(
                    291:         LPOLEDOC            lpOleDoc,
                    292:         LPDATAOBJECT        lpSrcDataObj,
                    293:         BOOL                fLink
                    294: );
                    295: 
                    296: #if defined( USE_DRAGDROP )
                    297: 
                    298: BOOL OleDoc_QueryDrag( LPOLEDOC lpOleDoc, int y );
                    299: BOOL OleDoc_QueryDrop (
                    300:     LPOLEDOC        lpOleDoc,
                    301:     DWORD           grfKeyState,
                    302:     POINTL          pointl,
                    303:     BOOL            fDragScroll,
                    304:     LPDWORD         lpdwEffect
                    305: );
                    306: DWORD OleDoc_DoDragDrop (LPOLEDOC lpSrcOleDoc);
                    307: BOOL OleDoc_DoDragScroll(LPOLEDOC lpOleDoc, POINTL pointl);
                    308: 
                    309: #endif  // USE_DRAGDROP
                    310: 
                    311: /* OleDoc::IUnknown methods (functions) */
                    312: STDMETHODIMP OleDoc_Unk_QueryInterface(
                    313:         LPUNKNOWN           lpThis,
                    314:         REFIID              riid,
                    315:         LPVOID FAR*         lplpvObj
                    316: );
                    317: STDMETHODIMP_(ULONG) OleDoc_Unk_AddRef(LPUNKNOWN lpThis);
                    318: STDMETHODIMP_(ULONG) OleDoc_Unk_Release (LPUNKNOWN lpThis);
                    319: 
                    320: /* OleDoc::IPersistFile methods (functions) */
                    321: STDMETHODIMP OleDoc_PFile_QueryInterface(
                    322:         LPPERSISTFILE       lpThis,
                    323:         REFIID              riid,
                    324:         LPVOID FAR*         lplpvObj
                    325: );
                    326: STDMETHODIMP_(ULONG) OleDoc_PFile_AddRef(LPPERSISTFILE lpThis);
                    327: STDMETHODIMP_(ULONG) OleDoc_PFile_Release (LPPERSISTFILE lpThis);
                    328: STDMETHODIMP OleDoc_PFile_GetClassID (
                    329:         LPPERSISTFILE       lpThis,
                    330:         CLSID FAR*          lpclsid
                    331: );
                    332: STDMETHODIMP  OleDoc_PFile_IsDirty(LPPERSISTFILE lpThis);
                    333: STDMETHODIMP OleDoc_PFile_Load (
                    334:         LPPERSISTFILE       lpThis,
                    335:         LPCSTR              lpszFileName,
                    336:         DWORD               grfMode
                    337: );
                    338: STDMETHODIMP OleDoc_PFile_Save (
                    339:         LPPERSISTFILE       lpThis,
                    340:         LPCSTR              lpszFileName,
                    341:         BOOL                fRemember
                    342: );
                    343: STDMETHODIMP OleDoc_PFile_SaveCompleted (
                    344:         LPPERSISTFILE       lpThis,
                    345:         LPCSTR              lpszFileName
                    346: );
                    347: STDMETHODIMP OleDoc_PFile_GetCurFile (
                    348:         LPPERSISTFILE   lpThis,
                    349:         LPSTR FAR*      lplpszFileName
                    350: );
                    351: 
                    352: /* OleDoc::IOleItemContainer methods (functions) */
                    353: STDMETHODIMP OleDoc_ItemCont_QueryInterface(
                    354:         LPOLEITEMCONTAINER  lpThis,
                    355:         REFIID              riid,
                    356:         LPVOID FAR*         lplpvObj
                    357: );
                    358: STDMETHODIMP_(ULONG) OleDoc_ItemCont_AddRef(LPOLEITEMCONTAINER lpThis);
                    359: STDMETHODIMP_(ULONG) OleDoc_ItemCont_Release(LPOLEITEMCONTAINER lpThis);
                    360: STDMETHODIMP OleDoc_ItemCont_ParseDisplayName(
                    361:         LPOLEITEMCONTAINER  lpThis,
                    362:         LPBC                lpbc,
                    363:         LPSTR               lpszDisplayName,
                    364:         ULONG FAR*          lpchEaten,
                    365:         LPMONIKER FAR*      lplpmkOut
                    366: );
                    367: 
                    368: STDMETHODIMP OleDoc_ItemCont_EnumObjects(
                    369:         LPOLEITEMCONTAINER  lpThis,
                    370:         DWORD               grfFlags,
                    371:         LPENUMUNKNOWN FAR*  lplpenumUnknown
                    372: );
                    373: STDMETHODIMP OleDoc_ItemCont_LockContainer(
                    374:         LPOLEITEMCONTAINER  lpThis,
                    375:         BOOL                fLock
                    376: );
                    377: STDMETHODIMP OleDoc_ItemCont_GetObject(
                    378:         LPOLEITEMCONTAINER  lpThis,
                    379:         LPSTR               lpszItem,
                    380:         DWORD               dwSpeedNeeded,
                    381:         LPBINDCTX           lpbc,
                    382:         REFIID              riid,
                    383:         LPVOID FAR*         lplpvObject
                    384: );
                    385: STDMETHODIMP OleDoc_ItemCont_GetObjectStorage(
                    386:         LPOLEITEMCONTAINER  lpThis,
                    387:         LPSTR               lpszItem,
                    388:         LPBINDCTX           lpbc,
                    389:         REFIID              riid,
                    390:         LPVOID FAR*         lplpvStorage
                    391: );
                    392: STDMETHODIMP OleDoc_ItemCont_IsRunning(
                    393:         LPOLEITEMCONTAINER  lpThis,
                    394:         LPSTR               lpszItem
                    395: );
                    396: 
                    397: /* OleDoc::IDataObject methods (functions) */
                    398: STDMETHODIMP OleDoc_DataObj_QueryInterface (
                    399:         LPDATAOBJECT        lpThis,
                    400:         REFIID              riid,
                    401:         LPVOID FAR*         lplpvObj
                    402: );
                    403: STDMETHODIMP_(ULONG) OleDoc_DataObj_AddRef(LPDATAOBJECT lpThis);
                    404: STDMETHODIMP_(ULONG) OleDoc_DataObj_Release (LPDATAOBJECT lpThis);
                    405: STDMETHODIMP OleDoc_DataObj_GetData (
                    406:         LPDATAOBJECT        lpThis,
                    407:         LPFORMATETC         lpFormatetc,
                    408:         LPSTGMEDIUM         lpMedium
                    409: );
                    410: STDMETHODIMP OleDoc_DataObj_GetDataHere (
                    411:         LPDATAOBJECT        lpThis,
                    412:         LPFORMATETC         lpFormatetc,
                    413:         LPSTGMEDIUM         lpMedium
                    414: );
                    415: STDMETHODIMP OleDoc_DataObj_QueryGetData (
                    416:         LPDATAOBJECT        lpThis,
                    417:         LPFORMATETC         lpFormatetc
                    418: );
                    419: STDMETHODIMP OleDoc_DataObj_GetCanonicalFormatEtc(
                    420:         LPDATAOBJECT        lpThis,
                    421:         LPFORMATETC         lpformatetc,
                    422:         LPFORMATETC         lpformatetcOut
                    423: );
                    424: STDMETHODIMP OleDoc_DataObj_SetData (
                    425:         LPDATAOBJECT    lpThis,
                    426:         LPFORMATETC     lpFormatetc,
                    427:         LPSTGMEDIUM     lpMedium,
                    428:         BOOL            fRelease
                    429: );
                    430: STDMETHODIMP OleDoc_DataObj_EnumFormatEtc(
                    431:         LPDATAOBJECT            lpThis,
                    432:         DWORD                   dwDirection,
                    433:         LPENUMFORMATETC FAR*    lplpenumFormatEtc
                    434: );
                    435: STDMETHODIMP OleDoc_DataObj_DAdvise(
                    436:         LPDATAOBJECT        lpThis,
                    437:         FORMATETC FAR*      lpFormatetc,
                    438:         DWORD               advf,
                    439:         LPADVISESINK        lpAdvSink,
                    440:         DWORD FAR*          lpdwConnection
                    441: );
                    442: STDMETHODIMP OleDoc_DataObj_DUnadvise(LPDATAOBJECT lpThis,DWORD dwConnection);
                    443: STDMETHODIMP OleDoc_DataObj_EnumDAdvise(
                    444:         LPDATAOBJECT        lpThis,
                    445:         LPENUMSTATDATA FAR* lplpenumAdvise
                    446: );
                    447: 
                    448: 
                    449: #ifdef USE_DRAGDROP
                    450: 
                    451: /* OleDoc::IDropSource methods (functions) */
                    452: STDMETHODIMP OleDoc_DropSource_QueryInterface(
                    453:     LPDROPSOURCE            lpThis,
                    454:     REFIID                  riid,
                    455:     LPVOID FAR*             lplpvObj
                    456: );
                    457: STDMETHODIMP_(ULONG) OleDoc_DropSource_AddRef( LPDROPSOURCE lpThis );
                    458: STDMETHODIMP_(ULONG) OleDoc_DropSource_Release ( LPDROPSOURCE lpThis);
                    459: STDMETHODIMP    OleDoc_DropSource_QueryContinueDrag (
                    460:     LPDROPSOURCE            lpThis,
                    461:     BOOL                    fEscapePressed,
                    462:     DWORD                   grfKeyState
                    463: );
                    464: STDMETHODIMP    OleDoc_DropSource_GiveFeedback (
                    465:     LPDROPSOURCE            lpThis,
                    466:     DWORD                   dwEffect
                    467: );
                    468: 
                    469: /* OleDoc::IDropTarget methods (functions) */
                    470: STDMETHODIMP OleDoc_DropTarget_QueryInterface(
                    471:         LPDROPTARGET        lpThis,
                    472:         REFIID              riid,
                    473:         LPVOID FAR*         lplpvObj
                    474: );
                    475: STDMETHODIMP_(ULONG) OleDoc_DropTarget_AddRef(LPDROPTARGET lpThis);
                    476: STDMETHODIMP_(ULONG) OleDoc_DropTarget_Release ( LPDROPTARGET lpThis);
                    477: STDMETHODIMP    OleDoc_DropTarget_DragEnter (
                    478:     LPDROPTARGET            lpThis,
                    479:     LPDATAOBJECT            lpDataObj,
                    480:     DWORD                   grfKeyState,
                    481:     POINTL                  pointl,
                    482:     LPDWORD                 lpdwEffect
                    483: );
                    484: STDMETHODIMP    OleDoc_DropTarget_DragOver (
                    485:     LPDROPTARGET            lpThis,
                    486:     DWORD                   grfKeyState,
                    487:     POINTL                  pointl,
                    488:     LPDWORD                 lpdwEffect
                    489: );
                    490: STDMETHODIMP    OleDoc_DropTarget_DragLeave ( LPDROPTARGET lpThis);
                    491: STDMETHODIMP    OleDoc_DropTarget_Drop (
                    492:     LPDROPTARGET            lpThis,
                    493:     LPDATAOBJECT            lpDataObj,
                    494:     DWORD                   grfKeyState,
                    495:     POINTL                  pointl,
                    496:     LPDWORD                 lpdwEffect
                    497: );
                    498: 
                    499: #endif  // USE_DRAGDROP
                    500: 
                    501: 
                    502: /*************************************************************************
                    503: ** class APPCLASSFACTORY
                    504: **  APPCLASSFACTORY implements the IClassFactory interface. it
                    505: **    instantiates document instances of the correct type depending on
                    506: **    how the application is compiled (either ServerDoc or ContainerDoc
                    507: **    instances). by implementing this
                    508: **    interface in a seperate interface from the App object itself, it
                    509: **    is easier to manage when the IClassFactory should be
                    510: **    registered/revoked. when the OleApp object is first initialized
                    511: **    in OleApp_InitInstance an instance of APPCLASSFACTORY is created
                    512: **    and registered (CoRegisterClassObject called). when the App
                    513: **    object gets destroyed (in OleApp_Destroy) this APPCLASSFACTORY is
                    514: **    revoked (CoRevokeClassObject called) and released. the simple
                    515: **    fact that the IClassFactory is registered does not on its own keep
                    516: **    the application alive.
                    517: *************************************************************************/
                    518: 
                    519: typedef struct tagAPPCLASSFACTORY {
                    520:     IClassFactoryVtbl FAR*  m_lpVtbl;
                    521:     UINT                    m_cRef;
                    522:     LONG                    m_cLock;
                    523:  } APPCLASSFACTORY, FAR* LPAPPCLASSFACTORY;
                    524: 
                    525: /* PUBLIC FUNCTIONS */
                    526: LPCLASSFACTORY WINAPI AppClassFactory_Create(void);
                    527: 
                    528: /* interface IClassFactory implementation */
                    529: STDMETHODIMP AppClassFactory_QueryInterface(
                    530:         LPCLASSFACTORY lpThis, REFIID riid, LPVOID FAR* ppvObj);
                    531: STDMETHODIMP_(ULONG) AppClassFactory_AddRef(LPCLASSFACTORY lpThis);
                    532: STDMETHODIMP_(ULONG) AppClassFactory_Release(LPCLASSFACTORY lpThis);
                    533: STDMETHODIMP AppClassFactory_CreateInstance (
                    534:         LPCLASSFACTORY      lpThis,
                    535:         LPUNKNOWN           lpUnkOuter,
                    536:         REFIID              riid,
                    537:         LPVOID FAR*         lplpvObj
                    538: );
                    539: STDMETHODIMP AppClassFactory_LockServer (
                    540:         LPCLASSFACTORY      lpThis,
                    541:         BOOL                fLock
                    542: );
                    543: 
                    544: 
                    545: /*************************************************************************
                    546: ** class OLEAPP : OUTLINEAPP
                    547: **    OLEAPP is an extention to the base OUTLINEAPP object (structure)
                    548: **    that adds common OLE 2.0 functionality used by both the server
                    549: **    and container versions. This is an abstract class. You do not
                    550: **    instantiate an instance of OLEAPP directly but instead
                    551: **    instantiate one of its concrete subclasses: SERVERAPP or
                    552: **    CONTAINERAPP. There is one instance of an document application
                    553: **    object created per running application instance. This
                    554: **    object holds many fields that could otherwise be organized as
                    555: **    global variables. The OLEAPP class inherits all fields
                    556: **    from the OUTLINEAPP class. This inheritance is achieved by including a
                    557: **    member variable of type OUTLINEAPP as the first field in the OLEAPP
                    558: **    structure. Thus a pointer to a OLEAPP object can be cast to be
                    559: **    a pointer to a OUTLINEAPP object.
                    560: *************************************************************************/
                    561: 
                    562: typedef struct tagOLEAPP {
                    563:     OUTLINEAPP  m_OutlineApp;       // inherits all fields of OutlineApp
                    564:     ULONG       m_cRef;             // total ref count for app
                    565:     ULONG       m_cDoc;             // total count of open documents
                    566:     BOOL        m_fUserCtrl;        // does user control life-time of app?
                    567:     DWORD       m_dwRegClassFac;    // value returned by CoRegisterClassObject
                    568:     LPCLASSFACTORY m_lpClassFactory;// ptr to allocated ClassFactory instance
                    569: #if defined( USE_MSGFILTER )
                    570:     LPMESSAGEFILTER m_lpMsgFilter;  // ptr to allocated MsgFilter instance
                    571:     MSGPENDINGPROC m_lpfnMsgPending;// ptr to msg pending callback function
                    572: #endif  // USE_MSGFILTER
                    573:     BOOL        m_fOleInitialized;  // was OleInitialize called
                    574:     UINT        m_cfEmbedSource;    // OLE 2.0 clipboard format
                    575:     UINT        m_cfEmbeddedObject; // OLE 2.0 clipboard format
                    576:     UINT        m_cfLinkSource;     // OLE 2.0 clipboard format
                    577:     UINT        m_cfObjectDescriptor; // OLE 2.0 clipboard format
                    578:     UINT        m_cfLinkSrcDescriptor; // OLE 2.0 clipboard format
                    579:     UINT        m_cfFileName;       // std Windows clipboard format
                    580:     FORMATETC   m_arrDocGetFmts[MAXNOFMTS];  // fmts offered by copy & GetData
                    581:     UINT        m_nDocGetFmts;      // no of fmtetc's for GetData
                    582:     OLEUIPASTEENTRY m_arrPasteEntries[MAXNOFMTS];
                    583:     int         m_nPasteEntries;
                    584:     UINT        m_arrLinkTypes[MAXNOLINKTYPES];
                    585:     int         m_nLinkTypes;
                    586: 
                    587: #if defined( USE_DRAGDROP )
                    588:     int         m_nScrollDelay;     // time delay (in msec) before scroll
                    589:     int         m_nScrollInset;     // Border threshold for drag scroll
                    590:     HCURSOR     m_hcursorDragMove;  // cursor used to show drag is pending
                    591: 
                    592: #if defined( IF_SPECIAL_DD_CURSORS_NEEDED )
                    593:     // This would be used if the app wanted to have custom drag/drop cursors
                    594:     HCURSOR     m_hcursorDragNone;
                    595:     HCURSOR     m_hcursorDragCopy;
                    596:     HCURSOR     m_hcursorDragLink;
                    597: #endif  // IF_SPECIAL_DD_CURSORS_NEEDED
                    598: #endif  // USE_DRAGDROP
                    599: 
                    600:     struct CAppUnknownImpl {
                    601:         IUnknownVtbl FAR*       lpVtbl;
                    602:         LPOLEAPP                lpOleApp;
                    603:         int                     cRef;   // interface specific ref count.
                    604:     } m_Unknown;
                    605: 
                    606: } OLEAPP;
                    607: 
                    608: /* ServerApp methods (functions) */
                    609: BOOL OleApp_InitInstance(LPOLEAPP lpOleApp, HINSTANCE hInst, int nCmdShow);
                    610: void OleApp_TerminateApplication(LPOLEAPP lpOleApp);
                    611: BOOL OleApp_ParseCmdLine(LPOLEAPP lpOleApp, LPSTR lpszCmdLine, int nCmdShow);
                    612: void OleApp_Destroy(LPOLEAPP lpOleApp);
                    613: BOOL OleApp_CloseAllDocsAndExitCommand(LPOLEAPP lpOleApp);
                    614: void OleApp_ShowWindow(LPOLEAPP lpOleApp, BOOL fGiveUserCtrl);
                    615: void OleApp_HideWindow(LPOLEAPP lpOleApp);
                    616: void OleApp_HideIfNoReasonToStayVisible(LPOLEAPP lpOleApp);
                    617: void OleApp_DocLockApp(LPOLEAPP lpOleApp);
                    618: void OleApp_DocUnlockApp(LPOLEAPP lpOleApp, LPOUTLINEDOC lpOutlineDoc);
                    619: HRESULT OleApp_Lock(LPOLEAPP lpOleApp, BOOL fLock, BOOL fLastUnlockReleases);
                    620: ULONG OleApp_AddRef(LPOLEAPP lpOleApp);
                    621: ULONG OleApp_Release (LPOLEAPP lpOleApp);
                    622: HRESULT OleApp_QueryInterface (
                    623:         LPOLEAPP                lpOleApp,
                    624:         REFIID                  riid,
                    625:         LPVOID FAR*             lplpUnk
                    626: );
                    627: void OleApp_RejectInComingCalls(LPOLEAPP lpOleApp, BOOL fReject);
                    628: BOOL OleApp_InitVtbls (LPOLEAPP lpOleApp);
                    629: void OleApp_InitMenu(
                    630:         LPOLEAPP                lpOleApp,
                    631:         LPOLEDOC                lpOleDoc,
                    632:         HMENU                   hMenu
                    633: );
                    634: void OleApp_UpdateEditMenu(
                    635:         LPOLEAPP                lpOleApp,
                    636:         LPOUTLINEDOC            lpOutlineDoc,
                    637:         HMENU                   hMenuEdit
                    638: );
                    639: BOOL OleApp_RegisterClassFactory(LPOLEAPP lpOleApp);
                    640: void OleApp_RevokeClassFactory(LPOLEAPP lpOleApp);
                    641: 
                    642: #if defined( USE_MSGFILTER )
                    643: BOOL OleApp_RegisterMessageFilter(LPOLEAPP lpOleApp);
                    644: void OleApp_RevokeMessageFilter(LPOLEAPP lpOleApp);
                    645: BOOL FAR PASCAL EXPORT MessagePendingProc(MSG FAR *lpMsg);
                    646: #endif  // USE_MSGFILTER
                    647: 
                    648: void OleApp_FlushClipboard(LPOLEAPP lpOleApp);
                    649: void OleApp_NewCommand(LPOLEAPP lpOleApp);
                    650: void OleApp_OpenCommand(LPOLEAPP lpOleApp);
                    651: 
                    652: 
                    653: /* OleApp::IUnknown methods (functions) */
                    654: STDMETHODIMP OleApp_Unk_QueryInterface(
                    655:         LPUNKNOWN           lpThis,
                    656:         REFIID              riid,
                    657:         LPVOID FAR*         lplpvObj
                    658: );
                    659: STDMETHODIMP_(ULONG) OleApp_Unk_AddRef(LPUNKNOWN lpThis);
                    660: STDMETHODIMP_(ULONG) OleApp_Unk_Release (LPUNKNOWN lpThis);
                    661: 
                    662: 
                    663: /* Function prototypes in debug.c */
                    664: void InstallMessageFilterCommand(void);
                    665: void RejectIncomingCommand(void);
                    666: 
                    667: 
                    668: #if defined( OLE_SERVER )
                    669: #include "svroutl.h"
                    670: #elif defined( OLE_CNTR )
                    671: #include "cntroutl.h"
                    672: #endif
                    673: 
                    674: #endif // _OLEOUTL_H_

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.