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

Windows编程

开发平台:

Visual C++

  1. /*************************************************************************
  2. **
  3. **    OLE 2.0 Property Set Utilities
  4. **
  5. **    suminfo.h
  6. **
  7. **    This file contains file contains data structure defintions,
  8. **    function prototypes, constants, etc. for OLE 2.0 Property Set
  9. **    utilities used to manage the Summary Info property set.
  10. **
  11. **    (c) Copyright Microsoft Corp. 1990 - 1996 All Rights Reserved
  12. **
  13. *************************************************************************/
  14. #ifndef SUMINFO_H
  15. #define SUMINFO_H
  16. #include <ole2.h>
  17. #include <oleauto.h>
  18. /* A SUMINFO variable is an instance of an abstract data type.  Thus,
  19. **    there can be an arbitrary number of SummaryInfo streams open
  20. **    simultaneously (subject to available memory).  Each variable must
  21. **    be initialized prior to use by calling Init and freed after its
  22. **    last use by calling Free.  The param argument to Init is reserved
  23. **    for future expansion and should be zero initially. Once a SUMINFO
  24. **    variable is allocated (by Init), the user can call the Set
  25. **    procedures to initialize fields.  A copy of the arguments is made
  26. **    in every case except SetThumbnail where control of the storage
  27. **    occupied by the METAFILEPICT is merely transferred.  When the
  28. **    Free routine is called, all storage will be deallocated including
  29. **    that of the thumbnail.  The arguments to SetThumbNail and the
  30. **    return values from GetThumbNail correspond to the OLE2.0 spec.
  31. **    Note that on input, the thumbnail is read on demand but all the
  32. **    other properties are pre-loaded.  The thumbnail is manipulated as
  33. **    a windows handle to a METAFILEPICT structure, which in turn
  34. **    contains a handle to the METAFILE.  The transferClip argument on
  35. **    GetThumbNail, when set to true, transfers responsibility for
  36. **    storage management of the thumbnail to the caller; that is, after
  37. **    Free has been called, the handle is still valid. Clear can be
  38. **    used to free storage for all the properties but then you must
  39. **    call Read to load them again.  All the code is based on FAR
  40. **    pointers.
  41. **    CoInitialize MUST be called PRIOR to calling OleStdInitSummaryInfo.
  42. **    Memory is allocated using the currently active IMalloc*
  43. **    allocator (as is returned by call CoGetMalloc(MEMCTX_TASK) ).
  44. **
  45. ** Common scenarios:
  46. **    Read SummaryInfo
  47. **    ----------------
  48. **      OleStdInitSummaryInfo()
  49. **      OleStdReadSummaryInfo()
  50. **      . . . . .
  51. **      call different Get routines
  52. **      . . . . .
  53. **      OleStdFreeSummaryInfo()
  54. **
  55. **    Create SummaryInfo
  56. **    ------------------
  57. **      OleStdInitSummaryInfo()
  58. **      call different Set routines
  59. **      OleStdWriteSummaryInfo()
  60. **      OleStdFreeSummaryInfo()
  61. **
  62. **    Update SummaryInfo
  63. **    ------------------
  64. **      OleStdInitSummaryInfo()
  65. **      OleStdReadSummaryInfo()
  66. **      OleStdGetThumbNailProperty(necessary only if no SetThumb)
  67. **      call different Set routines
  68. **      OleStdWriteSummaryInfo()
  69. **      OleStdFreeSummaryInfo()
  70. */
  71. #define WORDMAX 256     //current string max for APPS; 255 + null terminator
  72. typedef     union {
  73.      short    iVal;             /* VT_I2                */
  74.      long     lVal;             /* VT_I4                */
  75.      float    fltVal;           /* VT_R4                */
  76.      double       dblVal;       /* VT_R8                */
  77.      DWORD bool;                /* VT_BOOL              */
  78.      SCODE    scodeVal;         /* VT_ERROR             */
  79.      DWORD    systimeVal;       /* VT_SYSTIME           */
  80.      unsigned char bstrVal[WORDMAX]; /* VT_BSTR              */
  81.    } VTUNION;
  82. typedef struct _PROPSETLIST
  83.    {
  84.    FMTID formatID;
  85.    DWORD byteOffset;
  86.    } PROPSETLIST;
  87. typedef struct _PROPIDLIST
  88.    {
  89.    DWORD propertyID;
  90.    DWORD byteOffset;
  91.    } PROPIDLIST;
  92. typedef struct _PROPVALUE
  93.    {
  94.    DWORD vtType;
  95.    VTUNION vtValue;
  96.    } PROPVALUE;
  97. typedef struct _SECTION
  98.    {
  99.    DWORD cBytes;
  100.    DWORD cProperties;
  101.    PROPIDLIST rgPropId[1/*cProperties*/];  //variable-length array
  102.    PROPVALUE rgPropValue[1];      //CANNOT BE ACCESSED BY NAME; ONLY BY POINTER
  103.    } SECTION;
  104. typedef struct _SUMMARYINFO
  105.    {
  106.    WORD byteOrder;
  107.    WORD formatVersion;
  108.    WORD getOSVersion;
  109.    WORD osVersion;
  110.    CLSID classId;  //from compobj.h
  111.    DWORD cSections;
  112.    PROPSETLIST rgPropSet[1/*cSections*/]; //variable-length array
  113.    SECTION rgSections[1/*cSections*/];    //CANNOT BE ACCESSED BY NAME; ONLY BY POINTER
  114.    } SUMMARYINFO;
  115. #define osWinOnDos 0
  116. #define osMac 1
  117. #define osWinNT 2
  118. #define cPIDSI_STANDARD (PIDSI_DOC_SECURITY+1-2)
  119. #ifndef WIN32
  120. #define MAXWORD 256         //maximum string size for APPS at present
  121. #endif
  122. typedef struct _STDZ
  123.    {
  124.    DWORD vtType;
  125.    union {
  126.    DWORD vtByteCount;
  127.    OLECHAR fill[4];  //use last byte as byte count for stz requests
  128.    };
  129.    OLECHAR rgchars[MAXWORD];
  130.    } STDZ;
  131. #define VTCB fill[3]    //used to set/get the count byte when in memory
  132. typedef struct _THUMB
  133.    {
  134.    DWORD vtType;
  135.    DWORD cBytes;       //clip size in memory
  136.    DWORD selector;     //on disk -1,win clip no.  -2,mac clip no. -3,ole FMTID  0,bytes  nameLength, format name
  137.    DWORD clipFormat;
  138.    LPOLESTR lpstzName;
  139.    LPOLESTR lpByte;
  140.    } THUMB;
  141. #define VT_CF_BYTES 0
  142. #define VT_CF_WIN (-1)
  143. #define VT_CF_MAC (-2)
  144. #define VT_CF_FMTID (-3)
  145. #define VT_CF_NAME (-4)
  146. #define VT_CF_EMPTY (-5)
  147. #define VT_CF_OOM (-6)      // Out of memory
  148. typedef THUMB FAR *LPTHUMB;
  149. typedef STDZ FAR *LPSTDZ;
  150. typedef struct _TIME
  151.    {
  152.    DWORD vtType;
  153.    FILETIME time;
  154.    } TIME;
  155. typedef struct _INTS
  156.    {
  157.    DWORD vtType;
  158.    DWORD value;
  159.    } INTS;
  160. #define MAXTIME (PIDSI_LASTSAVE_DTM-PIDSI_EDITTIME+1)
  161. #define MAXINTS (PIDSI_CHARCOUNT-PIDSI_PAGECOUNT+1+1)
  162. #define MAXSTDZ (PIDSI_REVNUMBER-PIDSI_TITLE+1+1)
  163. typedef struct _STANDARDSECINMEM
  164.    {
  165.    DWORD cBytes;
  166.    DWORD cProperties;
  167.    PROPIDLIST rgPropId[cPIDSI_STANDARD/*cProperties*/];  //variable-length array
  168.    TIME rgTime[MAXTIME];
  169.    INTS rgInts[MAXINTS];
  170.    LPSTDZ rglpsz[MAXSTDZ];
  171.    THUMB thumb;
  172.    } STANDARDSECINMEM;
  173. #define OFFSET_NIL 0X00000000
  174. #define AllSecurityFlagsEqNone 0
  175. #define fSecurityPassworded 1
  176. #define fSecurityRORecommended 2
  177. #define fSecurityRO 4
  178. #define fSecurityLockedForAnnotations 8
  179. #define PropStreamNamePrefixByte '05'
  180. #define PropStreamName "05SummaryInformation"
  181. #define cbNewSummaryInfo(nSection) (sizeof(SUMMARYINFO)-sizeof(SECTION)+sizeof(PROPSETLIST)*((nSection)-1))
  182. #define cbNewSection(nPropIds) (sizeof(SECTION)-sizeof(PROPVALUE)+sizeof(PROPIDLIST)*((nPropIds)-1))
  183. #define FIntelOrder(prop) ((prop)->byteOrder==0xfffe)
  184. #define SetOs(prop, os) {(prop)->osVersion=os; (prop)->getOSVersion=LOWORD(GetVersion());}
  185. #define SetSumInfFMTID(fmtId) {(fmtId)->Data1=0XF29F85E0; *(long FAR *)&(fmtId)->Data2=0X10684FF9;
  186.             *(long FAR *)&(fmtId)->Data4[0]=0X000891AB; *(long FAR *)&(fmtId)->Data4[4]=0XD9B3272B;}
  187. #define FEqSumInfFMTID(fmtId) ((fmtId)->dword==0XF29F85E0&&*((long FAR *)&(fmtId)->words)==0X10684FF9&&
  188.             *((long FAR *)&(fmtId)->bytes[0])==0X000891AB&&*((long FAR *)&(fmtId)->bytes[4])==0XD9B3272B)
  189. #define FSzEqPropStreamName(sz) _fstricmp(sz, PropStreamName)
  190. #define ClearSumInf(lpsuminf, cb) {_fmemset(lpsuminf,0,cb); (lpsuminf)->byteOrder=0xfffe;
  191.             SetOs(lpsuminf, osWinOnDos);}
  192. typedef void FAR *LPSUMINFO;
  193. typedef LPSTR LPSTZR;
  194. typedef void FAR *THUMBNAIL;  //for VT_CF_WIN this is an unlocked global handle
  195. #define API __far __pascal
  196. /*************************************************************************
  197. ** Public Summary Info Property Set Management API
  198. *************************************************************************/
  199. extern "C" {
  200. STDAPI_(LPSUMINFO) OleStdInitSummaryInfo(int reserved);
  201. STDAPI_(void) OleStdFreeSummaryInfo(LPSUMINFO FAR *lplp);
  202. STDAPI_(void) OleStdClearSummaryInfo(LPSUMINFO lp);
  203. STDAPI_(int) OleStdReadSummaryInfo(LPSTREAM lpStream, LPSUMINFO lp);
  204. STDAPI_(int) OleStdWriteSummaryInfo(LPSTREAM lpStream, LPSUMINFO lp);
  205. STDAPI_(DWORD) OleStdGetSecurityProperty(LPSUMINFO lp);
  206. STDAPI_(int) OleStdSetSecurityProperty(LPSUMINFO lp, DWORD security);
  207. STDAPI_(LPSTR) OleStdGetStringProperty(LPSUMINFO lp, DWORD pid);
  208. STDAPI_(int) OleStdSetStringProperty(LPSUMINFO lp, DWORD pid, LPOLESTR lpsz);
  209. STDAPI_(LPSTZR) OleStdGetStringZProperty(LPSUMINFO lp, DWORD pid);
  210. STDAPI_(void) OleStdGetDocProperty(
  211.       LPSUMINFO       lp,
  212.       DWORD FAR*      nPage,
  213.       DWORD FAR*      nWords,
  214.       DWORD FAR*      nChars
  215. );
  216. STDAPI_(int) OleStdSetDocProperty(
  217.       LPSUMINFO       lp,
  218.       DWORD           nPage,
  219.       DWORD           nWords,
  220.       DWORD           nChars
  221. );
  222. STDAPI_(int) OleStdGetThumbNailProperty(
  223.       LPSTREAM        lps,
  224.       LPSUMINFO       lp,
  225.       DWORD FAR*      clipFormatNo,
  226.       LPOLESTR FAR*   lpszName,
  227.       THUMBNAIL FAR*  clip,
  228.       DWORD FAR*      byteCount,
  229.       BOOL            transferClip
  230. );
  231. STDAPI_(int) OleStdSetThumbNailProperty(
  232.       LPSTREAM        lps,
  233.       LPSUMINFO       lp,
  234.       int             vtcfNo,
  235.       DWORD           clipFormatNo,
  236.       LPOLESTR        lpszName,
  237.       THUMBNAIL       clip,
  238.       DWORD           byteCount
  239. );
  240. STDAPI_(void) OleStdGetDateProperty(
  241.       LPSUMINFO       lp,
  242.       DWORD           pid,
  243.       int FAR*        yr,
  244.       int FAR*        mo,
  245.       int FAR*        dy,
  246.       DWORD FAR*      sc
  247. );
  248. STDAPI_(int) OleStdSetDateProperty(
  249.       LPSUMINFO       lp,
  250.       DWORD           pid,
  251.       int             yr,
  252.       int             mo,
  253.       int             dy,
  254.       int             hr,
  255.       int             mn,
  256.       int             sc
  257. );
  258. } //END C
  259. /*************************************************************************
  260. ** DEBUG ASSERTION ROUTINES
  261. *************************************************************************/
  262. #if DBG
  263. #include "assert.h"
  264. #define FnAssert(lpstrExpr, lpstrMsg, lpstrFileName, iLine)     
  265.         (_assert(lpstrMsg ? lpstrMsg : lpstrExpr,               
  266.                  lpstrFileName,                                 
  267.                  iLine), NOERROR)
  268. #endif //DBG
  269. #endif  // SUMINFO_H