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

1.1       root        1: /*************************************************************************
                      2: ** 
                      3: **    OLE 2.0 Container Sample Code
                      4: **    
                      5: **    cntroutl.h
                      6: **    
                      7: **    This file contains file contains data structure defintions, 
                      8: **       function prototypes, constants, etc. used by the OLE 2.0 container 
                      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 (Container) sample app
                     13: ** 
                     14: **       (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved
                     15: **
                     16: *************************************************************************/
                     17: 
                     18: #if !defined( _CNTROUTL_H_ )
                     19: #define _CNTROUTL_H_
                     20: 
                     21: #ifndef RC_INVOKED
                     22: #pragma message ("INCLUDING CNTROUTL.H from " __FILE__)
                     23: #endif  /* RC_INVOKED */
                     24: 
                     25: #include "oleoutl.h"
                     26: #include "cntrrc.h"
                     27: #include <ole2ui.h>
                     28: 
                     29: // REVIEW: should load from string resource
                     30: #define DEFOBJNAMEPREFIX       "Obj"   // Prefix for auto-generated stg names
                     31: #define DEFOBJWIDTH                    5000    // default size for embedded obj.
                     32: #define DEFOBJHEIGHT           5000    // default size for embedded obj.
                     33: #define UNKNOWN_OLEOBJ_TYPE    "Unknown OLE Object Type"
                     34: #define szOLEOBJECT    "Object"
                     35: #define szOLELINK      "Link"
                     36: 
                     37: #define CONTAINERDOCFORMAT     "CntrOutl"              // CF_CntrOutl format name
                     38: 
                     39: /* Forward definition of types */
                     40: typedef struct tagCONTAINERDOC FAR* LPCONTAINERDOC;
                     41: typedef struct tagCONTAINERLINE FAR* LPCONTAINERLINE;
                     42: 
                     43: 
                     44: // Flags to specify type of OLECREATE???FROMDATA call required
                     45: typedef enum tagOLECREATEFROMDATATYPE {
                     46:     OLECREATEFROMDATA_LINK    = 1,
                     47:     OLECREATEFROMDATA_OBJECT  = 2,
                     48:     OLECREATEFROMDATA_STATIC  = 3
                     49: } OLECREATEFROMDATATYPE;
                     50: 
                     51: /*************************************************************************
                     52: ** class CONTAINERLINE : LINE
                     53: **    The class CONTAINERLINE is a concrete subclass of the abstract base
                     54: **    class LINE. The CONTAINERLINE maintains all information about the
                     55: **    place within the CONTAINERDOC that an OLE object is embedded. This
                     56: **    object implements the following OLE 2.0 interfaces:
                     57: **                     IOleClientSite
                     58: **                     IAdviseSink
                     59: **    In the CntrOutl client app either CONTAINERLINE objects or TEXTLINE
                     60: **    objects can be created. The CONTAINERLINE class inherits all fields
                     61: **    from the LINE class. This inheritance is achieved by including a
                     62: **    member variable of type LINE as the first field in the CONTAINERLINE
                     63: **    structure. Thus a pointer to a CONTAINERLINE object can be cast to be
                     64: **    a pointer to a LINE object.
                     65: **    Each CONTAINERLINE object that is created in added to the LINELIST of
                     66: **    the associated OUTLINEDOC document.
                     67: *************************************************************************/
                     68: 
                     69: typedef struct tagCONTAINERLINE {
                     70:        LINE                    m_Line;                 // ContainerLine inherits fields of Line
                     71:        ULONG                   m_cRef;                 // total ref count for line
                     72:        char                    m_szStgName[CWCSTORAGENAME]; // stg name w/i cntr stg
                     73:     BOOL                       m_fObjWinOpen;  // is obj window open? if so, shade obj.
                     74:     BOOL                       m_fMonikerAssigned;     // has a moniker been assigned to obj
                     75:        DWORD                   m_dwDrawAspect; // current display aspect for obj
                     76:                                                                        //              (either DVASPECT_CONTENT or 
                     77:                                                                        //              DVASPECT_ICON)
                     78:     BOOL                       m_fDoGetExtent; // indicates extents may have changed
                     79:        SIZEL                   m_sizeInHimetric; // extents of obj in himetric units
                     80:        LPSTORAGE               m_lpStg;                // open pstg when obj is loaded
                     81:        LPOLEOBJECT             m_lpOleObj;             // ptr to IOleObject* when obj is loaded
                     82:        LPVIEWOBJECT    m_lpViewObj;    // ptr to IViewObject* when obj is loaded
                     83:        LPPERSISTSTORAGE m_lpPersistStg;// ptr to IPersistStorage* when obj loaded
                     84:        LPCONTAINERDOC  m_lpDoc;                // ptr to associated client doc
                     85:        BOOL                    m_fIsLink;                              // is it a linked object?       
                     86:        BOOL                    m_fLinkUnavailable;             // is the link unavailable?
                     87:     LPSTR           m_lpszShortType;// short type name of OLE object needed
                     88:                                     //  to make the Edit.Object.Verb menu
                     89: #if defined( INPLACE_CNTR )
                     90:        BOOL                    m_fIpActive;    // is object in-place active (undo valid)
                     91:        BOOL                    m_fUIActive;    // is object UIActive
                     92:        BOOL                    m_fIpVisible;   // is object's in-place window visible
                     93:        BOOL                    m_fInsideOutObj;// is obj inside-out (visible when loaded)
                     94:     LPOLEINPLACEOBJECT m_lpOleIPObj; // IOleInPlaceObject* of in-place obj
                     95:        BOOL                    m_fIpChangesUndoable;   // can in-place object do undo
                     96:        BOOL                    m_fIpServerRunning;     // is in-place server running
                     97:        HWND                    m_hWndIpObject; 
                     98:        
                     99:        struct COleInPlaceSiteImpl {
                    100:                IOleInPlaceSiteVtbl FAR* lpVtbl;
                    101:                LPCONTAINERLINE                 lpContainerLine;
                    102:                int                                             cRef;   // interface specific ref count.
                    103:        } m_OleInPlaceSite;
                    104: #endif // INPLACE_CNTR
                    105: 
                    106:        struct CUnknownImpl {
                    107:                IUnknownVtbl FAR*               lpVtbl;
                    108:                LPCONTAINERLINE                 lpContainerLine;
                    109:                int                                             cRef;   // interface specific ref count.
                    110:        } m_Unknown;
                    111: 
                    112:        struct COleClientSiteImpl {
                    113:                IOleClientSiteVtbl FAR* lpVtbl;
                    114:                LPCONTAINERLINE                 lpContainerLine;
                    115:                int                                     cRef;   // interface specific ref count.
                    116:        } m_OleClientSite;
                    117: 
                    118:        struct CAdviseSinkImpl {
                    119:                IAdviseSinkVtbl FAR*    lpVtbl;
                    120:                LPCONTAINERLINE                 lpContainerLine;
                    121:                int                                             cRef;   // interface specific ref count.
                    122:        } m_AdviseSink;
                    123: 
                    124: } CONTAINERLINE;
                    125: 
                    126: 
                    127: /* ContainerLine methods (functions) */
                    128: void ContainerLine_Init(LPCONTAINERLINE lpContainerLine, int nTab, HDC hDC);
                    129: LPCONTAINERLINE ContainerLine_Create(
                    130:                DWORD                                   dwOleCreateType,
                    131:                HDC                                             hDC, 
                    132:                UINT                                    nTab, 
                    133:                LPCONTAINERDOC                  lpContainerDoc, 
                    134:                LPCLSID                                 lpclsid, 
                    135:                LPSTR                                   lpszFileName,
                    136:                BOOL                                    fDisplayAsIcon,
                    137:                HGLOBAL                                 hMetaPict,
                    138:                LPSTR                                   lpszStgName
                    139: );
                    140: LPCONTAINERLINE ContainerLine_CreateFromData(
                    141:                HDC                                             hDC, 
                    142:                UINT                                    nTab, 
                    143:                LPCONTAINERDOC                  lpContainerDoc, 
                    144:                LPDATAOBJECT                    lpSrcDataObj,
                    145:         DWORD                   dwCreateType,
                    146:         CLIPFORMAT              cfFormat,
                    147:                BOOL                                    fDisplayAsIcon,
                    148:                HGLOBAL                                 hMetaPict,
                    149:                LPSTR                                   lpszStgName
                    150: );
                    151: ULONG ContainerLine_AddRef(LPCONTAINERLINE lpContainerLine);
                    152: ULONG ContainerLine_Release(LPCONTAINERLINE lpContainerLine);
                    153: HRESULT ContainerLine_QueryInterface(
                    154:                LPCONTAINERLINE                 lpContainerLine, 
                    155:                REFIID                                  riid, 
                    156:                LPVOID FAR*                             lplpUnk
                    157: );
                    158: BOOL ContainerLine_CloseOleObject(LPCONTAINERLINE lpContainerLine);
                    159: void ContainerLine_UnloadOleObject(LPCONTAINERLINE lpContainerLine);
                    160: void ContainerDoc_UpdateExtentOfAllOleObjects(LPCONTAINERDOC lpContainerDoc);
                    161: void ContainerLine_Delete(LPCONTAINERLINE lpContainerLine);
                    162: void ContainerLine_Destroy(LPCONTAINERLINE lpContainerLine);
                    163: BOOL ContainerLine_CopyToDoc(
                    164:                LPCONTAINERLINE                 lpSrcLine, 
                    165:                LPOUTLINEDOC                    lpDestDoc, 
                    166:                int                                             nIndex
                    167: );
                    168: BOOL ContainerLine_LoadOleObject(LPCONTAINERLINE lpContainerLine);
                    169: BOOL ContainerLine_UpdateExtent(
                    170:                LPCONTAINERLINE         lpContainerLine, 
                    171:                LPSIZEL                         lpsizelHim
                    172: );
                    173: BOOL ContainerLine_DoVerb(
                    174:                LPCONTAINERLINE lpContainerLine, 
                    175:                LONG iVerb, 
                    176:                BOOL fMessage,
                    177:                BOOL fAction
                    178: );
                    179: LPUNKNOWN ContainerLine_GetOleObject(
                    180:                LPCONTAINERLINE                 lpContainerLine, 
                    181:                REFIID                                  riid
                    182: );
                    183: HRESULT ContainerLine_RunOleObject(LPCONTAINERLINE lpContainerLine);
                    184: BOOL ContainerLine_IsOleLink(LPCONTAINERLINE lpContainerLine);
                    185: void ContainerLine_Draw(
                    186:                LPCONTAINERLINE                 lpContainerLine, 
                    187:                HDC                                             hDC, 
                    188:                LPRECT                                  lpRect
                    189: );
                    190: void ContainerLine_DrawSelHilight(
                    191:                LPCONTAINERLINE lpContainerLine, 
                    192:                HDC                             hDC, 
                    193:                LPRECT                  lpRect, 
                    194:                UINT                    itemAction, 
                    195:                UINT                    itemState
                    196: );
                    197: BOOL ContainerLine_Edit(LPCONTAINERLINE lpContainerLine,HWND hWndDoc,HDC hDC);
                    198: void ContainerLine_SetHeightInHimetric(LPCONTAINERLINE lpContainerLine, int nHeight);
                    199: void ContainerLine_CalcExtents(LPCONTAINERLINE lpContainerLine, LPSIZEL lpsizelOleObject);
                    200: BOOL ContainerLine_SaveToStg(
                    201:                LPCONTAINERLINE                 lpContainerLine, 
                    202:                UINT                                    uFormat, 
                    203:                LPSTORAGE                               lpSrcStg, 
                    204:                LPSTORAGE                               lpDestStg, 
                    205:                LPSTREAM                                lpLLStm, 
                    206:                BOOL                                    fRemember
                    207: );
                    208: 
                    209: HRESULT ContainerLine_SaveOleObject(
                    210:                LPCONTAINERLINE         lpContainerLine,
                    211:                LPSTORAGE                       lpStg,
                    212:                BOOL                            fSameAsLoad,
                    213:                BOOL                            fRemember,
                    214:         BOOL                fForceUpdate
                    215: );
                    216: 
                    217: LPLINE ContainerLine_LoadFromStg(
                    218:                LPSTORAGE                               lpSrcStg, 
                    219:                LPSTREAM                                lpLLStm, 
                    220:                LPOUTLINEDOC                    lpDestDoc
                    221: );
                    222: LPMONIKER ContainerLine_GetRelMoniker(
                    223:                LPCONTAINERLINE                 lpContainerLine, 
                    224:                DWORD                                   dwAssign
                    225: );
                    226: LPMONIKER ContainerLine_GetFullMoniker(
                    227:                LPCONTAINERLINE                 lpContainerLine, 
                    228:                DWORD                                   dwAssign
                    229: );
                    230: int ContainerLine_GetTextLen(LPCONTAINERLINE lpContainerLine);
                    231: void ContainerLine_GetTextData(LPCONTAINERLINE lpContainerLine,LPSTR lpszBuf);
                    232: BOOL ContainerLine_GetOutlineData(
                    233:                LPCONTAINERLINE                 lpContainerLine, 
                    234:                LPTEXTLINE                              lpBuf
                    235: );
                    236: void ContainerLine_GetOleObjectRectInPixels(
                    237:                LPCONTAINERLINE lpContainerLine, 
                    238:                LPRECT lprc
                    239: );
                    240: void ContainerLine_GetOleObjectSizeInHimetric(
                    241:                LPCONTAINERLINE lpContainerLine,
                    242:                LPSIZEL lpsizel
                    243: );
                    244: 
                    245: #if defined( INPLACE_CNTR )
                    246: void ContainerLine_UIDeactivate(LPCONTAINERLINE lpContainerLine);
                    247: void ContainerLine_InPlaceDeactivate(LPCONTAINERLINE lpContainerLine);
                    248: void ContainerLine_UpdateInPlaceObjectRects(
                    249:        LPCONTAINERLINE lpContainerLine,
                    250:        LPRECT                  lprcClipRect
                    251: );
                    252: #endif // INPLACE_CNTR
                    253: 
                    254: /* ContainerLine::IUnknown methods (functions) */
                    255: STDMETHODIMP CntrLine_Unk_QueryInterface(
                    256:                LPUNKNOWN                       lpThis, 
                    257:                REFIID                          riid, 
                    258:                LPVOID FAR*                     lplpvObj
                    259: );
                    260: STDMETHODIMP_(ULONG) CntrLine_Unk_AddRef(LPUNKNOWN lpThis);
                    261: STDMETHODIMP_(ULONG) CntrLine_Unk_Release(LPUNKNOWN lpThis);
                    262: 
                    263: /* ContainerLine::IOleClientSite methods (functions) */
                    264: STDMETHODIMP CntrLine_CliSite_QueryInterface(
                    265:                LPOLECLIENTSITE         lpThis, 
                    266:                REFIID                          riid,
                    267:                LPVOID FAR*                     lplpvObj
                    268: );
                    269: STDMETHODIMP_(ULONG) CntrLine_CliSite_AddRef(LPOLECLIENTSITE lpThis);
                    270: STDMETHODIMP_(ULONG) CntrLine_CliSite_Release(LPOLECLIENTSITE lpThis);
                    271: STDMETHODIMP CntrLine_CliSite_SaveObject(LPOLECLIENTSITE lpThis);
                    272: STDMETHODIMP CntrLine_CliSite_GetMoniker(
                    273:                LPOLECLIENTSITE         lpThis,
                    274:                DWORD                           dwAssign, 
                    275:                DWORD                           dwWhichMoniker,
                    276:                LPMONIKER FAR*          lplpmk
                    277: );
                    278: STDMETHODIMP CntrLine_CliSite_GetContainer(
                    279:                LPOLECLIENTSITE         lpThis,
                    280:                LPOLECONTAINER FAR* lplpContainer
                    281: );
                    282: STDMETHODIMP CntrLine_CliSite_ShowObject(LPOLECLIENTSITE lpThis);
                    283: STDMETHODIMP CntrLine_CliSite_OnShowWindow(LPOLECLIENTSITE lpThis,BOOL fShow);
                    284: STDMETHODIMP CntrLine_CliSite_RequestNewObjectLayout(LPOLECLIENTSITE lpThis);
                    285: 
                    286: /* ContainerLine::IAdviseSink methods (functions) */
                    287: STDMETHODIMP CntrLine_AdvSink_QueryInterface(
                    288:                LPADVISESINK            lpThis,
                    289:                REFIID                          riid, 
                    290:                LPVOID FAR*                     lplpvObj
                    291: );
                    292: STDMETHODIMP_(ULONG) CntrLine_AdvSink_AddRef(LPADVISESINK lpThis);
                    293: STDMETHODIMP_(ULONG) CntrLine_AdvSink_Release (LPADVISESINK lpThis);
                    294: STDMETHODIMP_(void) CntrLine_AdvSink_OnDataChange(
                    295:                LPADVISESINK            lpThis,
                    296:                FORMATETC FAR*          lpFormatetc, 
                    297:                STGMEDIUM FAR*          lpStgmed
                    298: );
                    299: STDMETHODIMP_(void) CntrLine_AdvSink_OnViewChange(
                    300:                LPADVISESINK            lpThis, 
                    301:                DWORD                           aspects, 
                    302:                LONG                            lindex
                    303: );
                    304: STDMETHODIMP_(void) CntrLine_AdvSink_OnRename(
                    305:                LPADVISESINK            lpThis, 
                    306:                LPMONIKER                       lpmk
                    307: );
                    308: STDMETHODIMP_(void) CntrLine_AdvSink_OnSave(LPADVISESINK lpThis);
                    309: STDMETHODIMP_(void) CntrLine_AdvSink_OnClose(LPADVISESINK lpThis);
                    310: 
                    311: #if defined( INPLACE_CNTR )
                    312: /* ContainerLine::IOleInPlaceSite methods (functions) */
                    313: 
                    314: STDMETHODIMP CntrLine_IPSite_QueryInterface(
                    315:                LPOLEINPLACESITE        lpThis, 
                    316:                REFIID                          riid,
                    317:                LPVOID FAR*                     lplpvObj
                    318: );
                    319: STDMETHODIMP_(ULONG) CntrLine_IPSite_AddRef(LPOLEINPLACESITE lpThis);
                    320: STDMETHODIMP_(ULONG) CntrLine_IPSite_Release(LPOLEINPLACESITE lpThis);
                    321: STDMETHODIMP CntrLine_IPSite_GetWindow(        
                    322:                LPOLEINPLACESITE        lpThis, 
                    323:                HWND FAR*                       lphwnd
                    324: );
                    325: STDMETHODIMP CntrLine_IPSite_ContextSensitiveHelp(
                    326:        LPOLEINPLACESITE        lpThis, 
                    327:        BOOL                            fEnterMode
                    328: );
                    329: STDMETHODIMP CntrLine_IPSite_CanInPlaceActivate(LPOLEINPLACESITE lpThis);
                    330: STDMETHODIMP CntrLine_IPSite_OnInPlaceActivate(LPOLEINPLACESITE lpThis);
                    331: STDMETHODIMP CntrLine_IPSite_OnUIActivate (LPOLEINPLACESITE lpThis);
                    332: STDMETHODIMP CntrLine_IPSite_GetWindowContext(
                    333:     LPOLEINPLACESITE            lpThis,
                    334:     LPOLEINPLACEFRAME FAR*      lplpFrame,
                    335:     LPOLEINPLACEUIWINDOW FAR*   lplpDoc,
                    336:     LPRECT                      lprcPosRect, 
                    337:     LPRECT                      lprcClipRect, 
                    338:     LPOLEINPLACEFRAMEINFO       lpFrameInfo
                    339: );
                    340: STDMETHODIMP CntrLine_IPSite_Scroll(
                    341:        LPOLEINPLACESITE        lpThis,
                    342:        SIZE                            scrollExtent
                    343: );
                    344: STDMETHODIMP CntrLine_IPSite_OnUIDeactivate(
                    345:        LPOLEINPLACESITE        lpThis,
                    346:        BOOL                            fUndoable
                    347: );
                    348: STDMETHODIMP CntrLine_IPSite_OnInPlaceDeactivate(LPOLEINPLACESITE lpThis);
                    349: STDMETHODIMP CntrLine_IPSite_DiscardUndoState(LPOLEINPLACESITE lpThis);
                    350: STDMETHODIMP CntrLine_IPSite_DeactivateAndUndo(LPOLEINPLACESITE lpThis);
                    351: STDMETHODIMP CntrLine_IPSite_OnPosRectChange(
                    352:        LPOLEINPLACESITE        lpThis,
                    353:        LPCRECT                         lprcPosRect
                    354: );
                    355: #endif // INPLACE_CNTR
                    356: 
                    357: 
                    358: /* struct definition for persistant data storage of ContainerLine */
                    359: 
                    360: typedef struct tagCONTAINERLINERECORD {
                    361:        char    m_szStgName[CWCSTORAGENAME]; // stg name w/i cntr stg
                    362:     BOOL       m_fMonikerAssigned;                      // has a moniker been assigned to obj
                    363:        DWORD   m_dwDrawAspect;                          // current display aspect for obj
                    364:                                                                                 //             (either DVASPECT_CONTENT or 
                    365:                                                                                 //             DVASPECT_ICON)
                    366:        SIZEL   m_sizeInHimetric;                        // extents of obj in himetric units
                    367:        BOOL    m_fIsLink;                                       // is it a linked object?
                    368: } CONTAINERLINERECORD, FAR* LPCONTAINERLINERECORD;
                    369: 
                    370: 
                    371: /*************************************************************************
                    372: ** class CONTAINERDOC : OUTLINEDOC
                    373: **    CONTAINERDOC is an extention to the base OUTLINEDOC object (structure)
                    374: **    that adds OLE 2.0 Container functionality. There is one instance of
                    375: **    CONTAINERDOC object created per document open in the app. The SDI
                    376: **    version of the app supports one CONTAINERDOC at a time. The MDI
                    377: **    version of the app can manage multiple documents at one time.
                    378: **    The CONTAINERDOC class inherits all fields
                    379: **    from the OUTLINEDOC class. This inheritance is achieved by including a
                    380: **    member variable of type OUTLINEDOC as the first field in the
                    381: **    CONTAINERDOC structure. Thus a pointer to a CONTAINERDOC object
                    382: **    can be cast to be a pointer to a OUTLINEDOC object.
                    383: *************************************************************************/
                    384: 
                    385: typedef struct tagCONTAINERDOC {
                    386:        OLEDOC          m_OleDoc;               // ContainerDoc inherits all fields of OleDoc
                    387:        ULONG           m_nNextObjNo;   // next available obj no. for stg name
                    388:        LPSTORAGE       m_lpStg;                // ContainerDoc must keep its stg open
                    389:        LPSTORAGE       m_lpNewStg;             // holds new pStg when SaveAs is pending
                    390:        BOOL            m_fEmbeddedObjectAvail; // is single OLE embed copied to doc
                    391:        CLSID           m_clsidOleObjCopied;    // if obj copied, CLSID of obj
                    392:     DWORD       m_dwAspectOleObjCopied; // if obj copied, draw aspect of obj
                    393:        LPCONTAINERLINE m_lpSrcContainerLine;  // src line if doc created for copy
                    394:        BOOL            m_fShowObject;                  // show object flag
                    395: 
                    396: #if defined( INPLACE_CNTR )
                    397:        LPCONTAINERLINE m_lpLastIpActiveLine;   // last in-place active line
                    398:        LPCONTAINERLINE m_lpLastUIActiveLine;   // last UIActive line
                    399:        HWND                    m_hwndUIActiveObj;              // HWND of UIActive obj.
                    400:        BOOL                    m_fAddMyUI;                             // if adding tools/menu postponed
                    401:        int                             m_cIPActiveObjects;
                    402: 
                    403: #if defined( INPLACE_CNTRSVR )
                    404:        LPOLEINPLACEFRAME m_lpTopIPFrame;               // ptr to Top In-place frame.
                    405:        LPOLEINPLACEFRAME m_lpTopIPDoc;                 // ptr to Top In-place Doc window.
                    406:        HMENU                     m_hSharedMenu;                // combined obj/cntr menu
                    407:                                                                                        // NULL if we are top container
                    408:        HOLEMENU                m_hOleMenu;                             // returned by OleCreateMenuDesc.
                    409:                                                                                        // NULL if we are top container
                    410: #endif // INPLACE_CNTRSVR
                    411: #endif // INPLACE_CNTR
                    412: 
                    413:     struct CDocOleUILinkContainerImpl {
                    414:         IOleUILinkContainerVtbl FAR*  lpVtbl;
                    415:         LPCONTAINERDOC                lpContainerDoc;
                    416:         int                           cRef;   // interface specific ref count.
                    417:     } m_OleUILinkContainer;
                    418: 
                    419: } CONTAINERDOC;
                    420: 
                    421: /* ContainerDoc methods (functions) */
                    422: BOOL ContainerDoc_Init(LPCONTAINERDOC lpContainerDoc, BOOL fDataTransferDoc);
                    423: LPCONTAINERLINE ContainerDoc_GetNextLink(
                    424:                LPCONTAINERDOC lpContainerDoc, 
                    425:                LPCONTAINERLINE lpContainerLine
                    426: );
                    427: void ContainerDoc_UpdateLinks(LPCONTAINERDOC lpContainerDoc);
                    428: void ContainerDoc_SetShowObjectFlag(LPCONTAINERDOC lpContainerDoc, BOOL fShow);
                    429: BOOL ContainerDoc_GetShowObjectFlag(LPCONTAINERDOC lpContainerDoc);
                    430: void ContainerDoc_InsertOleObjectCommand(LPCONTAINERDOC lpContainerDoc);
                    431: void ContainerDoc_EditLinksCommand(LPCONTAINERDOC lpContainerDoc);
                    432: void ContainerDoc_PasteLinkCommand(LPCONTAINERDOC lpContainerDoc);
                    433: void ContainerDoc_ConvertCommand(
                    434:         LPCONTAINERDOC      lpContainerDoc, 
                    435:         BOOL                fServerNotRegistered
                    436: );
                    437: BOOL ContainerDoc_PasteFormatFromData(
                    438:                LPCONTAINERDOC                  lpContainerDoc, 
                    439:                CLIPFORMAT                              cfFormat, 
                    440:                LPDATAOBJECT                    lpSrcDataObj, 
                    441:                BOOL                                    fLocalDataObj, 
                    442:                BOOL                                    fLink,
                    443:                BOOL                                    fDisplayAsIcon,
                    444:                HGLOBAL                                 hMetaPict
                    445: );
                    446: int ContainerDoc_PasteCntrOutlData(
                    447:                LPCONTAINERDOC                  lpDestContainerDoc, 
                    448:                LPSTORAGE                               lpSrcStg, 
                    449:                int                                             nStartIndex
                    450: );
                    451: BOOL ContainerDoc_QueryPasteFromData(
                    452:                LPCONTAINERDOC                  lpContainerDoc, 
                    453:                LPDATAOBJECT                    lpSrcDataObj,
                    454:                BOOL                                    fLink
                    455: );
                    456: int ContainerDoc_PasteOleObject(
                    457:                LPCONTAINERDOC                  lpContainerDoc, 
                    458:                LPDATAOBJECT                    lpSrcDataObj,
                    459:         DWORD                   dwCreateType,
                    460:         CLIPFORMAT              cfFormat,
                    461:         int                     nIndex,
                    462:                BOOL                                    fDisplayAsIcon,
                    463:                HGLOBAL                                 hMetaPict
                    464: );
                    465: BOOL ContainerDoc_CloseAllOleObjects(LPCONTAINERDOC lpContainerDoc);
                    466: void ContainerDoc_UnloadAllOleObjectsOfClass(
                    467:         LPCONTAINERDOC      lpContainerDoc,
                    468:         REFCLSID            rClsid
                    469: );
                    470: void ContainerDoc_InformAllOleObjectsDocRenamed(
                    471:                LPCONTAINERDOC                  lpContainerDoc, 
                    472:                LPMONIKER                               lpmkDoc
                    473: );
                    474: BOOL ContainerDoc_SaveToFile(
                    475:                LPCONTAINERDOC                  lpContainerDoc, 
                    476:                LPCSTR                                  lpszFileName, 
                    477:                UINT                                    uFormat,
                    478:                BOOL                                    fRemember
                    479: );
                    480: void ContainerDoc_ContainerLineDoVerbCommand(
                    481:                LPCONTAINERDOC                  lpContainerDoc, 
                    482:                LONG                                    iVerb
                    483: );
                    484: void ContainerDoc_GetNextStgName(
                    485:                LPCONTAINERDOC                  lpContainerDoc, 
                    486:                LPSTR                                   lpszStgName, 
                    487:                int                                             nLen
                    488: );
                    489: BOOL ContainerDoc_IsStgNameUsed(
                    490:                LPCONTAINERDOC                  lpContainerDoc, 
                    491:                LPSTR                                   lpszStgName
                    492: );
                    493: LPSTORAGE ContainerDoc_GetStg(LPCONTAINERDOC lpContainerDoc);
                    494: HRESULT ContainerDoc_GetObject(
                    495:                LPCONTAINERDOC                  lpContainerDoc, 
                    496:                LPSTR                                   lpszItem, 
                    497:         DWORD                   dwSpeedNeeded,
                    498:                REFIID                                  riid,   
                    499:                LPVOID FAR*                             lplpvObject
                    500: );
                    501: HRESULT ContainerDoc_GetObjectStorage(
                    502:                LPCONTAINERDOC                  lpContainerDoc, 
                    503:                LPSTR                                   lpszItem, 
                    504:                LPSTORAGE FAR*                  lplpStg
                    505: );
                    506: HRESULT ContainerDoc_IsRunning(LPCONTAINERDOC  lpContainerDoc, LPSTR lpszItem);
                    507: LPUNKNOWN ContainerDoc_GetSingleOleObject(
                    508:                LPCONTAINERDOC                  lpContainerDoc, 
                    509:         REFIID                  riid,
                    510:                LPCONTAINERLINE FAR*    lplpContainerLine
                    511: );
                    512: BOOL ContainerDoc_IsSelAnOleObject(
                    513:         LPCONTAINERDOC          lpContainerDoc,
                    514:         REFIID                  riid,
                    515:         LPUNKNOWN FAR*          lplpvObj,
                    516:         int FAR*                lpnIndex,
                    517:         LPCONTAINERLINE FAR*    lplpContainerLine
                    518: );
                    519: HRESULT ContainerDoc_GetData (
                    520:                LPCONTAINERDOC                  lpContainerDoc, 
                    521:                LPFORMATETC                             lpformatetc, 
                    522:                LPSTGMEDIUM                             lpMedium
                    523: );
                    524: HRESULT ContainerDoc_GetDataHere (
                    525:                LPCONTAINERDOC                  lpContainerDoc, 
                    526:                LPFORMATETC                             lpformatetc, 
                    527:                LPSTGMEDIUM                             lpMedium
                    528: );
                    529: HRESULT ContainerDoc_QueryGetData (
                    530:                LPCONTAINERDOC                  lpContainerDoc, 
                    531:                LPFORMATETC                             lpformatetc
                    532: );
                    533: HRESULT ContainerDoc_SetData (
                    534:                LPCONTAINERDOC                  lpContainerDoc, 
                    535:                LPFORMATETC                             lpformatetc, 
                    536:                LPSTGMEDIUM                             lpmedium, 
                    537:                BOOL                                    fRelease
                    538: );
                    539: HRESULT ContainerDoc_EnumFormatEtc(
                    540:                LPCONTAINERDOC                  lpContainerDoc, 
                    541:                DWORD                                   dwDirection, 
                    542:                LPENUMFORMATETC FAR*    lplpenumFormatEtc
                    543: );
                    544: BOOL ContainerDoc_SetupDocGetFmts(
                    545:                LPCONTAINERDOC                  lpContainerDoc, 
                    546:                LPCONTAINERLINE                 lpContainerLine
                    547: );
                    548: 
                    549: #if defined( INPLACE_CNTR )            
                    550: 
                    551: void ContainerDoc_ShutDownLastInPlaceServerIfNotNeeded(
                    552:                LPCONTAINERDOC                  lpContainerDoc, 
                    553:                LPCONTAINERLINE                 lpNextActiveLine
                    554: );
                    555: BOOL ContainerDoc_IsUIDeactivateNeeded(
                    556:                LPCONTAINERDOC  lpContainerDoc,
                    557:                POINT                   pt
                    558: );
                    559: HWND ContainerDoc_GetUIActiveWindow(LPCONTAINERDOC lpContainerDoc);
                    560: void ContainerDoc_UpdateInPlaceObjectRects(LPCONTAINERDOC lpContainerDoc, int nIndex);
                    561: void ContainerDoc_GetClipRect(
                    562:                LPCONTAINERDOC          lpContainerDoc, 
                    563:                LPRECT                          lprcClipRect
                    564: );
                    565: void ContainerDoc_FrameWindowResized(LPCONTAINERDOC lpContainerDoc);
                    566: LPOLEINPLACEFRAME ContainerDoc_GetTopInPlaceFrame(
                    567:                LPCONTAINERDOC          lpContainerDoc
                    568: );
                    569: void ContainerDoc_GetSharedMenuHandles(
                    570:                LPCONTAINERDOC  lpContainerDoc,
                    571:                HMENU FAR*              lphSharedMenu,
                    572:                HOLEMENU FAR*   lphOleMenu
                    573: );
                    574: void ContainerDoc_RemoveFrameLevelTools(LPCONTAINERDOC lpContainerDoc);
                    575: void ContainerDoc_AddFrameLevelUI(LPCONTAINERDOC lpContainerDoc);
                    576: void ContainerDoc_AddFrameLevelTools(LPCONTAINERDOC lpContainerDoc);
                    577: 
                    578: #if defined( INPLACE_CNTRSVR ) || defined( INPLACE_MDICNTR )
                    579: 
                    580: LPOLEINPLACEUIWINDOW ContainerDoc_GetTopInPlaceDoc(
                    581:                LPCONTAINERDOC          lpContainerDoc
                    582: );
                    583: void ContainerDoc_RemoveDocLevelTools(LPCONTAINERDOC lpContainerDoc);
                    584: void ContainerDoc_AddDocLevelTools(LPCONTAINERDOC lpContainerDoc);
                    585: 
                    586: #endif // INPLACE_CNTRSVR || INPLACE_MDICNTR
                    587: #endif // INPLACE_CNTR
                    588: 
                    589: /* ContainerDoc::IOleUILinkContainer methods (functions) */
                    590: STDMETHODIMP CntrDoc_LinkCont_QueryInterface(
                    591:         LPOLEUILINKCONTAINER   lpThis,
                    592:         REFIID                                 riid,
                    593:         LPVOID FAR*                            lplpvObj
                    594: );
                    595: STDMETHODIMP_(ULONG) CntrDoc_LinkCont_AddRef(LPOLEUILINKCONTAINER lpThis);
                    596: STDMETHODIMP_(ULONG) CntrDoc_LinkCont_Release(LPOLEUILINKCONTAINER lpThis);
                    597: STDMETHODIMP_(DWORD) CntrDoc_LinkCont_GetNextLink(
                    598:         LPOLEUILINKCONTAINER   lpThis, 
                    599:                DWORD                                   dwLink
                    600: );
                    601: STDMETHODIMP CntrDoc_LinkCont_SetLinkUpdateOptions(
                    602:         LPOLEUILINKCONTAINER   lpThis, 
                    603:                DWORD                                   dwLink,
                    604:                DWORD                                   dwUpdateOpt
                    605: );
                    606: STDMETHODIMP CntrDoc_LinkCont_GetLinkUpdateOptions(
                    607:         LPOLEUILINKCONTAINER   lpThis, 
                    608:                DWORD                                   dwLink,
                    609:                DWORD FAR*                              dwUpdateOpt
                    610: );
                    611: 
                    612: STDMETHODIMP CntrDoc_LinkCont_SetLinkSource(
                    613:         LPOLEUILINKCONTAINER   lpThis, 
                    614:                DWORD                                   dwLink,
                    615:         LPSTR                                  lpszDisplayName,
                    616:                ULONG                                   clenFileName,           
                    617:         ULONG FAR*                             lpchEaten, 
                    618:                BOOL                                    fValidateSource
                    619: );
                    620: STDMETHODIMP CntrDoc_LinkCont_GetLinkSource(
                    621:         LPOLEUILINKCONTAINER   lpThis, 
                    622:                DWORD                                   dwLink,
                    623:         LPSTR FAR*                             lplpszDisplayName,
                    624:                ULONG FAR*                              lplenFileName, 
                    625:                LPSTR FAR*                              lplpszFullLinkType, 
                    626:                LPSTR FAR*                              lplpszShortLinkType, 
                    627:                BOOL FAR*                               lpfSourceAvailable,
                    628:                BOOL FAR*                               lpfIsSelected           
                    629: );
                    630: STDMETHODIMP CntrDoc_LinkCont_OpenLinkSource(
                    631:         LPOLEUILINKCONTAINER   lpThis, 
                    632:                DWORD                                   dwLink
                    633: );
                    634: STDMETHODIMP CntrDoc_LinkCont_UpdateLink(
                    635:         LPOLEUILINKCONTAINER   lpThis, 
                    636:                DWORD                                   dwLink,
                    637:                BOOL                                    fErrorMessage,
                    638:                BOOL                                    fErrorAction
                    639: );
                    640: STDMETHODIMP CntrDoc_LinkCont_CancelLink(
                    641:         LPOLEUILINKCONTAINER   lpThis, 
                    642:                DWORD                                   dwLink
                    643: );
                    644: 
                    645: 
                    646: 
                    647: /*************************************************************************
                    648: ** class CONTAINERAPP : OLEAPP
                    649: **    CONTAINERAPP is an extention to the base OLEAPP object (structure)
                    650: **    that adds special Container functionality. There is one instance of
                    651: **    CONTAINERApp object created per running application instance. This
                    652: **    object holds many fields that could otherwise be organized as
                    653: **    global variables. The CONTAINERAPP class inherits all fields
                    654: **    from the OLEAPP class. This inheritance is achieved by including a
                    655: **    member variable of type OLEAPP as the first field in the CONTAINERAPP
                    656: **    structure. OLEAPP inherits from OUTLINEAPP. This inheritance is
                    657: **    achieved in the same manner. Thus a pointer to a CONTAINERAPP object
                    658: **    can be cast to be a pointer to an OLEAPP or an OUTLINEAPP object
                    659: *************************************************************************/
                    660: 
                    661: /* Forward definition of types */
                    662: typedef struct tagCONTAINERAPP FAR* LPCONTAINERAPP;
                    663: 
                    664: typedef struct tagCONTAINERAPP {
                    665:        OLEAPP  m_OleApp;               // ContainerApp inherits all fields of OleApp
                    666:        UINT    m_cfCntrOutl;   // clipboard format for CntrOutl (client ver) data
                    667:        int             m_nSingleObjGetFmts; // no. formats avail when single obj copied
                    668:        FORMATETC m_arrSingleObjGetFmts[MAXNOFMTS];  
                    669:                                         // array of FormatEtc's available via
                    670:                                         // IDataObject::GetData when a single
                    671:                                         // OLE object is copied.
                    672: 
                    673: #if defined( INPLACE_CNTR )
                    674:        HACCEL  m_hAccelIPCntr; // accelerators for container's workspace commands
                    675:        HMENU   m_hMenuFile;    // handle to File menu of container app
                    676:        HMENU   m_hMenuView;    // handle to View menu of container app
                    677:        HMENU   m_hMenuDebug;   // handle to Debug menu of container app
                    678:        LPOLEINPLACEACTIVEOBJECT m_lpIPActiveObj; // ptr to inplace active OLE obj
                    679:        BOOL    m_fPendingUIDeactivate; // should app UIDeactivate on LBUTTONUP
                    680: #ifdef _DEBUG
                    681:        BOOL    m_fOutSideIn;
                    682: #endif
                    683:                
                    684:        struct COleInPlaceFrameImpl {
                    685:                IOleInPlaceFrameVtbl FAR* lpVtbl;
                    686:                LPCONTAINERAPP                  lpContainerApp;
                    687:                int                                             cRef;   // interface specific ref count.
                    688:        } m_OleInPlaceFrame;
                    689: 
                    690: #endif // INPLACE_CNTR
                    691: 
                    692: } CONTAINERAPP;
                    693: 
                    694: /* ContainerApp methods (functions) */
                    695: BOOL ContainerApp_InitInstance(
                    696:                LPCONTAINERAPP                  lpContainerApp, 
                    697:                HINSTANCE                               hInst, 
                    698:                int                                     nCmdShow
                    699: );
                    700: BOOL ContainerApp_InitVtbls(LPCONTAINERAPP lpApp);
                    701: 
                    702: #if defined( INPLACE_CNTR )
                    703: 
                    704: /* ContainerApp::IOleInPlaceFrame methods (functions) */
                    705: 
                    706: STDMETHODIMP CntrApp_IPFrame_QueryInterface(
                    707:                LPOLEINPLACEFRAME       lpThis, 
                    708:                REFIID                          riid,
                    709:                LPVOID FAR*                     lplpvObj
                    710: );
                    711: STDMETHODIMP_(ULONG) CntrApp_IPFrame_AddRef(LPOLEINPLACEFRAME lpThis);
                    712: STDMETHODIMP_(ULONG) CntrApp_IPFrame_Release(LPOLEINPLACEFRAME lpThis);
                    713: STDMETHODIMP CntrApp_IPFrame_GetWindow(
                    714:        LPOLEINPLACEFRAME       lpThis,         
                    715:        HWND FAR*                       lphwnd
                    716: );
                    717: STDMETHODIMP CntrApp_IPFrame_ContextSensitiveHelp(
                    718:        LPOLEINPLACEFRAME       lpThis, 
                    719:        BOOL                            fEnterMode
                    720: );
                    721: STDMETHODIMP CntrApp_IPFrame_GetBorder(
                    722:        LPOLEINPLACEFRAME       lpThis, 
                    723:        LPRECT                          lprectBorder
                    724: );
                    725: STDMETHODIMP CntrApp_IPFrame_RequestBorderSpace(
                    726:        LPOLEINPLACEFRAME       lpThis, 
                    727:        LPCBORDERWIDTHS         lpWidths
                    728: );
                    729: STDMETHODIMP CntrApp_IPFrame_SetBorderSpace(
                    730:        LPOLEINPLACEFRAME       lpThis, 
                    731:        LPCBORDERWIDTHS         lpWidths
                    732: );
                    733: STDMETHODIMP CntrApp_IPFrame_SetActiveObject(
                    734:        LPOLEINPLACEFRAME                       lpThis, 
                    735:        LPOLEINPLACEACTIVEOBJECT        lpActiveObject, 
                    736:        LPCSTR                                          lpszObjName
                    737: );
                    738: STDMETHODIMP CntrApp_IPFrame_InsertMenus(
                    739:        LPOLEINPLACEFRAME               lpThis,  
                    740:        HMENU                                   hmenu, 
                    741:        LPOLEMENUGROUPWIDTHS    lpMenuWidths
                    742: );
                    743: STDMETHODIMP CntrApp_IPFrame_SetMenu(
                    744:        LPOLEINPLACEFRAME       lpThis,   
                    745:        HMENU                           hmenuShared, 
                    746:        HOLEMENU                        holemenu, 
                    747:        HWND                            hwndActiveObject
                    748: );
                    749: STDMETHODIMP CntrApp_IPFrame_RemoveMenus(
                    750:        LPOLEINPLACEFRAME       lpThis,  
                    751:        HMENU                           hmenu
                    752: );
                    753: STDMETHODIMP CntrApp_IPFrame_SetStatusText(
                    754:        LPOLEINPLACEFRAME       lpThis,  
                    755:        LPCSTR                          lpszStatusText
                    756: );
                    757: STDMETHODIMP CntrApp_IPFrame_EnableModeless(
                    758:        LPOLEINPLACEFRAME       lpThis,  
                    759:        BOOL                            fEnable
                    760: );
                    761: STDMETHODIMP CntrApp_IPFrame_TranslateAccelerator(
                    762:        LPOLEINPLACEFRAME       lpThis,  
                    763:        LPMSG                           lpmsg, 
                    764:        WORD                            wID
                    765: );
                    766: 
                    767: #endif // INPLACE_CNTR
                    768: 
                    769: 
                    770: void ProcessError(HRESULT hrErr, LPCONTAINERLINE lpContainerLine, BOOL fAction);
                    771: 
                    772: 
                    773: #endif // _CNTROUTL_H_

unix.superglobalmegacorp.com

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