/*++ 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 #include #include #ifdef INITGUIDS #include #endif #include #include //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 //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_