260 lines
4.9 KiB
C
260 lines
4.9 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (C) 1993-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
inole.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Master header file for all Inside OLE samples.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _INOLE_H_
|
||
|
#define _INOLE_H_
|
||
|
|
||
|
#define INC_OLE2
|
||
|
#include <windows.h>
|
||
|
#include <ole2.h>
|
||
|
#include <ole2ver.h>
|
||
|
|
||
|
#ifdef INITGUIDS
|
||
|
#include <initguid.h>
|
||
|
#endif
|
||
|
|
||
|
#include <oleauto.h>
|
||
|
#include <olectl.h>
|
||
|
|
||
|
|
||
|
|
||
|
//Types that OLE2.H et. al. leave out
|
||
|
|
||
|
#ifndef PPVOID
|
||
|
typedef LPVOID * PPVOID;
|
||
|
#endif //PPVOID
|
||
|
|
||
|
|
||
|
#ifdef _OLE2_H_ //May not include ole2.h at all times.
|
||
|
|
||
|
#ifndef PPOINTL
|
||
|
typedef POINTL * PPOINTL;
|
||
|
#endif //PPOINTL
|
||
|
|
||
|
|
||
|
#ifndef _WIN32
|
||
|
#ifndef OLECHAR
|
||
|
typedef char OLECHAR;
|
||
|
typedef OLECHAR FAR* LPOLESTR;
|
||
|
typedef const OLECHAR FAR* LPCOLESTR;
|
||
|
#endif //OLECHAR
|
||
|
#endif //_WIN32
|
||
|
|
||
|
#include <tchar.h>
|
||
|
|
||
|
//Useful macros.
|
||
|
#define SETFormatEtc(fe, cf, asp, td, med, li) \
|
||
|
{\
|
||
|
(fe).cfFormat=cf;\
|
||
|
(fe).dwAspect=asp;\
|
||
|
(fe).ptd=td;\
|
||
|
(fe).tymed=med;\
|
||
|
(fe).lindex=li;\
|
||
|
}
|
||
|
|
||
|
#define SETDefFormatEtc(fe, cf, med) \
|
||
|
{\
|
||
|
(fe).cfFormat=cf;\
|
||
|
(fe).dwAspect=DVASPECT_CONTENT;\
|
||
|
(fe).ptd=NULL;\
|
||
|
(fe).tymed=med;\
|
||
|
(fe).lindex=-1;\
|
||
|
}
|
||
|
|
||
|
|
||
|
#define SETRECTL(rcl, l, t, r, b) \
|
||
|
{\
|
||
|
(rcl).left=l;\
|
||
|
(rcl).top=t;\
|
||
|
(rcl).right=r;\
|
||
|
(rcl).bottom=b;\
|
||
|
}
|
||
|
|
||
|
#define SETSIZEL(szl, h, v) \
|
||
|
{\
|
||
|
(szl).cx=h;\
|
||
|
(szl).cy=v;\
|
||
|
}
|
||
|
|
||
|
|
||
|
#define RECTLFROMRECT(rcl, rc)\
|
||
|
{\
|
||
|
(rcl).left=(long)(rc).left;\
|
||
|
(rcl).top=(long)(rc).top;\
|
||
|
(rcl).right=(long)(rc).right;\
|
||
|
(rcl).bottom=(long)(rc).bottom;\
|
||
|
}
|
||
|
|
||
|
|
||
|
#define RECTFROMRECTL(rc, rcl)\
|
||
|
{\
|
||
|
(rc).left=(int)(rcl).left;\
|
||
|
(rc).top=(int)(rcl).top;\
|
||
|
(rc).right=(int)(rcl).right;\
|
||
|
(rc).bottom=(int)(rcl).bottom;\
|
||
|
}
|
||
|
|
||
|
|
||
|
#define POINTLFROMPOINT(ptl, pt) \
|
||
|
{ \
|
||
|
(ptl).x=(long)(pt).x; \
|
||
|
(ptl).y=(long)(pt).y; \
|
||
|
}
|
||
|
|
||
|
|
||
|
#define POINTFROMPOINTL(pt, ptl) \
|
||
|
{ \
|
||
|
(pt).x=(int)(ptl).x; \
|
||
|
(pt).y=(int)(ptl).y; \
|
||
|
}
|
||
|
|
||
|
//Here's one that should be in windows.h
|
||
|
#define SETPOINT(pt, h, v) \
|
||
|
{\
|
||
|
(pt).x=h;\
|
||
|
(pt).y=v;\
|
||
|
}
|
||
|
|
||
|
#define SETPOINTL(ptl, h, v) \
|
||
|
{\
|
||
|
(ptl).x=h;\
|
||
|
(ptl).y=v;\
|
||
|
}
|
||
|
|
||
|
#endif //_OLE2_H_
|
||
|
|
||
|
//Macros for setting DISPPARAMS structures
|
||
|
#define SETDISPPARAMS(dp, numArgs, pvArgs, numNamed, pNamed) \
|
||
|
{\
|
||
|
(dp).cArgs=numArgs;\
|
||
|
(dp).rgvarg=pvArgs;\
|
||
|
(dp).cNamedArgs=numNamed;\
|
||
|
(dp).rgdispidNamedArgs=pNamed;\
|
||
|
}
|
||
|
|
||
|
#define SETNOPARAMS(dp) SETDISPPARAMS(dp, 0, NULL, 0, NULL)
|
||
|
|
||
|
//Macros for setting EXCEPINFO structures
|
||
|
#define SETEXCEPINFO(ei, excode, src, desc, file, ctx, func, scd) \
|
||
|
{\
|
||
|
(ei).wCode=excode;\
|
||
|
(ei).wReserved=0;\
|
||
|
(ei).bstrSource=src;\
|
||
|
(ei).bstrDescription=desc;\
|
||
|
(ei).bstrHelpFile=file;\
|
||
|
(ei).dwHelpContext=ctx;\
|
||
|
(ei).pvReserved=NULL;\
|
||
|
(ei).pfnDeferredFillIn=func;\
|
||
|
(ei).scode=scd;\
|
||
|
}
|
||
|
|
||
|
|
||
|
#define INITEXCEPINFO(ei) \
|
||
|
SETEXCEPINFO(ei,0,NULL,NULL,NULL,0L,NULL,S_OK)
|
||
|
|
||
|
|
||
|
/*
|
||
|
* State flags for IPersistStorage implementations. These
|
||
|
* are kept here to avoid repeating the code in all samples.
|
||
|
*/
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
PSSTATE_UNINIT, //Uninitialized
|
||
|
PSSTATE_SCRIBBLE, //Scribble
|
||
|
PSSTATE_ZOMBIE, //No scribble
|
||
|
PSSTATE_HANDSOFF //Hand-off
|
||
|
} PSSTATE;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Identifers to describe which persistence model an object
|
||
|
* is using, along with a union type that holds on the the
|
||
|
* appropriate pointers that a client may need.
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
PERSIST_UNKNOWN=0,
|
||
|
PERSIST_STORAGE,
|
||
|
PERSIST_STREAM,
|
||
|
PERSIST_STREAMINIT,
|
||
|
PERSIST_FILE
|
||
|
} PERSIST_MODEL;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
PERSIST_MODEL psModel;
|
||
|
union
|
||
|
{
|
||
|
IPersistStorage *pIPersistStorage;
|
||
|
IPersistStream *pIPersistStream;
|
||
|
IPersistStreamInit *pIPersistStreamInit;
|
||
|
IPersistFile *pIPersistFile;
|
||
|
} pIP;
|
||
|
|
||
|
} PERSISTPOINTER, *PPERSISTPOINTER;
|
||
|
|
||
|
|
||
|
//To identify a storage in which to save, load, or create.
|
||
|
typedef struct
|
||
|
{
|
||
|
PERSIST_MODEL psModel;
|
||
|
union
|
||
|
{
|
||
|
IStorage *pIStorage;
|
||
|
IStream *pIStream;
|
||
|
} pIS;
|
||
|
|
||
|
} STGPOINTER, *PSTGPOINTER;
|
||
|
|
||
|
|
||
|
|
||
|
//Type for an object-destroyed callback
|
||
|
typedef void (*PFNDESTROYED)(void);
|
||
|
|
||
|
|
||
|
//DeleteInterfaceImp calls 'delete' and NULLs the pointer
|
||
|
#define DeleteInterfaceImp(p)\
|
||
|
{\
|
||
|
if (NULL!=p)\
|
||
|
{\
|
||
|
delete p;\
|
||
|
p=NULL;\
|
||
|
}\
|
||
|
}
|
||
|
|
||
|
|
||
|
//ReleaseInterface calls 'Release' and NULLs the pointer
|
||
|
#define ReleaseInterface(p)\
|
||
|
{\
|
||
|
if (NULL!=p)\
|
||
|
{\
|
||
|
p->Release();\
|
||
|
p=NULL;\
|
||
|
}\
|
||
|
}
|
||
|
|
||
|
|
||
|
//OLE Documents Clipboard Formats
|
||
|
|
||
|
#define CFSTR_EMBEDSOURCE TEXT("Embed Source")
|
||
|
#define CFSTR_EMBEDDEDOBJECT TEXT("Embedded Object")
|
||
|
#define CFSTR_LINKSOURCE TEXT("Link Source")
|
||
|
#define CFSTR_CUSTOMLINKSOURCE TEXT("Custom Link Source")
|
||
|
#define CFSTR_OBJECTDESCRIPTOR TEXT("Object Descriptor")
|
||
|
#define CFSTR_LINKSRCDESCRIPTOR TEXT("Link Source Descriptor")
|
||
|
|
||
|
|
||
|
#endif //_INOLE_H_
|