INOLE.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * INOLE.H
  3.  *
  4.  * Master header file for all Inside OLE samples.
  5.  *
  6.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  7.  *
  8.  * Kraig Brockschmidt, Microsoft
  9.  * Internet  :  kraigb@microsoft.com
  10.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  11.  */
  12. #ifndef _INOLE_H_
  13. #define _INOLE_H_
  14. #define INC_OLE2
  15. #include <windows.h>
  16. #include <ole2.h>
  17. #include <ole2ver.h>
  18. #ifdef INC_OLEUI
  19. #ifdef WIN32
  20. /*
  21.  * Comment the next line and remove the comment from the
  22.  * line after it to compile for Windows NT 3.5.
  23.  */
  24. #include <oledlg.h>
  25. //#include <ole2ui.h>
  26. #else
  27. #include <ole2ui.h>
  28. #endif
  29. #endif
  30. #include <bookguid.h>
  31. #ifdef INC_CONTROLS
  32. #define INC_AUTOMATION
  33. #endif
  34. #ifdef INC_AUTOMATION
  35. #ifndef WIN32
  36. #include <dispatch.h>
  37. #include <olenls.h>
  38. #else
  39. #include <oleauto.h>
  40. #endif
  41. #endif
  42. #ifdef INC_CONTROLS
  43. #include <olectl.h>
  44. #ifndef INITGUIDS
  45. #include <olectlid.h>
  46. #endif
  47. #endif
  48. #ifdef WIN32
  49. #include <tchar.h>
  50. #ifdef UNICODE
  51. #include <wchar.h>
  52. #endif
  53. #endif
  54. #ifndef WIN32
  55. #include <shellapi.h>
  56. #include <malloc.h>
  57. #endif
  58. #include <book1632.h>
  59. #include <dbgout.h>
  60. #ifdef INC_CLASSLIB
  61. extern "C"
  62.     {
  63.     #include <commdlg.h>
  64.    #ifndef WIN32
  65.     #include <print.h>
  66.     #include <dlgs.h>
  67.    #endif
  68.     }
  69. #include <classlib.h>
  70. #endif
  71. //Types that OLE2.H et. al. leave out
  72. #ifndef PPVOID
  73. typedef LPVOID * PPVOID;
  74. #endif  //PPVOID
  75. #ifdef _OLE2_H_   //May not include ole2.h at all times.
  76. #ifndef PPOINTL
  77. typedef POINTL * PPOINTL;
  78. #endif  //PPOINTL
  79. #ifndef _WIN32
  80. #ifndef OLECHAR
  81. typedef char OLECHAR;
  82. typedef OLECHAR FAR* LPOLESTR;
  83. typedef const OLECHAR FAR* LPCOLESTR;
  84. #endif //OLECHAR
  85. #endif //_WIN32
  86. //Useful macros.
  87. #define SETFormatEtc(fe, cf, asp, td, med, li)   
  88.     {
  89.     (fe).cfFormat=cf;
  90.     (fe).dwAspect=asp;
  91.     (fe).ptd=td;
  92.     (fe).tymed=med;
  93.     (fe).lindex=li;
  94.     }
  95. #define SETDefFormatEtc(fe, cf, med)   
  96.     {
  97.     (fe).cfFormat=cf;
  98.     (fe).dwAspect=DVASPECT_CONTENT;
  99.     (fe).ptd=NULL;
  100.     (fe).tymed=med;
  101.     (fe).lindex=-1;
  102.     }
  103. #define SETRECTL(rcl, l, t, r, b) 
  104.     {
  105.     (rcl).left=l;
  106.     (rcl).top=t;
  107.     (rcl).right=r;
  108.     (rcl).bottom=b;
  109.     }
  110. #define SETSIZEL(szl, h, v) 
  111.     {
  112.     (szl).cx=h;
  113.     (szl).cy=v;
  114.     }
  115. #define RECTLFROMRECT(rcl, rc)
  116.     {
  117.     (rcl).left=(long)(rc).left;
  118.     (rcl).top=(long)(rc).top;
  119.     (rcl).right=(long)(rc).right;
  120.     (rcl).bottom=(long)(rc).bottom;
  121.     }
  122. #define RECTFROMRECTL(rc, rcl)
  123.     {
  124.     (rc).left=(int)(rcl).left;
  125.     (rc).top=(int)(rcl).top;
  126.     (rc).right=(int)(rcl).right;
  127.     (rc).bottom=(int)(rcl).bottom;
  128.     }
  129. #define POINTLFROMPOINT(ptl, pt) 
  130.     { 
  131.     (ptl).x=(long)(pt).x; 
  132.     (ptl).y=(long)(pt).y; 
  133.     }
  134. #define POINTFROMPOINTL(pt, ptl) 
  135.     { 
  136.     (pt).x=(int)(ptl).x; 
  137.     (pt).y=(int)(ptl).y; 
  138.     }
  139. //Here's one that should be in windows.h
  140. #define SETPOINT(pt, h, v) 
  141.     {
  142.     (pt).x=h;
  143.     (pt).y=v;
  144.     }
  145. #define SETPOINTL(ptl, h, v) 
  146.     {
  147.     (ptl).x=h;
  148.     (ptl).y=v;
  149.     }
  150. #endif  //_OLE2_H_
  151. #ifdef INC_AUTOMATION
  152. //Macros for setting DISPPARAMS structures
  153. #define SETDISPPARAMS(dp, numArgs, pvArgs, numNamed, pNamed) 
  154.     {
  155.     (dp).cArgs=numArgs;
  156.     (dp).rgvarg=pvArgs;
  157.     (dp).cNamedArgs=numNamed;
  158.     (dp).rgdispidNamedArgs=pNamed;
  159.     }
  160. #define SETNOPARAMS(dp) SETDISPPARAMS(dp, 0, NULL, 0, NULL)
  161. //Macros for setting EXCEPINFO structures
  162. #define SETEXCEPINFO(ei, excode, src, desc, file, ctx, func, scd) 
  163.     {
  164.     (ei).wCode=excode;
  165.     (ei).wReserved=0;
  166.     (ei).bstrSource=src;
  167.     (ei).bstrDescription=desc;
  168.     (ei).bstrHelpFile=file;
  169.     (ei).dwHelpContext=ctx;
  170.     (ei).pvReserved=NULL;
  171.     (ei).pfnDeferredFillIn=func;
  172.     (ei).scode=scd;
  173.     }
  174. #define INITEXCEPINFO(ei) 
  175.         SETEXCEPINFO(ei,0,NULL,NULL,NULL,0L,NULL,S_OK)
  176. #endif
  177. /*
  178.  * State flags for IPersistStorage implementations.  These
  179.  * are kept here to avoid repeating the code in all samples.
  180.  */
  181. typedef enum
  182.     {
  183.     PSSTATE_UNINIT,     //Uninitialized
  184.     PSSTATE_SCRIBBLE,   //Scribble
  185.     PSSTATE_ZOMBIE,     //No scribble
  186.     PSSTATE_HANDSOFF    //Hand-off
  187.     } PSSTATE;
  188. /*
  189.  * Identifers to describe which persistence model an object
  190.  * is using, along with a union type that holds on the the
  191.  * appropriate pointers that a client may need.
  192.  */
  193. typedef enum
  194.     {
  195.     PERSIST_UNKNOWN=0,
  196.     PERSIST_STORAGE,
  197.     PERSIST_STREAM,
  198.     PERSIST_STREAMINIT,
  199.     PERSIST_FILE
  200.     } PERSIST_MODEL;
  201. typedef struct
  202.     {
  203.     PERSIST_MODEL   psModel;
  204.     union
  205.         {
  206.         IPersistStorage    *pIPersistStorage;
  207.         IPersistStream     *pIPersistStream;
  208.        #ifdef INC_CONTROLS
  209.         IPersistStreamInit *pIPersistStreamInit;
  210.        #endif
  211.         IPersistFile       *pIPersistFile;
  212.         } pIP;
  213.     } PERSISTPOINTER, *PPERSISTPOINTER;
  214. //To identify a storage in which to save, load, or create.
  215. typedef struct
  216.     {
  217.     PERSIST_MODEL   psModel;
  218.     union
  219.         {
  220.         IStorage    *pIStorage;
  221.         IStream     *pIStream;
  222.         } pIS;
  223.     } STGPOINTER, *PSTGPOINTER;
  224. //Type for an object-destroyed callback
  225. typedef void (*PFNDESTROYED)(void);
  226. //DeleteInterfaceImp calls 'delete' and NULLs the pointer
  227. #define DeleteInterfaceImp(p)
  228.             {
  229.             if (NULL!=p)
  230.                 {
  231.                 delete p;
  232.                 p=NULL;
  233.                 }
  234.             }
  235. //ReleaseInterface calls 'Release' and NULLs the pointer
  236. #define ReleaseInterface(p)
  237.             {
  238.             IUnknown *pt=(IUnknown *)p;
  239.             p=NULL;
  240.             if (NULL!=pt)
  241.                 pt->Release();
  242.             }
  243. //OLE Documents Clipboard Formats
  244. #define CFSTR_EMBEDSOURCE       TEXT("Embed Source")
  245. #define CFSTR_EMBEDDEDOBJECT    TEXT("Embedded Object")
  246. #define CFSTR_LINKSOURCE        TEXT("Link Source")
  247. #define CFSTR_CUSTOMLINKSOURCE  TEXT("Custom Link Source")
  248. #define CFSTR_OBJECTDESCRIPTOR  TEXT("Object Descriptor")
  249. #define CFSTR_LINKSRCDESCRIPTOR TEXT("Link Source Descriptor")
  250. //Functions in the helper DLL, INOLE.DLL
  251. //UI Effects
  252. STDAPI_(void) UIDrawHandles(LPRECT, HDC, DWORD, UINT, BOOL);
  253. STDAPI_(void) UIDrawShading(LPRECT, HDC, DWORD, UINT);
  254. STDAPI_(void) UIShowObject(LPCRECT, HDC, BOOL);
  255. //For UIDrawHandles
  256. #define UI_HANDLES_USEINVERSE    0x00000001L
  257. #define UI_HANDLES_NOBORDER      0x00000002L
  258. #define UI_HANDLES_INSIDE        0x00000004L
  259. #define UI_HANDLES_OUTSIDE       0x00000008L
  260. //For UIDrawShading
  261. #define UI_SHADE_FULLRECT        1
  262. #define UI_SHADE_BORDERIN        2
  263. #define UI_SHADE_BORDEROUT       3
  264. //Coordinate Munging
  265. STDAPI_(int)  XformWidthInHimetricToPixels(HDC,  int);
  266. STDAPI_(int)  XformWidthInPixelsToHimetric(HDC,  int);
  267. STDAPI_(int)  XformHeightInHimetricToPixels(HDC, int);
  268. STDAPI_(int)  XformHeightInPixelsToHimetric(HDC, int);
  269. STDAPI_(void) XformRectInPixelsToHimetric(HDC, LPRECT,  LPRECT);
  270. STDAPI_(void) XformRectInHimetricToPixels(HDC, LPRECT,  LPRECT);
  271. STDAPI_(void) XformSizeInPixelsToHimetric(HDC, LPSIZEL, LPSIZEL);
  272. STDAPI_(void) XformSizeInHimetricToPixels(HDC, LPSIZEL, LPSIZEL);
  273. //Helpers
  274. STDAPI_(void)     INOLE_MetafilePictIconFree(HGLOBAL);
  275. STDAPI            INOLE_SwitchDisplayAspect(IUnknown *, LPDWORD, DWORD
  276.                       , HGLOBAL, BOOL, BOOL, IAdviseSink *, BOOL *);
  277. STDAPI            INOLE_SetIconInCache(IUnknown *, HGLOBAL);
  278. STDAPI_(UINT)     INOLE_GetUserTypeOfClass(REFCLSID, UINT, LPTSTR
  279.                       , UINT);
  280. STDAPI            INOLE_DoConvert(IStorage *, REFCLSID);
  281. STDAPI_(LPTSTR)   INOLE_CopyString(LPTSTR);
  282. STDAPI_(HGLOBAL)  INOLE_ObjectDescriptorFromOleObject(IOleObject *
  283.                       , DWORD, POINTL, LPSIZEL);
  284. STDAPI_(HGLOBAL)  INOLE_AllocObjectDescriptor(CLSID, DWORD
  285.                       , SIZEL, POINTL, DWORD, LPTSTR, LPTSTR);
  286. STDAPI_(IStorage *) INOLE_CreateStorageOnHGlobal(DWORD);
  287. STDAPI            INOLE_GetLinkSourceData(IMoniker *, LPCLSID
  288.                       , LPFORMATETC, LPSTGMEDIUM);
  289. STDAPI_(void)     INOLE_RegisterAsRunning(IUnknown *, IMoniker *
  290.                       , DWORD, LPDWORD);
  291. STDAPI_(void)     INOLE_RevokeAsRunning(LPDWORD);
  292. STDAPI_(void)     INOLE_NoteChangeTime(DWORD, FILETIME *, LPTSTR);
  293. /*
  294.  * These are for ANSI compilations on Win32.  Source code assumes
  295.  * a Win32 Unicode environment (or Win16 Ansi).  These macros
  296.  * route Win32 ANSI compiled functions to wrappers which do the
  297.  * proper Unicode conversion.
  298.  */
  299. #ifdef WIN32ANSI
  300. STDAPI INOLE_ConvertStringToANSI(LPCWSTR, LPSTR *);
  301. STDAPI INOLE_StringFromCLSID(REFCLSID, LPSTR *);
  302. STDAPI INOLE_StringFromGUID2(REFGUID, LPSTR, int);
  303. STDAPI INOLE_ProgIDFromCLSID(REFCLSID, LPSTR *);
  304. STDAPI INOLE_ReadFmtUserTypeStg(IStorage *, CLIPFORMAT *, LPSTR *);
  305. STDAPI INOLE_WriteFmtUserTypeStg(IStorage *, CLIPFORMAT, LPSTR);
  306. STDAPI INOLE_StgIsStorageFile(LPCSTR);
  307. STDAPI INOLE_StgCreateDocfile(LPCSTR, DWORD, DWORD, IStorage **);
  308. STDAPI INOLE_StgOpenStorage(LPCSTR, IStorage *, DWORD, SNB
  309.            , DWORD, IStorage **);
  310. STDAPI INOLE_CreateFileMoniker(LPCSTR, LPMONIKER *);
  311. STDAPI INOLE_CreateItemMoniker(LPCSTR, LPCSTR, LPMONIKER *);
  312. STDAPI INOLE_MkParseDisplayName(LPBC, LPCSTR, ULONG *, LPMONIKER *);
  313. STDAPI INOLE_OleCreateLinkToFile(LPCSTR, REFIID, DWORD, LPFORMATETC
  314.            , LPOLECLIENTSITE, LPSTORAGE, LPVOID *);
  315. STDAPI INOLE_OleCreateFromFile(REFCLSID, LPCSTR, REFIID
  316.            , DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, LPVOID *);
  317. #ifndef NOMACROREDIRECT
  318. #undef StringFromCLSID
  319. #define StringFromCLSID(c, pp) INOLE_StringFromCLSID(c, pp)
  320. #undef StringFromGUID2
  321. #define StringFromGUID2(r, p, i) INOLE_StringFromGUID2(r, p, i)
  322. #undef ProgIDFromCLSID
  323. #define ProgIDFromCLSID(c, pp) INOLE_ProgIDFromCLSID(c, pp)
  324. #undef ReadFmtUserTypeStg
  325. #define ReadFmtUserTypeStg(p, c, s) INOLE_ReadFmtUserTypeStg(p, c, s)
  326. #undef WriteFmtUserTypeStg
  327. #define WriteFmtUserTypeStg(p, c, s) INOLE_WriteFmtUserTypeStg(p, c, s)
  328. #undef StgIsStorageFile
  329. #define StgIsStorageFile(s) INOLE_StgIsStorageFile(s)
  330. #undef StgCreateDocfile
  331. #define StgCreateDocfile(a, b, c, d) INOLE_StgCreateDocfile(a, b, c, d)
  332. #undef StgOpenStorage
  333. #define StgOpenStorage(a,b,c,d,e,f) INOLE_StgOpenStorage(a,b,c,d,e,f)
  334. #undef CreateFileMoniker
  335. #define CreateFileMoniker(p, i) INOLE_CreateFileMoniker(p, i)
  336. #undef CreateItemMoniker
  337. #define CreateItemMoniker(p1, p2, i) INOLE_CreateItemMoniker(p1, p2, i)
  338. #undef MkParseDisplayName
  339. #define MkParseDisplayName(b, p, u, i) INOLE_MkParseDisplayName(b, p, u, i)
  340. #undef OleCreateLinkToFile
  341. #define OleCreateLinkToFile(s, i, d, fe, cs, st, pv) INOLE_OleCreateLinkToFile(s, i, d, fe, cs, st, pv)
  342. #undef OleCreateFromFile
  343. #define OleCreateFromFile(c, s, i, d, fe, cs, st, pv) INOLE_OleCreateFromFile(c, s, i, d, fe, cs, st, pv)
  344. #endif
  345. #endif
  346. #endif //_INOLE_H_