856 lines
31 KiB
C
856 lines
31 KiB
C
/*************************************************************************
|
|
**
|
|
** OLE 2.0 Container Sample Code
|
|
**
|
|
** cntroutl.h
|
|
**
|
|
** This file contains file contains data structure defintions,
|
|
** function prototypes, constants, etc. used by the OLE 2.0 container
|
|
** app version of the Outline series of sample applications:
|
|
** Outline -- base version of the app (without OLE functionality)
|
|
** SvrOutl -- OLE 2.0 Server sample app
|
|
** CntrOutl -- OLE 2.0 Containter (Container) sample app
|
|
**
|
|
** (c) Copyright Microsoft Corp. 1992 - 1993 All Rights Reserved
|
|
**
|
|
*************************************************************************/
|
|
|
|
#if !defined( _CNTROUTL_H_ )
|
|
#define _CNTROUTL_H_
|
|
|
|
#ifndef RC_INVOKED
|
|
#pragma message ("INCLUDING CNTROUTL.H from " __FILE__)
|
|
#endif /* RC_INVOKED */
|
|
|
|
#include "oleoutl.h"
|
|
#include "cntrrc.h"
|
|
|
|
// REVIEW: should load from string resource
|
|
#define DEFOBJNAMEPREFIX "Obj" // Prefix for auto-generated stg names
|
|
#define DEFOBJWIDTH 5000 // default size for embedded obj.
|
|
#define DEFOBJHEIGHT 5000 // default size for embedded obj.
|
|
#define UNKNOWN_OLEOBJ_TYPE "Unknown OLE Object Type"
|
|
#define szOLEOBJECT "Object"
|
|
#define szOLELINK "Link"
|
|
|
|
#define CONTAINERDOCFORMAT "CntrOutl" // CF_CntrOutl format name
|
|
|
|
/* Forward definition of types */
|
|
typedef struct tagCONTAINERDOC FAR* LPCONTAINERDOC;
|
|
typedef struct tagCONTAINERLINE FAR* LPCONTAINERLINE;
|
|
|
|
|
|
// Flags to specify type of OLECREATE???FROMDATA call required
|
|
typedef enum tagOLECREATEFROMDATATYPE {
|
|
OLECREATEFROMDATA_LINK = 1,
|
|
OLECREATEFROMDATA_OBJECT = 2,
|
|
OLECREATEFROMDATA_STATIC = 3
|
|
} OLECREATEFROMDATATYPE;
|
|
|
|
/*************************************************************************
|
|
** class CONTAINERLINE : LINE
|
|
** The class CONTAINERLINE is a concrete subclass of the abstract base
|
|
** class LINE. The CONTAINERLINE maintains all information about the
|
|
** place within the CONTAINERDOC that an OLE object is embedded. This
|
|
** object implements the following OLE 2.0 interfaces:
|
|
** IOleClientSite
|
|
** IAdviseSink
|
|
** In the CntrOutl client app either CONTAINERLINE objects or TEXTLINE
|
|
** objects can be created. The CONTAINERLINE class inherits all fields
|
|
** from the LINE class. This inheritance is achieved by including a
|
|
** member variable of type LINE as the first field in the CONTAINERLINE
|
|
** structure. Thus a pointer to a CONTAINERLINE object can be cast to be
|
|
** a pointer to a LINE object.
|
|
** Each CONTAINERLINE object that is created in added to the LINELIST of
|
|
** the associated OUTLINEDOC document.
|
|
*************************************************************************/
|
|
|
|
typedef struct tagCONTAINERLINE {
|
|
LINE m_Line; // ContainerLine inherits fields of Line
|
|
ULONG m_cRef; // total ref count for line
|
|
char m_szStgName[CWCSTORAGENAME]; // stg name w/i cntr stg
|
|
BOOL m_fObjWinOpen; // is obj window open? if so, shade obj.
|
|
BOOL m_fMonikerAssigned; // has a moniker been assigned to obj
|
|
DWORD m_dwDrawAspect; // current display aspect for obj
|
|
// (either DVASPECT_CONTENT or
|
|
// DVASPECT_ICON)
|
|
BOOL m_fGuardObj; // Guard against re-entrancy while
|
|
// loading or creating an OLE object
|
|
BOOL m_fDoGetExtent; // indicates extents may have changed
|
|
BOOL m_fDoSetExtent; // obj was resized when not running
|
|
// IOO::SetExtent needed on next run
|
|
SIZEL m_sizeInHimetric; // extents of obj in himetric units
|
|
LPSTORAGE m_lpStg; // open pstg when obj is loaded
|
|
LPCONTAINERDOC m_lpDoc; // ptr to associated client doc
|
|
LPOLEOBJECT m_lpOleObj; // ptr to IOleObject* when obj is loaded
|
|
LPVIEWOBJECT2 m_lpViewObj2; // ptr to IViewObject2* when obj is loaded
|
|
LPPERSISTSTORAGE m_lpPersistStg;// ptr to IPersistStorage* when obj loaded
|
|
LPOLELINK m_lpOleLink; // ptr to IOleLink* if link is loaded
|
|
DWORD m_dwLinkType; // is it a linked object?
|
|
// 0 -- NOT a link
|
|
// OLEUPDATE_ALWAYS (1) -- auto link
|
|
// OLEUPDATE_ONCALL (3) -- man. link
|
|
BOOL m_fLinkUnavailable; // is the link unavailable?
|
|
LPSTR m_lpszShortType;// short type name of OLE object needed
|
|
// to make the Edit.Object.Verb menu
|
|
int m_nHorizScrollShift; // horiz scroll shift required
|
|
// for object's inplace window.
|
|
// (note: this is ICNTROTL specific)
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
BOOL m_fIpActive; // is object in-place active (undo valid)
|
|
BOOL m_fUIActive; // is object UIActive
|
|
BOOL m_fIpVisible; // is object's in-place window visible
|
|
BOOL m_fInsideOutObj;// is obj inside-out (visible when loaded)
|
|
LPOLEINPLACEOBJECT m_lpOleIPObj; // IOleInPlaceObject* of in-place obj
|
|
BOOL m_fIpChangesUndoable; // can in-place object do undo
|
|
BOOL m_fIpServerRunning; // is in-place server running
|
|
HWND m_hWndIpObject;
|
|
|
|
struct COleInPlaceSiteImpl {
|
|
IOleInPlaceSiteVtbl FAR* lpVtbl;
|
|
LPCONTAINERLINE lpContainerLine;
|
|
int cRef; // interface specific ref count.
|
|
} m_OleInPlaceSite;
|
|
#endif // INPLACE_CNTR
|
|
|
|
struct CUnknownImpl {
|
|
IUnknownVtbl FAR* lpVtbl;
|
|
LPCONTAINERLINE lpContainerLine;
|
|
int cRef; // interface specific ref count.
|
|
} m_Unknown;
|
|
|
|
struct COleClientSiteImpl {
|
|
IOleClientSiteVtbl FAR* lpVtbl;
|
|
LPCONTAINERLINE lpContainerLine;
|
|
int cRef; // interface specific ref count.
|
|
} m_OleClientSite;
|
|
|
|
struct CAdviseSinkImpl {
|
|
IAdviseSinkVtbl FAR* lpVtbl;
|
|
LPCONTAINERLINE lpContainerLine;
|
|
int cRef; // interface specific ref count.
|
|
} m_AdviseSink;
|
|
|
|
} CONTAINERLINE;
|
|
|
|
|
|
/* ContainerLine methods (functions) */
|
|
void ContainerLine_Init(LPCONTAINERLINE lpContainerLine, int nTab, HDC hDC);
|
|
BOOL ContainerLine_SetupOleObject(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
BOOL fDisplayAsIcon,
|
|
HGLOBAL hMetaPict
|
|
);
|
|
LPCONTAINERLINE ContainerLine_Create(
|
|
DWORD dwOleCreateType,
|
|
HDC hDC,
|
|
UINT nTab,
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPCLSID lpclsid,
|
|
LPSTR lpszFileName,
|
|
BOOL fDisplayAsIcon,
|
|
HGLOBAL hMetaPict,
|
|
LPSTR lpszStgName
|
|
);
|
|
LPCONTAINERLINE ContainerLine_CreateFromData(
|
|
HDC hDC,
|
|
UINT nTab,
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPDATAOBJECT lpSrcDataObj,
|
|
DWORD dwCreateType,
|
|
CLIPFORMAT cfFormat,
|
|
BOOL fDisplayAsIcon,
|
|
HGLOBAL hMetaPict,
|
|
LPSTR lpszStgName
|
|
);
|
|
ULONG ContainerLine_AddRef(LPCONTAINERLINE lpContainerLine);
|
|
ULONG ContainerLine_Release(LPCONTAINERLINE lpContainerLine);
|
|
HRESULT ContainerLine_QueryInterface(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpUnk
|
|
);
|
|
BOOL ContainerLine_CloseOleObject(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
DWORD dwSaveOption
|
|
);
|
|
void ContainerLine_UnloadOleObject(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
DWORD dwSaveOption
|
|
);
|
|
void ContainerLine_Delete(LPCONTAINERLINE lpContainerLine);
|
|
void ContainerLine_Destroy(LPCONTAINERLINE lpContainerLine);
|
|
BOOL ContainerLine_CopyToDoc(
|
|
LPCONTAINERLINE lpSrcLine,
|
|
LPOUTLINEDOC lpDestDoc,
|
|
int nIndex
|
|
);
|
|
BOOL ContainerLine_LoadOleObject(LPCONTAINERLINE lpContainerLine);
|
|
BOOL ContainerLine_UpdateExtent(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPSIZEL lpsizelHim
|
|
);
|
|
BOOL ContainerLine_DoVerb(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LONG iVerb,
|
|
LPMSG lpMsg,
|
|
BOOL fMessage,
|
|
BOOL fAction
|
|
);
|
|
LPUNKNOWN ContainerLine_GetOleObject(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
REFIID riid
|
|
);
|
|
HRESULT ContainerLine_RunOleObject(LPCONTAINERLINE lpContainerLine);
|
|
BOOL ContainerLine_ProcessOleRunError(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
HRESULT hrErr,
|
|
BOOL fAction,
|
|
BOOL fMenuInvoked
|
|
);
|
|
HRESULT ContainerLine_ReCreateLinkBecauseClassDiff(
|
|
LPCONTAINERLINE lpContainerLine
|
|
);
|
|
BOOL ContainerLine_IsOleLink(LPCONTAINERLINE lpContainerLine);
|
|
void ContainerLine_BindLinkIfLinkSrcIsRunning(LPCONTAINERLINE lpContainerLine);
|
|
void ContainerLine_Draw(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
HDC hDC,
|
|
LPRECT lpRect,
|
|
LPRECT lpRectWBounds,
|
|
BOOL fHighlight
|
|
|
|
);
|
|
void ContainerLine_DrawSelHilight(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
HDC hDC,
|
|
LPRECT lpRect,
|
|
UINT itemAction,
|
|
UINT itemState
|
|
);
|
|
BOOL ContainerLine_Edit(LPCONTAINERLINE lpContainerLine,HWND hWndDoc,HDC hDC);
|
|
void ContainerLine_SetHeightInHimetric(LPCONTAINERLINE lpContainerLine, int nHeight);
|
|
void ContainerLine_SetLineHeightFromObjectExtent(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPSIZEL lpsizelOleObject
|
|
);
|
|
BOOL ContainerLine_SaveToStm(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPSTREAM lpLLStm
|
|
);
|
|
BOOL ContainerLine_SaveOleObjectToStg(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPSTORAGE lpSrcStg,
|
|
LPSTORAGE lpDestStg,
|
|
BOOL fRemember
|
|
);
|
|
LPLINE ContainerLine_LoadFromStg(
|
|
LPSTORAGE lpSrcStg,
|
|
LPSTREAM lpLLStm,
|
|
LPOUTLINEDOC lpDestDoc
|
|
);
|
|
LPMONIKER ContainerLine_GetRelMoniker(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
DWORD dwAssign
|
|
);
|
|
LPMONIKER ContainerLine_GetFullMoniker(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
DWORD dwAssign
|
|
);
|
|
int ContainerLine_GetTextLen(LPCONTAINERLINE lpContainerLine);
|
|
void ContainerLine_GetTextData(LPCONTAINERLINE lpContainerLine,LPSTR lpszBuf);
|
|
BOOL ContainerLine_GetOutlineData(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPTEXTLINE lpBuf
|
|
);
|
|
void ContainerLine_GetOleObjectRectInPixels(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPRECT lprc
|
|
);
|
|
void ContainerLine_GetPosRect(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPRECT lprcPosRect
|
|
);
|
|
void ContainerLine_GetOleObjectSizeInHimetric(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPSIZEL lpsizel
|
|
);
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
void ContainerLine_UIDeactivate(LPCONTAINERLINE lpContainerLine);
|
|
void ContainerLine_InPlaceDeactivate(LPCONTAINERLINE lpContainerLine);
|
|
void ContainerLine_UpdateInPlaceObjectRects(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
LPRECT lprcClipRect
|
|
);
|
|
void ContainerLine_ContextSensitiveHelp(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
BOOL fEnterMode
|
|
);
|
|
void ContainerLine_ForwardPaletteChangedMsg(
|
|
LPCONTAINERLINE lpContainerLine,
|
|
HWND hwndPalChg
|
|
);
|
|
void ContainerDoc_ContextSensitiveHelp(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
BOOL fEnterMode,
|
|
BOOL fInitiatedByObj
|
|
);
|
|
void ContainerDoc_ForwardPaletteChangedMsg(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
HWND hwndPalChg
|
|
);
|
|
#endif // INPLACE_CNTR
|
|
|
|
/* ContainerLine::IUnknown methods (functions) */
|
|
STDMETHODIMP CntrLine_Unk_QueryInterface(
|
|
LPUNKNOWN lpThis,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObj
|
|
);
|
|
STDMETHODIMP_(ULONG) CntrLine_Unk_AddRef(LPUNKNOWN lpThis);
|
|
STDMETHODIMP_(ULONG) CntrLine_Unk_Release(LPUNKNOWN lpThis);
|
|
|
|
/* ContainerLine::IOleClientSite methods (functions) */
|
|
STDMETHODIMP CntrLine_CliSite_QueryInterface(
|
|
LPOLECLIENTSITE lpThis,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObj
|
|
);
|
|
STDMETHODIMP_(ULONG) CntrLine_CliSite_AddRef(LPOLECLIENTSITE lpThis);
|
|
STDMETHODIMP_(ULONG) CntrLine_CliSite_Release(LPOLECLIENTSITE lpThis);
|
|
STDMETHODIMP CntrLine_CliSite_SaveObject(LPOLECLIENTSITE lpThis);
|
|
STDMETHODIMP CntrLine_CliSite_GetMoniker(
|
|
LPOLECLIENTSITE lpThis,
|
|
DWORD dwAssign,
|
|
DWORD dwWhichMoniker,
|
|
LPMONIKER FAR* lplpmk
|
|
);
|
|
STDMETHODIMP CntrLine_CliSite_GetContainer(
|
|
LPOLECLIENTSITE lpThis,
|
|
LPOLECONTAINER FAR* lplpContainer
|
|
);
|
|
STDMETHODIMP CntrLine_CliSite_ShowObject(LPOLECLIENTSITE lpThis);
|
|
STDMETHODIMP CntrLine_CliSite_OnShowWindow(LPOLECLIENTSITE lpThis,BOOL fShow);
|
|
STDMETHODIMP CntrLine_CliSite_RequestNewObjectLayout(LPOLECLIENTSITE lpThis);
|
|
|
|
/* ContainerLine::IAdviseSink methods (functions) */
|
|
STDMETHODIMP CntrLine_AdvSink_QueryInterface(
|
|
LPADVISESINK lpThis,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObj
|
|
);
|
|
STDMETHODIMP_(ULONG) CntrLine_AdvSink_AddRef(LPADVISESINK lpThis);
|
|
STDMETHODIMP_(ULONG) CntrLine_AdvSink_Release (LPADVISESINK lpThis);
|
|
STDMETHODIMP_(void) CntrLine_AdvSink_OnDataChange(
|
|
LPADVISESINK lpThis,
|
|
FORMATETC FAR* lpFormatetc,
|
|
STGMEDIUM FAR* lpStgmed
|
|
);
|
|
STDMETHODIMP_(void) CntrLine_AdvSink_OnViewChange(
|
|
LPADVISESINK lpThis,
|
|
DWORD aspects,
|
|
LONG lindex
|
|
);
|
|
STDMETHODIMP_(void) CntrLine_AdvSink_OnRename(
|
|
LPADVISESINK lpThis,
|
|
LPMONIKER lpmk
|
|
);
|
|
STDMETHODIMP_(void) CntrLine_AdvSink_OnSave(LPADVISESINK lpThis);
|
|
STDMETHODIMP_(void) CntrLine_AdvSink_OnClose(LPADVISESINK lpThis);
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
/* ContainerLine::IOleInPlaceSite methods (functions) */
|
|
|
|
STDMETHODIMP CntrLine_IPSite_QueryInterface(
|
|
LPOLEINPLACESITE lpThis,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObj
|
|
);
|
|
STDMETHODIMP_(ULONG) CntrLine_IPSite_AddRef(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP_(ULONG) CntrLine_IPSite_Release(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_GetWindow(
|
|
LPOLEINPLACESITE lpThis,
|
|
HWND FAR* lphwnd
|
|
);
|
|
STDMETHODIMP CntrLine_IPSite_ContextSensitiveHelp(
|
|
LPOLEINPLACESITE lpThis,
|
|
BOOL fEnterMode
|
|
);
|
|
STDMETHODIMP CntrLine_IPSite_CanInPlaceActivate(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_OnInPlaceActivate(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_OnUIActivate (LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_GetWindowContext(
|
|
LPOLEINPLACESITE lpThis,
|
|
LPOLEINPLACEFRAME FAR* lplpFrame,
|
|
LPOLEINPLACEUIWINDOW FAR* lplpDoc,
|
|
LPRECT lprcPosRect,
|
|
LPRECT lprcClipRect,
|
|
LPOLEINPLACEFRAMEINFO lpFrameInfo
|
|
);
|
|
STDMETHODIMP CntrLine_IPSite_Scroll(
|
|
LPOLEINPLACESITE lpThis,
|
|
SIZE scrollExtent
|
|
);
|
|
STDMETHODIMP CntrLine_IPSite_OnUIDeactivate(
|
|
LPOLEINPLACESITE lpThis,
|
|
BOOL fUndoable
|
|
);
|
|
STDMETHODIMP CntrLine_IPSite_OnInPlaceDeactivate(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_DiscardUndoState(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_DeactivateAndUndo(LPOLEINPLACESITE lpThis);
|
|
STDMETHODIMP CntrLine_IPSite_OnPosRectChange(
|
|
LPOLEINPLACESITE lpThis,
|
|
LPCRECT lprcPosRect
|
|
);
|
|
#endif // INPLACE_CNTR
|
|
|
|
|
|
/* struct definition for persistant data storage of ContainerLine */
|
|
|
|
#pragma pack(push, 2)
|
|
typedef struct tagCONTAINERLINERECORD_ONDISK
|
|
{
|
|
char m_szStgName[CWCSTORAGENAME]; // stg name w/i cntr stg
|
|
USHORT m_fMonikerAssigned; // has a moniker been assigned to obj
|
|
DWORD m_dwDrawAspect; // current display aspect for obj
|
|
// (either DVASPECT_CONTENT or
|
|
// DVASPECT_ICON)
|
|
SIZEL m_sizeInHimetric; // extents of obj in himetric units
|
|
DWORD m_dwLinkType; // is it a linked object?
|
|
// 0 -- NOT a link
|
|
// OLEUPDATE_ALWAYS (1) -- auto link
|
|
// OLEUPDATE_ONCALL (3) -- man. link
|
|
USHORT m_fDoSetExtent; // obj was resized when not running
|
|
// IOO::SetExtent needed on next run
|
|
} CONTAINERLINERECORD_ONDISK, FAR* LPCONTAINERLINERECORD_ONDISK;
|
|
#pragma pack(pop)
|
|
|
|
typedef struct tagCONTAINERLINERECORD {
|
|
char m_szStgName[CWCSTORAGENAME]; // stg name w/i cntr stg
|
|
BOOL m_fMonikerAssigned; // has a moniker been assigned to obj
|
|
DWORD m_dwDrawAspect; // current display aspect for obj
|
|
// (either DVASPECT_CONTENT or
|
|
// DVASPECT_ICON)
|
|
SIZEL m_sizeInHimetric; // extents of obj in himetric units
|
|
DWORD m_dwLinkType; // is it a linked object?
|
|
// 0 -- NOT a link
|
|
// OLEUPDATE_ALWAYS (1) -- auto link
|
|
// OLEUPDATE_ONCALL (3) -- man. link
|
|
BOOL m_fDoSetExtent; // obj was resized when not running
|
|
// IOO::SetExtent needed on next run
|
|
} CONTAINERLINERECORD, FAR* LPCONTAINERLINERECORD;
|
|
|
|
|
|
/*************************************************************************
|
|
** class CONTAINERDOC : OUTLINEDOC
|
|
** CONTAINERDOC is an extention to the base OUTLINEDOC object (structure)
|
|
** that adds OLE 2.0 Container functionality. There is one instance of
|
|
** CONTAINERDOC object created per document open in the app. The SDI
|
|
** version of the app supports one CONTAINERDOC at a time. The MDI
|
|
** version of the app can manage multiple documents at one time.
|
|
** The CONTAINERDOC class inherits all fields
|
|
** from the OUTLINEDOC class. This inheritance is achieved by including a
|
|
** member variable of type OUTLINEDOC as the first field in the
|
|
** CONTAINERDOC structure. Thus a pointer to a CONTAINERDOC object
|
|
** can be cast to be a pointer to a OUTLINEDOC object.
|
|
*************************************************************************/
|
|
|
|
typedef struct tagCONTAINERDOC {
|
|
OLEDOC m_OleDoc; // ContainerDoc inherits all fields of OleDoc
|
|
ULONG m_nNextObjNo; // next available obj no. for stg name
|
|
LPSTORAGE m_lpNewStg; // holds new pStg when SaveAs is pending
|
|
BOOL m_fEmbeddedObjectAvail; // is single OLE embed copied to doc
|
|
CLSID m_clsidOleObjCopied; // if obj copied, CLSID of obj
|
|
DWORD m_dwAspectOleObjCopied; // if obj copied, draw aspect of obj
|
|
LPCONTAINERLINE m_lpSrcContainerLine; // src line if doc created for copy
|
|
BOOL m_fShowObject; // show object flag
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
LPCONTAINERLINE m_lpLastIpActiveLine; // last in-place active line
|
|
LPCONTAINERLINE m_lpLastUIActiveLine; // last UIActive line
|
|
HWND m_hWndUIActiveObj; // HWND of UIActive obj.
|
|
BOOL m_fAddMyUI; // if adding tools/menu postponed
|
|
int m_cIPActiveObjects;
|
|
|
|
#if defined( INPLACE_CNTRSVR )
|
|
LPOLEINPLACEFRAME m_lpTopIPFrame; // ptr to Top In-place frame.
|
|
LPOLEINPLACEFRAME m_lpTopIPDoc; // ptr to Top In-place Doc window.
|
|
HMENU m_hSharedMenu; // combined obj/cntr menu
|
|
// NULL if we are top container
|
|
HOLEMENU m_hOleMenu; // returned by OleCreateMenuDesc.
|
|
// NULL if we are top container
|
|
#endif // INPLACE_CNTRSVR
|
|
#endif // INPLACE_CNTR
|
|
|
|
struct CDocOleUILinkContainerImpl {
|
|
IOleUILinkContainerVtbl FAR* lpVtbl;
|
|
LPCONTAINERDOC lpContainerDoc;
|
|
int cRef; // interface specific ref count.
|
|
} m_OleUILinkContainer;
|
|
|
|
} CONTAINERDOC;
|
|
|
|
/* ContainerDoc methods (functions) */
|
|
BOOL ContainerDoc_Init(LPCONTAINERDOC lpContainerDoc, BOOL fDataTransferDoc);
|
|
LPCONTAINERLINE ContainerDoc_GetNextLink(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPCONTAINERLINE lpContainerLine
|
|
);
|
|
void ContainerDoc_UpdateLinks(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_SetShowObjectFlag(LPCONTAINERDOC lpContainerDoc, BOOL fShow);
|
|
BOOL ContainerDoc_GetShowObjectFlag(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_InsertOleObjectCommand(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_EditLinksCommand(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_PasteLinkCommand(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_ConvertCommand(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
BOOL fServerNotRegistered
|
|
);
|
|
BOOL ContainerDoc_PasteFormatFromData(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
CLIPFORMAT cfFormat,
|
|
LPDATAOBJECT lpSrcDataObj,
|
|
BOOL fLocalDataObj,
|
|
BOOL fLink,
|
|
BOOL fDisplayAsIcon,
|
|
HGLOBAL hMetaPict,
|
|
LPSIZEL lpSizelInSrc
|
|
);
|
|
int ContainerDoc_PasteCntrOutlData(
|
|
LPCONTAINERDOC lpDestContainerDoc,
|
|
LPSTORAGE lpSrcStg,
|
|
int nStartIndex
|
|
);
|
|
BOOL ContainerDoc_QueryPasteFromData(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPDATAOBJECT lpSrcDataObj,
|
|
BOOL fLink
|
|
);
|
|
int ContainerDoc_PasteOleObject(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPDATAOBJECT lpSrcDataObj,
|
|
DWORD dwCreateType,
|
|
CLIPFORMAT cfFormat,
|
|
int nIndex,
|
|
BOOL fDisplayAsIcon,
|
|
HGLOBAL hMetaPict,
|
|
LPSIZEL lpSizelInSrc
|
|
);
|
|
BOOL ContainerDoc_CloseAllOleObjects(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
DWORD dwSaveOption
|
|
);
|
|
void ContainerDoc_UnloadAllOleObjectsOfClass(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
REFCLSID rClsid,
|
|
DWORD dwSaveOption
|
|
);
|
|
void ContainerDoc_InformAllOleObjectsDocRenamed(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPMONIKER lpmkDoc
|
|
);
|
|
void ContainerDoc_UpdateExtentOfAllOleObjects(LPCONTAINERDOC lpContainerDoc);
|
|
BOOL ContainerDoc_SaveToFile(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPCSTR lpszFileName,
|
|
UINT uFormat,
|
|
BOOL fRemember
|
|
);
|
|
void ContainerDoc_ContainerLineDoVerbCommand(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LONG iVerb
|
|
);
|
|
void ContainerDoc_GetNextStgName(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPSTR lpszStgName,
|
|
int nLen
|
|
);
|
|
BOOL ContainerDoc_IsStgNameUsed(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPSTR lpszStgName
|
|
);
|
|
LPSTORAGE ContainerDoc_GetStg(LPCONTAINERDOC lpContainerDoc);
|
|
HRESULT ContainerDoc_GetObject(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPOLESTR lpszItem,
|
|
DWORD dwSpeedNeeded,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObject
|
|
);
|
|
HRESULT ContainerDoc_GetObjectStorage(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPOLESTR lpszItem,
|
|
LPSTORAGE FAR* lplpStg
|
|
);
|
|
HRESULT ContainerDoc_IsRunning(LPCONTAINERDOC lpContainerDoc, LPOLESTR lpszItem);
|
|
LPUNKNOWN ContainerDoc_GetSingleOleObject(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
REFIID riid,
|
|
LPCONTAINERLINE FAR* lplpContainerLine
|
|
);
|
|
BOOL ContainerDoc_IsSelAnOleObject(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
REFIID riid,
|
|
LPUNKNOWN FAR* lplpvObj,
|
|
int FAR* lpnIndex,
|
|
LPCONTAINERLINE FAR* lplpContainerLine
|
|
);
|
|
HRESULT ContainerDoc_GetData (
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPFORMATETC lpformatetc,
|
|
LPSTGMEDIUM lpMedium
|
|
);
|
|
HRESULT ContainerDoc_GetDataHere (
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPFORMATETC lpformatetc,
|
|
LPSTGMEDIUM lpMedium
|
|
);
|
|
HRESULT ContainerDoc_QueryGetData (
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPFORMATETC lpformatetc
|
|
);
|
|
HRESULT ContainerDoc_SetData (
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPFORMATETC lpformatetc,
|
|
LPSTGMEDIUM lpmedium,
|
|
BOOL fRelease
|
|
);
|
|
HRESULT ContainerDoc_EnumFormatEtc(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
DWORD dwDirection,
|
|
LPENUMFORMATETC FAR* lplpenumFormatEtc
|
|
);
|
|
BOOL ContainerDoc_SetupDocGetFmts(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPCONTAINERLINE lpContainerLine
|
|
);
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
|
|
void ContainerDoc_ShutDownLastInPlaceServerIfNotNeeded(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPCONTAINERLINE lpNextActiveLine
|
|
);
|
|
BOOL ContainerDoc_IsUIDeactivateNeeded(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
POINT pt
|
|
);
|
|
HWND ContainerDoc_GetUIActiveWindow(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_UpdateInPlaceObjectRects(LPCONTAINERDOC lpContainerDoc, int nIndex);
|
|
void ContainerDoc_GetClipRect(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
LPRECT lprcClipRect
|
|
);
|
|
void ContainerDoc_FrameWindowResized(LPCONTAINERDOC lpContainerDoc);
|
|
LPOLEINPLACEFRAME ContainerDoc_GetTopInPlaceFrame(
|
|
LPCONTAINERDOC lpContainerDoc
|
|
);
|
|
void ContainerDoc_GetSharedMenuHandles(
|
|
LPCONTAINERDOC lpContainerDoc,
|
|
HMENU FAR* lphSharedMenu,
|
|
HOLEMENU FAR* lphOleMenu
|
|
);
|
|
void ContainerDoc_RemoveFrameLevelTools(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_AddFrameLevelUI(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_AddFrameLevelTools(LPCONTAINERDOC lpContainerDoc);
|
|
|
|
#if defined( INPLACE_CNTRSVR ) || defined( INPLACE_MDICNTR )
|
|
|
|
LPOLEINPLACEUIWINDOW ContainerDoc_GetTopInPlaceDoc(
|
|
LPCONTAINERDOC lpContainerDoc
|
|
);
|
|
void ContainerDoc_RemoveDocLevelTools(LPCONTAINERDOC lpContainerDoc);
|
|
void ContainerDoc_AddDocLevelTools(LPCONTAINERDOC lpContainerDoc);
|
|
|
|
#endif // INPLACE_CNTRSVR || INPLACE_MDICNTR
|
|
#endif // INPLACE_CNTR
|
|
|
|
/* ContainerDoc::IOleUILinkContainer methods (functions) */
|
|
STDMETHODIMP CntrDoc_LinkCont_QueryInterface(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObj
|
|
);
|
|
STDMETHODIMP_(ULONG) CntrDoc_LinkCont_AddRef(LPOLEUILINKCONTAINER lpThis);
|
|
STDMETHODIMP_(ULONG) CntrDoc_LinkCont_Release(LPOLEUILINKCONTAINER lpThis);
|
|
STDMETHODIMP_(DWORD) CntrDoc_LinkCont_GetNextLink(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink
|
|
);
|
|
STDMETHODIMP CntrDoc_LinkCont_SetLinkUpdateOptions(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink,
|
|
DWORD dwUpdateOpt
|
|
);
|
|
STDMETHODIMP CntrDoc_LinkCont_GetLinkUpdateOptions(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink,
|
|
DWORD FAR* dwUpdateOpt
|
|
);
|
|
|
|
STDMETHODIMP CntrDoc_LinkCont_SetLinkSource(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink,
|
|
LPSTR lpszDisplayName,
|
|
ULONG clenFileName,
|
|
ULONG FAR* lpchEaten,
|
|
BOOL fValidateSource
|
|
);
|
|
STDMETHODIMP CntrDoc_LinkCont_GetLinkSource(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink,
|
|
LPSTR FAR* lplpszDisplayName,
|
|
ULONG FAR* lplenFileName,
|
|
LPSTR FAR* lplpszFullLinkType,
|
|
LPSTR FAR* lplpszShortLinkType,
|
|
BOOL FAR* lpfSourceAvailable,
|
|
BOOL FAR* lpfIsSelected
|
|
);
|
|
STDMETHODIMP CntrDoc_LinkCont_OpenLinkSource(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink
|
|
);
|
|
STDMETHODIMP CntrDoc_LinkCont_UpdateLink(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink,
|
|
BOOL fErrorMessage,
|
|
BOOL fErrorAction
|
|
);
|
|
STDMETHODIMP CntrDoc_LinkCont_CancelLink(
|
|
LPOLEUILINKCONTAINER lpThis,
|
|
DWORD dwLink
|
|
);
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
** class CONTAINERAPP : OLEAPP
|
|
** CONTAINERAPP is an extention to the base OLEAPP object (structure)
|
|
** that adds special Container functionality. There is one instance of
|
|
** CONTAINERApp object created per running application instance. This
|
|
** object holds many fields that could otherwise be organized as
|
|
** global variables. The CONTAINERAPP class inherits all fields
|
|
** from the OLEAPP class. This inheritance is achieved by including a
|
|
** member variable of type OLEAPP as the first field in the CONTAINERAPP
|
|
** structure. OLEAPP inherits from OUTLINEAPP. This inheritance is
|
|
** achieved in the same manner. Thus a pointer to a CONTAINERAPP object
|
|
** can be cast to be a pointer to an OLEAPP or an OUTLINEAPP object
|
|
*************************************************************************/
|
|
|
|
/* Forward definition of types */
|
|
typedef struct tagCONTAINERAPP FAR* LPCONTAINERAPP;
|
|
|
|
typedef struct tagCONTAINERAPP {
|
|
OLEAPP m_OleApp; // ContainerApp inherits all fields of OleApp
|
|
UINT m_cfCntrOutl; // clipboard format for CntrOutl (client ver) data
|
|
int m_nSingleObjGetFmts; // no. formats avail when single obj copied
|
|
FORMATETC m_arrSingleObjGetFmts[MAXNOFMTS];
|
|
// array of FormatEtc's available via
|
|
// IDataObject::GetData when a single
|
|
// OLE object is copied.
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
HACCEL m_hAccelIPCntr; // accelerators for container's workspace commands
|
|
HMENU m_hMenuFile; // handle to File menu of container app
|
|
HMENU m_hMenuView; // handle to View menu of container app
|
|
HMENU m_hMenuDebug; // handle to Debug menu of container app
|
|
LPOLEINPLACEACTIVEOBJECT m_lpIPActiveObj; // ptr to inplace active OLE obj
|
|
HWND m_hWndUIActiveObj; // HWND of UIActive obj.
|
|
BOOL m_fPendingUIDeactivate; // should app UIDeactivate on LBUTTONUP
|
|
BOOL m_fMustResizeClientArea;// if client area resize pending
|
|
// (see Doc_FrameWindowResized)
|
|
BOOL m_fMenuHelpMode;// is F1 pressed in menu, if so give help
|
|
#ifdef _DEBUG
|
|
BOOL m_fOutSideIn;
|
|
#endif
|
|
|
|
struct COleInPlaceFrameImpl {
|
|
IOleInPlaceFrameVtbl FAR* lpVtbl;
|
|
LPCONTAINERAPP lpContainerApp;
|
|
int cRef; // interface specific ref count.
|
|
} m_OleInPlaceFrame;
|
|
|
|
#endif // INPLACE_CNTR
|
|
|
|
} CONTAINERAPP;
|
|
|
|
/* ContainerApp methods (functions) */
|
|
BOOL ContainerApp_InitInstance(
|
|
LPCONTAINERAPP lpContainerApp,
|
|
HINSTANCE hInst,
|
|
int nCmdShow
|
|
);
|
|
BOOL ContainerApp_InitVtbls(LPCONTAINERAPP lpApp);
|
|
|
|
#if defined( INPLACE_CNTR )
|
|
|
|
/* ContainerApp::IOleInPlaceFrame methods (functions) */
|
|
|
|
STDMETHODIMP CntrApp_IPFrame_QueryInterface(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
REFIID riid,
|
|
LPVOID FAR* lplpvObj
|
|
);
|
|
STDMETHODIMP_(ULONG) CntrApp_IPFrame_AddRef(LPOLEINPLACEFRAME lpThis);
|
|
STDMETHODIMP_(ULONG) CntrApp_IPFrame_Release(LPOLEINPLACEFRAME lpThis);
|
|
STDMETHODIMP CntrApp_IPFrame_GetWindow(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
HWND FAR* lphwnd
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_ContextSensitiveHelp(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
BOOL fEnterMode
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_GetBorder(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
LPRECT lprectBorder
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_RequestBorderSpace(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
LPCBORDERWIDTHS lpWidths
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_SetBorderSpace(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
LPCBORDERWIDTHS lpWidths
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_SetActiveObject(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
LPOLEINPLACEACTIVEOBJECT lpActiveObject,
|
|
LPCOLESTR lpszObjName
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_InsertMenus(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
HMENU hmenu,
|
|
LPOLEMENUGROUPWIDTHS lpMenuWidths
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_SetMenu(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
HMENU hmenuShared,
|
|
HOLEMENU holemenu,
|
|
HWND hwndActiveObject
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_RemoveMenus(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
HMENU hmenu
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_SetStatusText(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
LPCOLESTR lpszStatusText
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_EnableModeless(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
BOOL fEnable
|
|
);
|
|
STDMETHODIMP CntrApp_IPFrame_TranslateAccelerator(
|
|
LPOLEINPLACEFRAME lpThis,
|
|
LPMSG lpmsg,
|
|
WORD wID
|
|
);
|
|
|
|
#endif // INPLACE_CNTR
|
|
|
|
|
|
#endif // _CNTROUTL_H_
|