iup-stack/iup/srcole/tLegacy.h

551 lines
13 KiB
C
Executable File

/*
* INOLE.H
*
* Master header file for all Inside OLE samples.
*
* Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
*
* Kraig Brockschmidt, Microsoft
* Internet : kraigb@microsoft.com
* Compuserve: >INTERNET:kraigb@microsoft.com
*/
#ifndef _INOLE_H_
#define _INOLE_H_
#define INC_OLE2
#include <windows.h>
#include <ole2.h>
#include <ole2ver.h>
#ifdef INC_OLEUI
#ifdef WIN32
/*
* Comment the next line and remove the comment from the
* line after it to compile for Windows NT 3.5.
*/
#include <oledlg.h>
//#include <ole2ui.h>
#else
#include <ole2ui.h>
#endif
#endif
#ifdef INC_CONTROLS
#define INC_AUTOMATION
#endif
#ifdef INC_AUTOMATION
#ifndef WIN32
#include <dispatch.h>
#include <olenls.h>
#else
#include <oleauto.h>
#endif
#endif
#ifdef INC_CONTROLS
#include <olectl.h>
#ifndef INITGUIDS
#include <olectlid.h>
#endif
#endif
#ifdef WIN32
//#include <tchar.h>
#ifdef UNICODE
#include <wchar.h>
#endif
#endif
#ifndef WIN32
#include <shellapi.h>
#include <malloc.h>
#endif
#ifdef INC_CLASSLIB
extern "C"
{
#include <commdlg.h>
#ifndef WIN32
#include <print.h>
#include <dlgs.h>
#endif
}
#include <classlib.h>
#endif
//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
#if !defined(_WIN32) && !defined(__CYGWIN__)
#ifndef OLECHAR
typedef char OLECHAR;
typedef OLECHAR FAR* LPOLESTR;
typedef const OLECHAR FAR* LPCOLESTR;
#endif //OLECHAR
#endif //_WIN32
//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_
#ifdef INC_AUTOMATION
//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)
#endif
/*
* 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;
#ifdef INC_CONTROLS
IPersistStreamInit *pIPersistStreamInit;
#endif
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)\
{\
IUnknown *pt=(IUnknown *)p;\
p=NULL;\
if (NULL!=pt)\
pt->Release();\
}
//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")
//Functions in the helper DLL, INOLE.DLL
//UI Effects
STDAPI_(void) UIDrawHandles(LPRECT, HDC, DWORD, UINT, BOOL);
STDAPI_(void) UIDrawShading(LPRECT, HDC, DWORD, UINT);
STDAPI_(void) UIShowObject(LPCRECT, HDC, BOOL);
//For UIDrawHandles
#define UI_HANDLES_USEINVERSE 0x00000001L
#define UI_HANDLES_NOBORDER 0x00000002L
#define UI_HANDLES_INSIDE 0x00000004L
#define UI_HANDLES_OUTSIDE 0x00000008L
//For UIDrawShading
#define UI_SHADE_FULLRECT 1
#define UI_SHADE_BORDERIN 2
#define UI_SHADE_BORDEROUT 3
//Coordinate Munging
STDAPI_(int) XformWidthInHimetricToPixels(HDC, int);
STDAPI_(int) XformWidthInPixelsToHimetric(HDC, int);
STDAPI_(int) XformHeightInHimetricToPixels(HDC, int);
STDAPI_(int) XformHeightInPixelsToHimetric(HDC, int);
STDAPI_(void) XformRectInPixelsToHimetric(HDC, LPRECT, LPRECT);
STDAPI_(void) XformRectInHimetricToPixels(HDC, LPRECT, LPRECT);
STDAPI_(void) XformSizeInPixelsToHimetric(HDC, LPSIZEL, LPSIZEL);
STDAPI_(void) XformSizeInHimetricToPixels(HDC, LPSIZEL, LPSIZEL);
//Helpers
STDAPI_(void) INOLE_MetafilePictIconFree(HGLOBAL);
STDAPI INOLE_SetIconInCache(IUnknown *, HGLOBAL);
STDAPI_(UINT) INOLE_GetUserTypeOfClass(REFCLSID, UINT, LPTSTR
, UINT);
STDAPI INOLE_DoConvert(IStorage *, REFCLSID);
STDAPI_(LPTSTR) INOLE_CopyString(LPTSTR);
STDAPI_(HGLOBAL) INOLE_ObjectDescriptorFromOleObject(IOleObject *
, DWORD, POINTL, LPSIZEL);
STDAPI_(HGLOBAL) INOLE_AllocObjectDescriptor(CLSID, DWORD
, SIZEL, POINTL, DWORD, LPTSTR, LPTSTR);
STDAPI_(IStorage *) INOLE_CreateStorageOnHGlobal(DWORD);
STDAPI INOLE_GetLinkSourceData(IMoniker *, LPCLSID
, LPFORMATETC, LPSTGMEDIUM);
STDAPI_(void) INOLE_RegisterAsRunning(IUnknown *, IMoniker *
, DWORD, LPDWORD);
STDAPI_(void) INOLE_RevokeAsRunning(LPDWORD);
STDAPI_(void) INOLE_NoteChangeTime(DWORD, FILETIME *, LPTSTR);
/*
* These are for ANSI compilations on Win32. Source code assumes
* a Win32 Unicode environment (or Win16 Ansi). These macros
* route Win32 ANSI compiled functions to wrappers which do the
* proper Unicode conversion.
*/
#ifdef WIN32ANSI
STDAPI INOLE_ConvertStringToANSI(LPCWSTR, LPSTR *);
STDAPI INOLE_StringFromCLSID(REFCLSID, LPSTR *);
STDAPI INOLE_StringFromGUID2(REFGUID, LPSTR, int);
STDAPI INOLE_ProgIDFromCLSID(REFCLSID, LPSTR *);
STDAPI INOLE_ReadFmtUserTypeStg(IStorage *, CLIPFORMAT *, LPSTR *);
STDAPI INOLE_WriteFmtUserTypeStg(IStorage *, CLIPFORMAT, LPSTR);
STDAPI INOLE_StgIsStorageFile(LPCSTR);
STDAPI INOLE_StgCreateDocfile(LPCSTR, DWORD, DWORD, IStorage **);
STDAPI INOLE_StgOpenStorage(LPCSTR, IStorage *, DWORD, SNB
, DWORD, IStorage **);
STDAPI INOLE_CreateFileMoniker(LPCSTR, LPMONIKER *);
STDAPI INOLE_CreateItemMoniker(LPCSTR, LPCSTR, LPMONIKER *);
STDAPI INOLE_MkParseDisplayName(LPBC, LPCSTR, ULONG *, LPMONIKER *);
STDAPI INOLE_OleCreateLinkToFile(LPCSTR, REFIID, DWORD, LPFORMATETC
, LPOLECLIENTSITE, LPSTORAGE, LPVOID *);
STDAPI INOLE_OleCreateFromFile(REFCLSID, LPCSTR, REFIID
, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, LPVOID *);
#ifndef NOMACROREDIRECT
#undef StringFromCLSID
#define StringFromCLSID(c, pp) INOLE_StringFromCLSID(c, pp)
#undef StringFromGUID2
#define StringFromGUID2(r, p, i) INOLE_StringFromGUID2(r, p, i)
#undef ProgIDFromCLSID
#define ProgIDFromCLSID(c, pp) INOLE_ProgIDFromCLSID(c, pp)
#undef ReadFmtUserTypeStg
#define ReadFmtUserTypeStg(p, c, s) INOLE_ReadFmtUserTypeStg(p, c, s)
#undef WriteFmtUserTypeStg
#define WriteFmtUserTypeStg(p, c, s) INOLE_WriteFmtUserTypeStg(p, c, s)
#undef StgIsStorageFile
#define StgIsStorageFile(s) INOLE_StgIsStorageFile(s)
#undef StgCreateDocfile
#define StgCreateDocfile(a, b, c, d) INOLE_StgCreateDocfile(a, b, c, d)
#undef StgOpenStorage
#define StgOpenStorage(a,b,c,d,e,f) INOLE_StgOpenStorage(a,b,c,d,e,f)
#undef CreateFileMoniker
#define CreateFileMoniker(p, i) INOLE_CreateFileMoniker(p, i)
#undef CreateItemMoniker
#define CreateItemMoniker(p1, p2, i) INOLE_CreateItemMoniker(p1, p2, i)
#undef MkParseDisplayName
#define MkParseDisplayName(b, p, u, i) INOLE_MkParseDisplayName(b, p, u, i)
#undef OleCreateLinkToFile
#define OleCreateLinkToFile(s, i, d, fe, cs, st, pv) INOLE_OleCreateLinkToFile(s, i, d, fe, cs, st, pv)
#undef OleCreateFromFile
#define OleCreateFromFile(c, s, i, d, fe, cs, st, pv) INOLE_OleCreateFromFile(c, s, i, d, fe, cs, st, pv)
#endif
#endif
//Versioning.
#define VERSIONMAJOR 2
#define VERSIONMINOR 0
#define VERSIONCURRENT 0x00020000
#define HIMETRIC_PER_INCH 2540
#define LOMETRIC_PER_INCH 254
#define LOMETRIC_BORDER 60 //Border around page
#define CREATE_FAILED 0
#define CREATE_GRAPHICONLY 1
//State flags
//CHAPTER24MOD
//Switched #defines to an enum
enum
{
TENANTSTATE_DEFAULT =0x00000000,
TENANTSTATE_SELECTED=0x00000001,
TENANTSTATE_OPEN =0x00000002,
TENANTSTATE_SHOWTYPE=0x00000004,
//New ones for controls.
TENANTSTATE_CONTROL =0x00000100,
TENANTSTATE_EVENTS =0x00000200,
TENANTSTATE_BUTTON =0x00000400,
TENANTSTATE_LABEL =0x00000800,
TENANTSTATE_DEFBUTTON =0x00001000,
TENANTSTATE_CANCELBUTTON=0x00002000
};
//To mask off non-control flags
#define STATEMASK_CONTROLS 0xFFFFFF00
/*
* Structures to save with the document describing the device
* configuration and pages that we have. This is followed by
* a list of DWORD IDs for the individual pages.
*/
typedef struct tagDEVICECONFIG
{
DWORD cb; //Size of structure
TCHAR szDriver[CCHDEVICENAME];
TCHAR szDevice[CCHDEVICENAME];
TCHAR szPort[CCHDEVICENAME];
DWORD cbDevMode; //Size of actual DEVMODE
DEVMODE dm; //Variable
} DEVICECONFIG, *PDEVICECONFIG;
//Offset to cbDevMode
#define CBSEEKOFFSETCBDEVMODE (sizeof(DWORD) \
+(3*CCHDEVICENAME*sizeof(TCHAR)))
//Combined OLE and Patron device structures.
typedef struct tagCOMBINEDEVICE
{
DVTARGETDEVICE td;
DEVICECONFIG dc;
} COMBINEBDEVICE, *PCOMBINEDEVICE;
void RectConvertMappings(LPRECT, HDC, BOOL);
//CHAPTER24MOD
#ifdef WIN32
#define PROP_POINTER TEXT("Pointer")
#else
#define PROP_SELECTOR "Selector"
#define PROP_OFFSET "Offset"
#endif
//End CHAPTER24MOD
BOOL ObjectEventsIID(LPUNKNOWN pObj, IID *piid);
BOOL InterfaceConnect(LPUNKNOWN pObj, REFIID riid
, LPUNKNOWN pIUnknownSink, LPDWORD pdwConn);
BOOL InterfaceDisconnect(LPUNKNOWN pObj, REFIID riid
, LPDWORD pdwConn);
BOOL ObjectTypeInfo(LPUNKNOWN pObj, LPTYPEINFO *ppITypeInfo);
BOOL ObjectTypeInfoEvents(LPUNKNOWN pObj, LPTYPEINFO *ppITypeInfo);
BOOL ObjectEventsIID(LPUNKNOWN pObj, IID *piid);
#define HIMETRIC_PER_INCH 2540 //Number HIMETRIC units per inch
#define PTS_PER_INCH 72 //Number points (font size) per inch
#define MAP_PIX_TO_LOGHIM(x,ppli) MulDiv(HIMETRIC_PER_INCH, (x), (ppli))
#define MAP_LOGHIM_TO_PIX(x,ppli) MulDiv((ppli), (x), HIMETRIC_PER_INCH)
//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;\
}
STDAPI_(void) XformRectInHimetricToPixels(HDC hDC, LPRECT prcHiMetric
, LPRECT prcPix);
#endif //_INOLE_H_