home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 19.ddi / GENINC32.PAK / WINGDI.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  111.0 KB  |  3,132 lines

  1. /*++ BUILD Version: 0004    // Increment this if a change has global effects
  2.  
  3. Copyright (c) 1985-91, Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     wingdi.h
  8.  
  9. Abstract:
  10.  
  11.     Procedure declarations, constant definitions and macros for the GDI
  12.     component.
  13.  
  14. --*/
  15.  
  16. #ifndef __WINGDI_H
  17. #define __WINGDI_H
  18.  
  19.  
  20. #ifndef __WINDEF_H
  21. #include <windef.h>
  22. #endif
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27.  
  28. #ifndef NOGDI
  29.  
  30. #ifndef NORASTEROPS
  31.  
  32. /* Binary raster ops */
  33. #define R2_BLACK            1   /*  0       */
  34. #define R2_NOTMERGEPEN      2   /* DPon     */
  35. #define R2_MASKNOTPEN       3   /* DPna     */
  36. #define R2_NOTCOPYPEN       4   /* PN       */
  37. #define R2_MASKPENNOT       5   /* PDna     */
  38. #define R2_NOT              6   /* Dn       */
  39. #define R2_XORPEN           7   /* DPx      */
  40. #define R2_NOTMASKPEN       8   /* DPan     */
  41. #define R2_MASKPEN          9   /* DPa      */
  42. #define R2_NOTXORPEN        10  /* DPxn     */
  43. #define R2_NOP              11  /* D        */
  44. #define R2_MERGENOTPEN      12  /* DPno     */
  45. #define R2_COPYPEN          13  /* P        */
  46. #define R2_MERGEPENNOT      14  /* PDno     */
  47. #define R2_MERGEPEN         15  /* DPo      */
  48. #define R2_WHITE            16  /*  1       */
  49. #define R2_LAST             16
  50.  
  51. /* Ternary raster operations */
  52. #define SRCCOPY             (DWORD)0x00CC0020 /* dest = source                   */
  53. #define SRCPAINT            (DWORD)0x00EE0086 /* dest = source OR dest           */
  54. #define SRCAND              (DWORD)0x008800C6 /* dest = source AND dest          */
  55. #define SRCINVERT           (DWORD)0x00660046 /* dest = source XOR dest          */
  56. #define SRCERASE            (DWORD)0x00440328 /* dest = source AND (NOT dest )   */
  57. #define NOTSRCCOPY          (DWORD)0x00330008 /* dest = (NOT source)             */
  58. #define NOTSRCERASE         (DWORD)0x001100A6 /* dest = (NOT src) AND (NOT dest) */
  59. #define MERGECOPY           (DWORD)0x00C000CA /* dest = (source AND pattern)     */
  60. #define MERGEPAINT          (DWORD)0x00BB0226 /* dest = (NOT source) OR dest     */
  61. #define PATCOPY             (DWORD)0x00F00021 /* dest = pattern                  */
  62. #define PATPAINT            (DWORD)0x00FB0A09 /* dest = DPSnoo                   */
  63. #define PATINVERT           (DWORD)0x005A0049 /* dest = pattern XOR dest         */
  64. #define DSTINVERT           (DWORD)0x00550009 /* dest = (NOT dest)               */
  65. #define BLACKNESS           (DWORD)0x00000042 /* dest = BLACK                    */
  66. #define WHITENESS           (DWORD)0x00FF0062 /* dest = WHITE                    */
  67.  
  68. /* Quaternary raster codes */
  69. #define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore))
  70.  
  71. #endif /* NORASTEROPS */
  72.  
  73. #define GDI_ERROR (0xFFFFFFFFL)
  74. #define HGDI_ERROR ((HANDLE)(0xFFFFFFFFL))
  75.  
  76. /* Region Flags */
  77. #define ERROR               0
  78. #define NULLREGION          1
  79. #define SIMPLEREGION        2
  80. #define COMPLEXREGION       3
  81. #define RGN_ERROR ERROR
  82.  
  83. /* CombineRgn() Styles */
  84. #define RGN_AND             1
  85. #define RGN_OR              2
  86. #define RGN_XOR             3
  87. #define RGN_DIFF            4
  88. #define RGN_COPY            5
  89. #define RGN_MIN             RGN_AND
  90. #define RGN_MAX             RGN_COPY
  91.  
  92. /* StretchBlt() Modes */
  93. #define BLACKONWHITE                 1
  94. #define WHITEONBLACK                 2
  95. #define COLORONCOLOR                 3
  96. #define HALFTONE                     4
  97. #define MAXSTRETCHBLTMODE            4
  98.  
  99. /* PolyFill() Modes */
  100. #define ALTERNATE                    1
  101. #define WINDING                      2
  102. #define POLYFILL_LAST                2
  103.  
  104. /* Text Alignment Options */
  105. #define TA_NOUPDATECP                0
  106. #define TA_UPDATECP                  1
  107.  
  108. #define TA_LEFT                      0
  109. #define TA_RIGHT                     2
  110. #define TA_CENTER                    6
  111.  
  112. #define TA_TOP                       0
  113. #define TA_BOTTOM                    8
  114. #define TA_BASELINE                  24
  115. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP)
  116.  
  117. #define VTA_BASELINE TA_BASELINE
  118. #define VTA_LEFT     TA_BOTTOM
  119. #define VTA_RIGHT    TA_TOP
  120. #define VTA_CENTER   TA_CENTER
  121. #define VTA_BOTTOM   TA_RIGHT
  122. #define VTA_TOP      TA_LEFT
  123.  
  124.  
  125. #define ETO_GRAYED                   1
  126. #define ETO_OPAQUE                   2
  127. #define ETO_CLIPPED                  4
  128.  
  129. #define ASPECT_FILTERING             0x0001
  130.  
  131. /* Bounds Accumulation APIs */
  132.  
  133. #define DCB_RESET       0x0001
  134. #define DCB_ACCUMULATE  0x0002
  135. #define DCB_DIRTY       DCB_ACCUMULATE
  136. #define DCB_SET         (DCB_RESET | DCB_ACCUMULATE)
  137. #define DCB_ENABLE      0x0004
  138. #define DCB_DISABLE     0x0008
  139.  
  140. #ifndef NOMETAFILE
  141.  
  142. /* Metafile Functions */
  143. #define META_SETBKCOLOR              0x0201
  144. #define META_SETBKMODE               0x0102
  145. #define META_SETMAPMODE              0x0103
  146. #define META_SETROP2                 0x0104
  147. #define META_SETRELABS               0x0105
  148. #define META_SETPOLYFILLMODE         0x0106
  149. #define META_SETSTRETCHBLTMODE       0x0107
  150. #define META_SETTEXTCHAREXTRA        0x0108
  151. #define META_SETTEXTCOLOR            0x0209
  152. #define META_SETTEXTJUSTIFICATION    0x020A
  153. #define META_SETWINDOWORG            0x020B
  154. #define META_SETWINDOWEXT            0x020C
  155. #define META_SETVIEWPORTORG          0x020D
  156. #define META_SETVIEWPORTEXT          0x020E
  157. #define META_OFFSETWINDOWORG         0x020F
  158. #define META_SCALEWINDOWEXT          0x0410
  159. #define META_OFFSETVIEWPORTORG       0x0211
  160. #define META_SCALEVIEWPORTEXT        0x0412
  161. #define META_LINETO                  0x0213
  162. #define META_MOVETO                  0x0214
  163. #define META_EXCLUDECLIPRECT         0x0415
  164. #define META_INTERSECTCLIPRECT       0x0416
  165. #define META_ARC                     0x0817
  166. #define META_ELLIPSE                 0x0418
  167. #define META_FLOODFILL               0x0419
  168. #define META_PIE                     0x081A
  169. #define META_RECTANGLE               0x041B
  170. #define META_ROUNDRECT               0x061C
  171. #define META_PATBLT                  0x061D
  172. #define META_SAVEDC                  0x001E
  173. #define META_SETPIXEL                0x041F
  174. #define META_OFFSETCLIPRGN           0x0220
  175. #define META_TEXTOUT                 0x0521
  176. #define META_BITBLT                  0x0922
  177. #define META_STRETCHBLT              0x0B23
  178. #define META_POLYGON                 0x0324
  179. #define META_POLYLINE                0x0325
  180. #define META_ESCAPE                  0x0626
  181. #define META_RESTOREDC               0x0127
  182. #define META_FILLREGION              0x0228
  183. #define META_FRAMEREGION             0x0429
  184. #define META_INVERTREGION            0x012A
  185. #define META_PAINTREGION             0x012B
  186. #define META_SELECTCLIPREGION        0x012C
  187. #define META_SELECTOBJECT            0x012D
  188. #define META_SETTEXTALIGN            0x012E
  189. #define META_CHORD                   0x0830
  190. #define META_SETMAPPERFLAGS          0x0231
  191. #define META_EXTTEXTOUT              0x0a32
  192. #define META_SETDIBTODEV             0x0d33
  193. #define META_SELECTPALETTE           0x0234
  194. #define META_REALIZEPALETTE          0x0035
  195. #define META_ANIMATEPALETTE          0x0436
  196. #define META_SETPALENTRIES           0x0037
  197. #define META_POLYPOLYGON             0x0538
  198. #define META_RESIZEPALETTE           0x0139
  199. #define META_DIBBITBLT               0x0940
  200. #define META_DIBSTRETCHBLT           0x0b41
  201. #define META_DIBCREATEPATTERNBRUSH   0x0142
  202. #define META_STRETCHDIB              0x0f43
  203. #define META_EXTFLOODFILL            0x0548
  204. #define META_DELETEOBJECT            0x01f0
  205. #define META_CREATEPALETTE           0x00f7
  206. #define META_CREATEPATTERNBRUSH      0x01F9
  207. #define META_CREATEPENINDIRECT       0x02FA
  208. #define META_CREATEFONTINDIRECT      0x02FB
  209. #define META_CREATEBRUSHINDIRECT     0x02FC
  210. #define META_CREATEREGION            0x06FF
  211.  
  212. #endif /* NOMETAFILE */
  213.  
  214. /* GDI Escapes */
  215. #define NEWFRAME                     1
  216. #define ABORTDOC                     2
  217. #define NEXTBAND                     3
  218. #define SETCOLORTABLE                4
  219. #define GETCOLORTABLE                5
  220. #define FLUSHOUTPUT                  6
  221. #define DRAFTMODE                    7
  222. #define QUERYESCSUPPORT              8
  223. #define SETABORTPROC                 9
  224. #define STARTDOC                     10
  225. #define ENDDOC                       11
  226. #define GETPHYSPAGESIZE              12
  227. #define GETPRINTINGOFFSET            13
  228. #define GETSCALINGFACTOR             14
  229. #define MFCOMMENT                    15
  230. #define GETPENWIDTH                  16
  231. #define SETCOPYCOUNT                 17
  232. #define SELECTPAPERSOURCE            18
  233. #define DEVICEDATA                   19
  234. #define PASSTHROUGH                  19
  235. #define GETTECHNOLGY                 20
  236. #define GETTECHNOLOGY                20
  237. #define SETLINECAP                   21
  238. #define SETLINEJOIN                  22
  239. #define SETMITERLIMIT                23
  240. #define BANDINFO                     24
  241. #define DRAWPATTERNRECT              25
  242. #define GETVECTORPENSIZE             26
  243. #define GETVECTORBRUSHSIZE           27
  244. #define ENABLEDUPLEX                 28
  245. #define GETSETPAPERBINS              29
  246. #define GETSETPRINTORIENT            30
  247. #define ENUMPAPERBINS                31
  248. #define SETDIBSCALING                32
  249. #define EPSPRINTING                  33
  250. #define ENUMPAPERMETRICS             34
  251. #define GETSETPAPERMETRICS           35
  252. #define POSTSCRIPT_DATA              37
  253. #define POSTSCRIPT_IGNORE            38
  254. #define MOUSETRAILS                  39
  255. #define GETDEVICEUNITS               42
  256.  
  257. #define GETEXTENDEDTEXTMETRICS       256
  258. #define GETEXTENTTABLE               257
  259. #define GETPAIRKERNTABLE             258
  260. #define GETTRACKKERNTABLE            259
  261. #define EXTTEXTOUT                   512
  262. #define GETFACENAME                  513
  263. #define DOWNLOADFACE                 514
  264. #define ENABLERELATIVEWIDTHS         768
  265. #define ENABLEPAIRKERNING            769
  266. #define SETKERNTRACK                 770
  267. #define SETALLJUSTVALUES             771
  268. #define SETCHARSET                   772
  269.  
  270. #define STRETCHBLT                   2048
  271. #define GETSETSCREENPARAMS           3072
  272. #define BEGIN_PATH                   4096
  273. #define CLIP_TO_PATH                 4097
  274. #define END_PATH                     4098
  275. #define EXT_DEVICE_CAPS              4099
  276. #define RESTORE_CTM                  4100
  277. #define SAVE_CTM                     4101
  278. #define SET_ARC_DIRECTION            4102
  279. #define SET_BACKGROUND_COLOR         4103
  280. #define SET_POLY_MODE                4104
  281. #define SET_SCREEN_ANGLE             4105
  282. #define SET_SPREAD                   4106
  283. #define TRANSFORM_CTM                4107
  284. #define SET_CLIP_BOX                 4108
  285. #define SET_BOUNDS                   4109
  286. #define SET_MIRROR_MODE              4110
  287. #define OPENCHANNEL                  4110
  288. #define DOWNLOADHEADER               4111
  289. #define CLOSECHANNEL                 4112
  290. #define POSTSCRIPT_PASSTHROUGH       4115
  291. #define ENCAPSULATED_POSTSCRIPT      4116
  292.  
  293. /* Spooler Error Codes */
  294. #define SP_NOTREPORTED               0x4000
  295. #define SP_ERROR                     (-1)
  296. #define SP_APPABORT                  (-2)
  297. #define SP_USERABORT                 (-3)
  298. #define SP_OUTOFDISK                 (-4)
  299. #define SP_OUTOFMEMORY               (-5)
  300.  
  301. #define PR_JOBSTATUS                 0x0000
  302.  
  303. /* Object Definitions for EnumObjects() */
  304. #define OBJ_PEN             1
  305. #define OBJ_BRUSH           2
  306. #define OBJ_DC              3
  307. #define OBJ_METADC          4
  308. #define OBJ_PAL             5
  309. #define OBJ_FONT            6
  310. #define OBJ_BITMAP          7
  311. #define OBJ_REGION          8
  312. #define OBJ_METAFILE        9
  313. #define OBJ_MEMDC           10
  314. #define OBJ_EXTPEN          11
  315. #define OBJ_ENHMETADC       12
  316. #define OBJ_ENHMETAFILE     13
  317.  
  318. /* xform stuff */
  319. #define MWT_IDENTITY        1
  320. #define MWT_LEFTMULTIPLY    2
  321. #define MWT_RIGHTMULTIPLY   3
  322.  
  323. #define MWT_MIN             MWT_IDENTITY
  324. #define MWT_MAX             MWT_RIGHTMULTIPLY
  325.  
  326. #define _XFORM_
  327. typedef struct  tagXFORM
  328.   {
  329.     FLOAT   eM11;
  330.     FLOAT   eM12;
  331.     FLOAT   eM21;
  332.     FLOAT   eM22;
  333.     FLOAT   eDx;
  334.     FLOAT   eDy;
  335.   } XFORM, *PXFORM, FAR *LPXFORM;
  336.  
  337. /* Bitmap Header Definition */
  338. typedef struct tagBITMAP
  339.   {
  340.     LONG        bmType;
  341.     LONG        bmWidth;
  342.     LONG        bmHeight;
  343.     LONG        bmWidthBytes;
  344.     WORD        bmPlanes;
  345.     WORD        bmBitsPixel;
  346.     LPVOID      bmBits;
  347.   } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
  348.  
  349. typedef struct tagRGBTRIPLE {
  350.         BYTE    rgbtBlue;
  351.         BYTE    rgbtGreen;
  352.         BYTE    rgbtRed;
  353. } RGBTRIPLE;
  354.  
  355. typedef struct tagRGBQUAD {
  356.         BYTE    rgbBlue;
  357.         BYTE    rgbGreen;
  358.         BYTE    rgbRed;
  359.         BYTE    rgbReserved;
  360. } RGBQUAD;
  361. typedef RGBQUAD FAR* LPRGBQUAD;
  362.  
  363.  
  364. /* structures for defining DIBs */
  365. typedef struct tagBITMAPCOREHEADER {
  366.         DWORD   bcSize;                 /* used to get to color table */
  367.         WORD    bcWidth;
  368.         WORD    bcHeight;
  369.         WORD    bcPlanes;
  370.         WORD    bcBitCount;
  371. } BITMAPCOREHEADER, FAR *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER;
  372.  
  373.  
  374. typedef struct tagBITMAPINFOHEADER{
  375.         DWORD      biSize;
  376.         LONG       biWidth;
  377.         LONG       biHeight;
  378.         WORD       biPlanes;
  379.         WORD       biBitCount;
  380.         DWORD      biCompression;
  381.         DWORD      biSizeImage;
  382.         LONG       biXPelsPerMeter;
  383.         LONG       biYPelsPerMeter;
  384.         DWORD      biClrUsed;
  385.         DWORD      biClrImportant;
  386. } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
  387.  
  388. /* constants for the biCompression field */
  389. #define BI_RGB        0L
  390. #define BI_RLE8       1L
  391. #define BI_RLE4       2L
  392. #define BI_BITFIELDS  3L
  393.  
  394. typedef struct tagBITMAPINFO {
  395.     BITMAPINFOHEADER    bmiHeader;
  396.     RGBQUAD             bmiColors[1];
  397. } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
  398.  
  399. typedef struct tagBITMAPCOREINFO {
  400.     BITMAPCOREHEADER    bmciHeader;
  401.     RGBTRIPLE           bmciColors[1];
  402. } BITMAPCOREINFO, FAR *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
  403.  
  404. #if !defined(RC_INVOKED)
  405. #pragma pack(2)
  406. #endif
  407.  
  408. typedef struct tagBITMAPFILEHEADER {
  409.         WORD    bfType;
  410.         DWORD   bfSize;
  411.         WORD    bfReserved1;
  412.         WORD    bfReserved2;
  413.         DWORD   bfOffBits;
  414. } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
  415.  
  416. #if !defined(RC_INVOKED)
  417. #pragma pack()
  418. #endif
  419.  
  420. #define MAKEPOINTS(l)       (*((POINTS FAR *)&(l)))
  421.  
  422. #ifndef NOMETAFILE
  423.  
  424. /* Clipboard Metafile Picture Structure */
  425. typedef struct tagHANDLETABLE
  426.   {
  427.     HGDIOBJ     objectHandle[1];
  428.   } HANDLETABLE, *PHANDLETABLE, FAR *LPHANDLETABLE;
  429.  
  430. typedef struct tagMETARECORD
  431.   {
  432.     DWORD       rdSize;
  433.     WORD        rdFunction;
  434.     WORD        rdParm[1];
  435.   } METARECORD;
  436. typedef struct tagMETARECORD UNALIGNED *PMETARECORD;
  437. typedef struct tagMETARECORD UNALIGNED FAR *LPMETARECORD;
  438.  
  439. typedef struct tagMETAFILEPICT
  440.   {
  441.     LONG        mm;
  442.     LONG        xExt;
  443.     LONG        yExt;
  444.     HMETAFILE   hMF;
  445.   } METAFILEPICT, FAR *LPMETAFILEPICT;
  446.  
  447. #if !defined(RC_INVOKED)
  448. #pragma pack(2)
  449. #endif
  450.  
  451. typedef struct tagMETAHEADER
  452. {
  453.     WORD        mtType;
  454.     WORD        mtHeaderSize;
  455.     WORD        mtVersion;
  456.     DWORD       mtSize;
  457.     WORD        mtNoObjects;
  458.     DWORD       mtMaxRecord;
  459.     WORD        mtNoParameters;
  460. } METAHEADER;
  461. typedef struct tagMETAHEADER UNALIGNED *PMETAHEADER;
  462. typedef struct tagMETAHEADER UNALIGNED FAR *LPMETAHEADER;
  463.  
  464. #if !defined(RC_INVOKED)
  465. #pragma pack()
  466. #endif
  467.  
  468. /* Enhanced Metafile structures */
  469. typedef struct tagENHMETARECORD
  470. {
  471.     DWORD   iType;              // Record type EMR_XXX
  472.     DWORD   nSize;              // Record size in bytes
  473.     DWORD   dParm[1];           // Parameters
  474. } ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
  475.  
  476. typedef struct tagENHMETAHEADER
  477. {
  478.     DWORD   iType;              // Record type EMR_HEADER
  479.     DWORD   nSize;              // Record size in bytes.  This may be greater
  480.                                 // than the sizeof(ENHMETAHEADER).
  481.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  482.     RECTL   rclFrame;           // Inclusive-inclusive Picture Frame of metafile in .01 mm units
  483.     DWORD   dSignature;         // Signature.  Must be ENHMETA_SIGNATURE.
  484.     DWORD   nVersion;           // Version number
  485.     DWORD   nBytes;             // Size of the metafile in bytes
  486.     DWORD   nRecords;           // Number of records in the metafile
  487.     WORD    nHandles;           // Number of handles in the handle table
  488.                                 // Handle index zero is reserved.
  489.     WORD    sReserved;          // Reserved.  Must be zero.
  490.     DWORD   nDescription;       // Number of chars in the unicode description string
  491.                                 // This is 0 if there is no description string
  492.     DWORD   offDescription;     // Offset to the metafile description record.
  493.                                 // This is 0 if there is no description string
  494.     DWORD   nPalEntries;        // Number of entries in the metafile palette.
  495.     SIZEL   szlDevice;          // Size of the reference device in pels
  496.     SIZEL   szlMillimeters;     // Size of the reference device in millimeters
  497. } ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
  498.  
  499. #endif /* NOMETAFILE */
  500.  
  501. #ifndef NOTEXTMETRIC
  502.  
  503. /* tmPitchAndFamily flags */
  504. #define TMPF_FIXED_PITCH    0x01
  505. #define TMPF_VECTOR             0x02
  506. #define TMPF_DEVICE             0x08
  507. #define TMPF_TRUETYPE       0x04
  508.  
  509. typedef struct tagTEXTMETRICA
  510. {
  511.     LONG        tmHeight;
  512.     LONG        tmAscent;
  513.     LONG        tmDescent;
  514.     LONG        tmInternalLeading;
  515.     LONG        tmExternalLeading;
  516.     LONG        tmAveCharWidth;
  517.     LONG        tmMaxCharWidth;
  518.     LONG        tmWeight;
  519.     LONG        tmOverhang;
  520.     LONG        tmDigitizedAspectX;
  521.     LONG        tmDigitizedAspectY;
  522.     BYTE        tmFirstChar;
  523.     BYTE        tmLastChar;
  524.     BYTE        tmDefaultChar;
  525.     BYTE        tmBreakChar;
  526.     BYTE        tmItalic;
  527.     BYTE        tmUnderlined;
  528.     BYTE        tmStruckOut;
  529.     BYTE        tmPitchAndFamily;
  530.     BYTE        tmCharSet;
  531. } TEXTMETRICA, *PTEXTMETRICA, NEAR *NPTEXTMETRICA, FAR *LPTEXTMETRICA;
  532. typedef struct tagTEXTMETRICW
  533. {
  534.     LONG        tmHeight;
  535.     LONG        tmAscent;
  536.     LONG        tmDescent;
  537.     LONG        tmInternalLeading;
  538.     LONG        tmExternalLeading;
  539.     LONG        tmAveCharWidth;
  540.     LONG        tmMaxCharWidth;
  541.     LONG        tmWeight;
  542.     LONG        tmOverhang;
  543.     LONG        tmDigitizedAspectX;
  544.     LONG        tmDigitizedAspectY;
  545.     WCHAR       tmFirstChar;
  546.     WCHAR       tmLastChar;
  547.     WCHAR       tmDefaultChar;
  548.     WCHAR       tmBreakChar;
  549.     BYTE        tmItalic;
  550.     BYTE        tmUnderlined;
  551.     BYTE        tmStruckOut;
  552.     BYTE        tmPitchAndFamily;
  553.     BYTE        tmCharSet;
  554. } TEXTMETRICW, *PTEXTMETRICW, NEAR *NPTEXTMETRICW, FAR *LPTEXTMETRICW;
  555. #ifdef UNICODE
  556. typedef TEXTMETRICW TEXTMETRIC;
  557. typedef PTEXTMETRICW PTEXTMETRIC;
  558. typedef NPTEXTMETRICW NPTEXTMETRIC;
  559. typedef LPTEXTMETRICW LPTEXTMETRIC;
  560. #else
  561. typedef TEXTMETRICA TEXTMETRIC;
  562. typedef PTEXTMETRICA PTEXTMETRIC;
  563. typedef NPTEXTMETRICA NPTEXTMETRIC;
  564. typedef LPTEXTMETRICA LPTEXTMETRIC;
  565. #endif // UNICODE
  566.  
  567. /* ntmFlags field flags */
  568. #define NTM_REGULAR     0x00000040L
  569. #define NTM_BOLD        0x00000020L
  570. #define NTM_ITALIC      0x00000001L
  571.  
  572. typedef struct tagNEWTEXTMETRICA
  573. {
  574.     LONG        tmHeight;
  575.     LONG        tmAscent;
  576.     LONG        tmDescent;
  577.     LONG        tmInternalLeading;
  578.     LONG        tmExternalLeading;
  579.     LONG        tmAveCharWidth;
  580.     LONG        tmMaxCharWidth;
  581.     LONG        tmWeight;
  582.     LONG        tmOverhang;
  583.     LONG        tmDigitizedAspectX;
  584.     LONG        tmDigitizedAspectY;
  585.     BYTE        tmFirstChar;
  586.     BYTE        tmLastChar;
  587.     BYTE        tmDefaultChar;
  588.     BYTE        tmBreakChar;
  589.     BYTE        tmItalic;
  590.     BYTE        tmUnderlined;
  591.     BYTE        tmStruckOut;
  592.     BYTE        tmPitchAndFamily;
  593.     BYTE        tmCharSet;
  594.     DWORD   ntmFlags;
  595.     UINT    ntmSizeEM;
  596.     UINT    ntmCellHeight;
  597.     UINT    ntmAvgWidth;
  598. } NEWTEXTMETRICA, *PNEWTEXTMETRICA, NEAR *NPNEWTEXTMETRICA, FAR *LPNEWTEXTMETRICA;
  599. typedef struct tagNEWTEXTMETRICW
  600. {
  601.     LONG        tmHeight;
  602.     LONG        tmAscent;
  603.     LONG        tmDescent;
  604.     LONG        tmInternalLeading;
  605.     LONG        tmExternalLeading;
  606.     LONG        tmAveCharWidth;
  607.     LONG        tmMaxCharWidth;
  608.     LONG        tmWeight;
  609.     LONG        tmOverhang;
  610.     LONG        tmDigitizedAspectX;
  611.     LONG        tmDigitizedAspectY;
  612.     WCHAR       tmFirstChar;
  613.     WCHAR       tmLastChar;
  614.     WCHAR       tmDefaultChar;
  615.     WCHAR       tmBreakChar;
  616.     BYTE        tmItalic;
  617.     BYTE        tmUnderlined;
  618.     BYTE        tmStruckOut;
  619.     BYTE        tmPitchAndFamily;
  620.     BYTE        tmCharSet;
  621.     DWORD   ntmFlags;
  622.     UINT    ntmSizeEM;
  623.     UINT    ntmCellHeight;
  624.     UINT    ntmAvgWidth;
  625. } NEWTEXTMETRICW, *PNEWTEXTMETRICW, NEAR *NPNEWTEXTMETRICW, FAR *LPNEWTEXTMETRICW;
  626. #ifdef UNICODE
  627. typedef NEWTEXTMETRICW NEWTEXTMETRIC;
  628. typedef PNEWTEXTMETRICW PNEWTEXTMETRIC;
  629. typedef NPNEWTEXTMETRICW NPNEWTEXTMETRIC;
  630. typedef LPNEWTEXTMETRICW LPNEWTEXTMETRIC;
  631. #else
  632. typedef NEWTEXTMETRICA NEWTEXTMETRIC;
  633. typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
  634. typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
  635. typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
  636. #endif // UNICODE
  637.  
  638. #endif /* NOTEXTMETRIC */
  639. /* GDI Logical Objects: */
  640.  
  641. /* Pel Array */
  642. typedef struct tagPELARRAY
  643.   {
  644.     LONG        paXCount;
  645.     LONG        paYCount;
  646.     LONG        paXExt;
  647.     LONG        paYExt;
  648.     BYTE        paRGBs;
  649.   } PELARRAY, *PPELARRAY, NEAR *NPPELARRAY, FAR *LPPELARRAY;
  650.  
  651. /* Logical Brush (or Pattern) */
  652. typedef struct tagLOGBRUSH
  653.   {
  654.     UINT        lbStyle;
  655.     COLORREF    lbColor;
  656.     LONG        lbHatch;
  657.   } LOGBRUSH, *PLOGBRUSH, NEAR *NPLOGBRUSH, FAR *LPLOGBRUSH;
  658.  
  659. typedef LOGBRUSH            PATTERN;
  660. typedef PATTERN             *PPATTERN;
  661. typedef PATTERN NEAR        *NPPATTERN;
  662. typedef PATTERN FAR         *LPPATTERN;
  663.  
  664. /* Logical Pen */
  665. typedef struct tagLOGPEN
  666.   {
  667.     UINT        lopnStyle;
  668.     POINT       lopnWidth;
  669.     COLORREF    lopnColor;
  670.   } LOGPEN, *PLOGPEN, NEAR *NPLOGPEN, FAR *LPLOGPEN;
  671.  
  672. typedef struct tagEXTLOGPEN {
  673.     DWORD       elpPenStyle;
  674.     DWORD       elpWidth;
  675.     UINT        elpBrushStyle;
  676.     COLORREF    elpColor;
  677.     LONG        elpHatch;
  678.     DWORD       elpNumEntries;
  679.     DWORD       elpStyleEntry[1];
  680. } EXTLOGPEN, *PEXTLOGPEN, NEAR *NPEXTLOGPEN, FAR *LPEXTLOGPEN;
  681.  
  682. typedef struct tagPALETTEENTRY {
  683.     BYTE        peRed;
  684.     BYTE        peGreen;
  685.     BYTE        peBlue;
  686.     BYTE        peFlags;
  687. } PALETTEENTRY, *PPALETTEENTRY, FAR *LPPALETTEENTRY;
  688.  
  689. /* Logical Palette */
  690. typedef struct tagLOGPALETTE {
  691.     WORD        palVersion;
  692.     WORD        palNumEntries;
  693.     PALETTEENTRY        palPalEntry[1];
  694. } LOGPALETTE, *PLOGPALETTE, NEAR *NPLOGPALETTE, FAR *LPLOGPALETTE;
  695.  
  696.  
  697. /* Logical Font */
  698. #define LF_FACESIZE         32
  699.  
  700. typedef struct tagLOGFONTA
  701. {
  702.     LONG      lfHeight;
  703.     LONG      lfWidth;
  704.     LONG      lfEscapement;
  705.     LONG      lfOrientation;
  706.     LONG      lfWeight;
  707.     BYTE      lfItalic;
  708.     BYTE      lfUnderline;
  709.     BYTE      lfStrikeOut;
  710.     BYTE      lfCharSet;
  711.     BYTE      lfOutPrecision;
  712.     BYTE      lfClipPrecision;
  713.     BYTE      lfQuality;
  714.     BYTE      lfPitchAndFamily;
  715.     CHAR      lfFaceName[LF_FACESIZE];
  716. } LOGFONTA, *PLOGFONTA, NEAR *NPLOGFONTA, FAR *LPLOGFONTA;
  717. typedef struct tagLOGFONTW
  718. {
  719.     LONG      lfHeight;
  720.     LONG      lfWidth;
  721.     LONG      lfEscapement;
  722.     LONG      lfOrientation;
  723.     LONG      lfWeight;
  724.     BYTE      lfItalic;
  725.     BYTE      lfUnderline;
  726.     BYTE      lfStrikeOut;
  727.     BYTE      lfCharSet;
  728.     BYTE      lfOutPrecision;
  729.     BYTE      lfClipPrecision;
  730.     BYTE      lfQuality;
  731.     BYTE      lfPitchAndFamily;
  732.     WCHAR     lfFaceName[LF_FACESIZE];
  733. } LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;
  734. #ifdef UNICODE
  735. typedef LOGFONTW LOGFONT;
  736. typedef PLOGFONTW PLOGFONT;
  737. typedef NPLOGFONTW NPLOGFONT;
  738. typedef LPLOGFONTW LPLOGFONT;
  739. #else
  740. typedef LOGFONTA LOGFONT;
  741. typedef PLOGFONTA PLOGFONT;
  742. typedef NPLOGFONTA NPLOGFONT;
  743. typedef LPLOGFONTA LPLOGFONT;
  744. #endif // UNICODE
  745.  
  746. #define LF_FULLFACESIZE     64
  747.  
  748. /* Structure passed to FONTENUMPROC */
  749. typedef struct tagENUMLOGFONTA
  750. {
  751.     LOGFONTA elfLogFont;
  752.     BYTE     elfFullName[LF_FULLFACESIZE];
  753.     BYTE     elfStyle[LF_FACESIZE];
  754. } ENUMLOGFONTA, FAR* LPENUMLOGFONTA;
  755. /* Structure passed to FONTENUMPROC */
  756. typedef struct tagENUMLOGFONTW
  757. {
  758.     LOGFONTW elfLogFont;
  759.     WCHAR    elfFullName[LF_FULLFACESIZE];
  760.     WCHAR    elfStyle[LF_FACESIZE];
  761. } ENUMLOGFONTW, FAR* LPENUMLOGFONTW;
  762. #ifdef UNICODE
  763. typedef ENUMLOGFONTW ENUMLOGFONT;
  764. typedef LPENUMLOGFONTW LPENUMLOGFONT;
  765. #else
  766. typedef ENUMLOGFONTA ENUMLOGFONT;
  767. typedef LPENUMLOGFONTA LPENUMLOGFONT;
  768. #endif // UNICODE
  769.  
  770. #define OUT_DEFAULT_PRECIS      0
  771. #define OUT_STRING_PRECIS       1
  772. #define OUT_CHARACTER_PRECIS    2
  773. #define OUT_STROKE_PRECIS       3
  774. #define OUT_TT_PRECIS           4
  775. #define OUT_DEVICE_PRECIS       5
  776. #define OUT_RASTER_PRECIS       6
  777. #define OUT_TT_ONLY_PRECIS      7
  778. #define OUT_OUTLINE_PRECIS      8
  779.  
  780. #define CLIP_DEFAULT_PRECIS     0
  781. #define CLIP_CHARACTER_PRECIS   1
  782. #define CLIP_STROKE_PRECIS      2
  783. #define CLIP_MASK               0xf
  784. #define CLIP_LH_ANGLES          (1<<4)
  785. #define CLIP_TT_ALWAYS          (2<<4)
  786. #define CLIP_EMBEDDED           (8<<4)
  787.  
  788. #define DEFAULT_QUALITY         0
  789. #define DRAFT_QUALITY           1
  790. #define PROOF_QUALITY           2
  791.  
  792. #define DEFAULT_PITCH           0
  793. #define FIXED_PITCH             1
  794. #define VARIABLE_PITCH          2
  795.  
  796. #define ANSI_CHARSET            0
  797. #define DEFAULT_CHARSET         1
  798. #define SYMBOL_CHARSET          2
  799. #define SHIFTJIS_CHARSET        128
  800. #define HANGEUL_CHARSET         129
  801. #define CHINESEBIG5_CHARSET     136
  802. #define OEM_CHARSET             255
  803.  
  804. /* Font Families */
  805. #define FF_DONTCARE         (0<<4)  /* Don't care or don't know. */
  806. #define FF_ROMAN            (1<<4)  /* Variable stroke width, serifed. */
  807.                                     /* Times Roman, Century Schoolbook, etc. */
  808. #define FF_SWISS            (2<<4)  /* Variable stroke width, sans-serifed. */
  809.                                     /* Helvetica, Swiss, etc. */
  810. #define FF_MODERN           (3<<4)  /* Constant stroke width, serifed or sans-serifed. */
  811.                                     /* Pica, Elite, Courier, etc. */
  812. #define FF_SCRIPT           (4<<4)  /* Cursive, etc. */
  813. #define FF_DECORATIVE       (5<<4)  /* Old English, etc. */
  814.  
  815. /* Font Weights */
  816. #define FW_DONTCARE         0
  817. #define FW_THIN             100
  818. #define FW_EXTRALIGHT       200
  819. #define FW_LIGHT            300
  820. #define FW_NORMAL           400
  821. #define FW_MEDIUM           500
  822. #define FW_SEMIBOLD         600
  823. #define FW_BOLD             700
  824. #define FW_EXTRABOLD        800
  825. #define FW_HEAVY            900
  826.  
  827. #define FW_ULTRALIGHT       FW_EXTRALIGHT
  828. #define FW_REGULAR          FW_NORMAL
  829. #define FW_DEMIBOLD         FW_SEMIBOLD
  830. #define FW_ULTRABOLD        FW_EXTRABOLD
  831. #define FW_BLACK            FW_HEAVY
  832.  
  833. #define PANOSE_COUNT               10
  834. #define PAN_FAMILYTYPE_INDEX        0
  835. #define PAN_SERIFSTYLE_INDEX        1
  836. #define PAN_WEIGHT_INDEX            2
  837. #define PAN_PROPORTION_INDEX        3
  838. #define PAN_CONTRAST_INDEX          4
  839. #define PAN_STROKEVARIATION_INDEX   5
  840. #define PAN_ARMSTYLE_INDEX          6
  841. #define PAN_LETTERFORM_INDEX        7
  842. #define PAN_MIDLINE_INDEX           8
  843. #define PAN_XHEIGHT_INDEX           9
  844.  
  845. #define PAN_CULTURE_LATIN           0
  846.  
  847. typedef struct tagPANOSE
  848. {
  849.     BYTE    bFamilyType;
  850.     BYTE    bSerifStyle;
  851.     BYTE    bWeight;
  852.     BYTE    bProportion;
  853.     BYTE    bContrast;
  854.     BYTE    bStrokeVariation;
  855.     BYTE    bArmStyle;
  856.     BYTE    bLetterform;
  857.     BYTE    bMidline;
  858.     BYTE    bXHeight;
  859. } PANOSE, * LPPANOSE;
  860.  
  861. #define PAN_ANY                         0 /* Any                            */
  862. #define PAN_NO_FIT                      1 /* No Fit                         */
  863.  
  864. #define PAN_FAMILY_TEXT_DISPLAY         2 /* Text and Display               */
  865. #define PAN_FAMILY_SCRIPT               3 /* Script                         */
  866. #define PAN_FAMILY_DECORATIVE           4 /* Decorative                     */
  867. #define PAN_FAMILY_PICTORIAL            5 /* Pictorial                      */
  868.  
  869. #define PAN_SERIF_COVE                  2 /* Cove                           */
  870. #define PAN_SERIF_OBTUSE_COVE           3 /* Obtuse Cove                    */
  871. #define PAN_SERIF_SQUARE_COVE           4 /* Square Cove                    */
  872. #define PAN_SERIF_OBTUSE_SQUARE_COVE    5 /* Obtuse Square Cove             */
  873. #define PAN_SERIF_SQUARE                6 /* Square                         */
  874. #define PAN_SERIF_THIN                  7 /* Thin                           */
  875. #define PAN_SERIF_BONE                  8 /* Bone                           */
  876. #define PAN_SERIF_EXAGGERATED           9 /* Exaggerated                    */
  877. #define PAN_SERIF_TRIANGLE             10 /* Triangle                       */
  878. #define PAN_SERIF_NORMAL_SANS          11 /* Normal Sans                    */
  879. #define PAN_SERIF_OBTUSE_SANS          12 /* Obtuse Sans                    */
  880. #define PAN_SERIF_PERP_SANS            13 /* Prep Sans                      */
  881. #define PAN_SERIF_FLARED               14 /* Flared                         */
  882. #define PAN_SERIF_ROUNDED              15 /* Rounded                        */
  883.  
  884. #define PAN_WEIGHT_VERY_LIGHT           2 /* Very Light                     */
  885. #define PAN_WEIGHT_LIGHT                3 /* Light                          */
  886. #define PAN_WEIGHT_THIN                 4 /* Thin                           */
  887. #define PAN_WEIGHT_BOOK                 5 /* Book                           */
  888. #define PAN_WEIGHT_MEDIUM               6 /* Medium                         */
  889. #define PAN_WEIGHT_DEMI                 7 /* Demi                           */
  890. #define PAN_WEIGHT_BOLD                 8 /* Bold                           */
  891. #define PAN_WEIGHT_HEAVY                9 /* Heavy                          */
  892. #define PAN_WEIGHT_BLACK               10 /* Black                          */
  893. #define PAN_WEIGHT_NORD                11 /* Nord                           */
  894.  
  895. #define PAN_PROP_OLD_STYLE              2 /* Old Style                      */
  896. #define PAN_PROP_MODERN                 3 /* Modern                         */
  897. #define PAN_PROP_EVEN_WIDTH             4 /* Even Width                     */
  898. #define PAN_PROP_EXPANDED               5 /* Expanded                       */
  899. #define PAN_PROP_CONDENSED              6 /* Condensed                      */
  900. #define PAN_PROP_VERY_EXPANDED          7 /* Very Expanded                  */
  901. #define PAN_PROP_VERY_CONDENSED         8 /* Very Condensed                 */
  902. #define PAN_PROP_MONOSPACED             9 /* Monospaced                     */
  903.  
  904. #define PAN_CONTRAST_NONE               2 /* None                           */
  905. #define PAN_CONTRAST_VERY_LOW           3 /* Very Low                       */
  906. #define PAN_CONTRAST_LOW                4 /* Low                            */
  907. #define PAN_CONTRAST_MEDIUM_LOW         5 /* Medium Low                     */
  908. #define PAN_CONTRAST_MEDIUM             6 /* Medium                         */
  909. #define PAN_CONTRAST_MEDIUM_HIGH        7 /* Mediim High                    */
  910. #define PAN_CONTRAST_HIGH               8 /* High                           */
  911. #define PAN_CONTRAST_VERY_HIGH          9 /* Very High                      */
  912.  
  913. #define PAN_STROKE_GRADUAL_DIAG         2 /* Gradual/Diagonal               */
  914. #define PAN_STROKE_GRADUAL_TRAN         3 /* Gradual/Transitional           */
  915. #define PAN_STROKE_GRADUAL_VERT         4 /* Gradual/Vertical               */
  916. #define PAN_STROKE_GRADUAL_HORZ         5 /* Gradual/Horizontal             */
  917. #define PAN_STROKE_RAPID_VERT           6 /* Rapid/Vertical                 */
  918. #define PAN_STROKE_RAPID_HORZ           7 /* Rapid/Horizontal               */
  919. #define PAN_STROKE_INSTANT_VERT         8 /* Instant/Vertical               */
  920.  
  921. #define PAN_STRAIGHT_ARMS_HORZ          2 /* Straight Arms/Horizontal       */
  922. #define PAN_STRAIGHT_ARMS_WEDGE         3 /* Straight Arms/Wedge            */
  923. #define PAN_STRAIGHT_ARMS_VERT          4 /* Straight Arms/Vertical         */
  924. #define PAN_STRAIGHT_ARMS_SINGLE_SERIF  5 /* Straight Arms/Single-Serif     */
  925. #define PAN_STRAIGHT_ARMS_DOUBLE_SERIF  6 /* Straight Arms/Double-Serif     */
  926. #define PAN_BENT_ARMS_HORZ              7 /* Non-Straight Arms/Horizontal   */
  927. #define PAN_BENT_ARMS_WEDGE             8 /* Non-Straight Arms/Wedge        */
  928. #define PAN_BENT_ARMS_VERT              9 /* Non-Straight Arms/Vertical     */
  929. #define PAN_BENT_ARMS_SINGLE_SERIF     10 /* Non-Straight Arms/Single-Serif */
  930. #define PAN_BENT_ARMS_DOUBLE_SERIF     11 /* Non-Straight Arms/Double-Serif */
  931.  
  932. #define PAN_LETT_NORMAL_CONTACT         2 /* Normal/Contact                 */
  933. #define PAN_LETT_NORMAL_WEIGHTED        3 /* Normal/Weighted                */
  934. #define PAN_LETT_NORMAL_BOXED           4 /* Normal/Boxed                   */
  935. #define PAN_LETT_NORMAL_FLATTENED       5 /* Normal/Flattened               */
  936. #define PAN_LETT_NORMAL_ROUNDED         6 /* Normal/Rounded                 */
  937. #define PAN_LETT_NORMAL_OFF_CENTER      7 /* Normal/Off Center              */
  938. #define PAN_LETT_NORMAL_SQUARE          8 /* Normal/Square                  */
  939. #define PAN_LETT_OBLIQUE_CONTACT        9 /* Oblique/Contact                */
  940. #define PAN_LETT_OBLIQUE_WEIGHTED      10 /* Oblique/Weighted               */
  941. #define PAN_LETT_OBLIQUE_BOXED         11 /* Oblique/Boxed                  */
  942. #define PAN_LETT_OBLIQUE_FLATTENED     12 /* Oblique/Flattened              */
  943. #define PAN_LETT_OBLIQUE_ROUNDED       13 /* Oblique/Rounded                */
  944. #define PAN_LETT_OBLIQUE_OFF_CENTER    14 /* Oblique/Off Center             */
  945. #define PAN_LETT_OBLIQUE_SQUARE        15 /* Oblique/Square                 */
  946.  
  947. #define PAN_MIDLINE_STANDARD_TRIMMED    2 /* Standard/Trimmed               */
  948. #define PAN_MIDLINE_STANDARD_POINTED    3 /* Standard/Pointed               */
  949. #define PAN_MIDLINE_STANDARD_SERIFED    4 /* Standard/Serifed               */
  950. #define PAN_MIDLINE_HIGH_TRIMMED        5 /* High/Trimmed                   */
  951. #define PAN_MIDLINE_HIGH_POINTED        6 /* High/Pointed                   */
  952. #define PAN_MIDLINE_HIGH_SERIFED        7 /* High/Serifed                   */
  953. #define PAN_MIDLINE_CONSTANT_TRIMMED    8 /* Constant/Trimmed               */
  954. #define PAN_MIDLINE_CONSTANT_POINTED    9 /* Constant/Pointed               */
  955. #define PAN_MIDLINE_CONSTANT_SERIFED   10 /* Constant/Serifed               */
  956. #define PAN_MIDLINE_LOW_TRIMMED        11 /* Low/Trimmed                    */
  957. #define PAN_MIDLINE_LOW_POINTED        12 /* Low/Pointed                    */
  958. #define PAN_MIDLINE_LOW_SERIFED        13 /* Low/Serifed                    */
  959.  
  960. #define PAN_XHEIGHT_CONSTANT_SMALL      2 /* Constant/Small                 */
  961. #define PAN_XHEIGHT_CONSTANT_STD        3 /* Constant/Standard              */
  962. #define PAN_XHEIGHT_CONSTANT_LARGE      4 /* Constant/Large                 */
  963. #define PAN_XHEIGHT_DUCKING_SMALL       5 /* Ducking/Small                  */
  964. #define PAN_XHEIGHT_DUCKING_STD         6 /* Ducking/Standard               */
  965. #define PAN_XHEIGHT_DUCKING_LARGE       7 /* Ducking/Large                  */
  966.  
  967.  
  968. #define ELF_VENDOR_SIZE     4
  969.  
  970. /* The extended logical font       */
  971. /* An extension of the ENUMLOGFONT */
  972.  
  973. typedef struct tagEXTLOGFONTA {
  974.     LOGFONTA    elfLogFont;
  975.     BYTE        elfFullName[LF_FULLFACESIZE];
  976.     BYTE        elfStyle[LF_FACESIZE];
  977.     DWORD       elfVersion;     /* 0 for the first release of NT */
  978.     DWORD       elfStyleSize;
  979.     DWORD       elfMatch;
  980.     DWORD       elfReserved;
  981.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  982.     DWORD       elfCulture;     /* 0 for Latin                   */
  983.     PANOSE      elfPanose;
  984. } EXTLOGFONTA, *PEXTLOGFONTA, NEAR *NPEXTLOGFONTA, FAR *LPEXTLOGFONTA;
  985. typedef struct tagEXTLOGFONTW {
  986.     LOGFONTW    elfLogFont;
  987.     WCHAR       elfFullName[LF_FULLFACESIZE];
  988.     WCHAR       elfStyle[LF_FACESIZE];
  989.     DWORD       elfVersion;     /* 0 for the first release of NT */
  990.     DWORD       elfStyleSize;
  991.     DWORD       elfMatch;
  992.     DWORD       elfReserved;
  993.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  994.     DWORD       elfCulture;     /* 0 for Latin                   */
  995.     PANOSE      elfPanose;
  996. } EXTLOGFONTW, *PEXTLOGFONTW, NEAR *NPEXTLOGFONTW, FAR *LPEXTLOGFONTW;
  997. #ifdef UNICODE
  998. typedef EXTLOGFONTW EXTLOGFONT;
  999. typedef PEXTLOGFONTW PEXTLOGFONT;
  1000. typedef NPEXTLOGFONTW NPEXTLOGFONT;
  1001. typedef LPEXTLOGFONTW LPEXTLOGFONT;
  1002. #else
  1003. typedef EXTLOGFONTA EXTLOGFONT;
  1004. typedef PEXTLOGFONTA PEXTLOGFONT;
  1005. typedef NPEXTLOGFONTA NPEXTLOGFONT;
  1006. typedef LPEXTLOGFONTA LPEXTLOGFONT;
  1007. #endif // UNICODE
  1008.  
  1009.  
  1010. #define ELF_VERSION         0
  1011. #define ELF_CULTURE_LATIN   0
  1012.  
  1013. /* EnumFonts Masks */
  1014. #define RASTER_FONTTYPE     0x0001
  1015. #define DEVICE_FONTTYPE     0x002
  1016. #define TRUETYPE_FONTTYPE   0x004
  1017.  
  1018. #define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
  1019. #define PALETTERGB(r,g,b)   (0x02000000 | RGB(r,g,b))
  1020. #define PALETTEINDEX(i)     ((COLORREF)(0x01000000 | (DWORD)(WORD)(i)))
  1021.  
  1022. /* palette entry flags */
  1023.  
  1024. #define PC_RESERVED     0x01    /* palette index used for animation */
  1025. #define PC_EXPLICIT     0x02    /* palette index is explicit to device */
  1026. #define PC_NOCOLLAPSE   0x04    /* do not match color to system palette */
  1027.  
  1028. #define GetRValue(rgb)      ((BYTE)(rgb))
  1029. #define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8))
  1030. #define GetBValue(rgb)      ((BYTE)((rgb)>>16))
  1031.  
  1032. /* Background Modes */
  1033. #define TRANSPARENT         1
  1034. #define OPAQUE              2
  1035. #define BKMODE_LAST         2
  1036.  
  1037. /* Graphics Modes */
  1038.  
  1039. #define GM_COMPATIBLE       1
  1040. #define GM_ADVANCED         2
  1041. #define GM_LAST             2
  1042.  
  1043. /* PolyDraw and GetPath point types */
  1044. #define PT_CLOSEFIGURE      0x01
  1045. #define PT_LINETO           0x02
  1046. #define PT_BEZIERTO         0x04
  1047. #define PT_MOVETO           0x06
  1048.  
  1049. /* Mapping Modes */
  1050. #define MM_TEXT             1
  1051. #define MM_LOMETRIC         2
  1052. #define MM_HIMETRIC         3
  1053. #define MM_LOENGLISH        4
  1054. #define MM_HIENGLISH        5
  1055. #define MM_TWIPS            6
  1056. #define MM_ISOTROPIC        7
  1057. #define MM_ANISOTROPIC      8
  1058.  
  1059. /* Min and Max Mapping Mode values */
  1060. #define MM_MIN              MM_TEXT
  1061. #define MM_MAX              MM_ANISOTROPIC
  1062. #define MM_MAX_FIXEDSCALE   MM_TWIPS
  1063.  
  1064. /* Coordinate Modes */
  1065. #define ABSOLUTE            1
  1066. #define RELATIVE            2
  1067.  
  1068. /* Stock Logical Objects */
  1069. #define WHITE_BRUSH         0
  1070. #define LTGRAY_BRUSH        1
  1071. #define GRAY_BRUSH          2
  1072. #define DKGRAY_BRUSH        3
  1073. #define BLACK_BRUSH         4
  1074. #define NULL_BRUSH          5
  1075. #define HOLLOW_BRUSH        NULL_BRUSH
  1076. #define WHITE_PEN           6
  1077. #define BLACK_PEN           7
  1078. #define NULL_PEN            8
  1079. #define OEM_FIXED_FONT      10
  1080. #define ANSI_FIXED_FONT     11
  1081. #define ANSI_VAR_FONT       12
  1082. #define SYSTEM_FONT         13
  1083. #define DEVICE_DEFAULT_FONT 14
  1084. #define DEFAULT_PALETTE     15
  1085. #define SYSTEM_FIXED_FONT   16
  1086. #define STOCK_LAST          16
  1087.  
  1088. #define CLR_INVALID     0xFFFFFFFF
  1089.  
  1090. /* Brush Styles */
  1091. #define BS_SOLID            0
  1092. #define BS_NULL             1
  1093. #define BS_HOLLOW           BS_NULL
  1094. #define BS_HATCHED          2
  1095. #define BS_PATTERN          3
  1096. #define BS_INDEXED          4
  1097. #define BS_DIBPATTERN       5
  1098. #define BS_DIBPATTERNPT     6
  1099. #define BS_PATTERN8X8       7
  1100. #define BS_DIBPATTERN8X8    8
  1101.  
  1102. /* Hatch Styles */
  1103. #define HS_HORIZONTAL       0       /* ----- */
  1104. #define HS_VERTICAL         1       /* ||||| */
  1105. #define HS_FDIAGONAL        2       /* \\\\\ */
  1106. #define HS_BDIAGONAL        3       /* ///// */
  1107. #define HS_CROSS            4       /* +++++ */
  1108. #define HS_DIAGCROSS        5       /* xxxxx */
  1109. #define HS_FDIAGONAL1       6
  1110. #define HS_BDIAGONAL1       7
  1111. #define HS_SOLID            8
  1112. #define HS_DENSE1           9
  1113. #define HS_DENSE2           10
  1114. #define HS_DENSE3           11
  1115. #define HS_DENSE4           12
  1116. #define HS_DENSE5           13
  1117. #define HS_DENSE6           14
  1118. #define HS_DENSE7           15
  1119. #define HS_DENSE8           16
  1120. #define HS_NOSHADE          17
  1121. #define HS_HALFTONE         18
  1122. #define HS_SOLIDCLR         19
  1123. #define HS_DITHEREDCLR      20
  1124. #define HS_SOLIDTEXTCLR     21
  1125. #define HS_DITHEREDTEXTCLR  22
  1126. #define HS_SOLIDBKCLR       23
  1127. #define HS_DITHEREDBKCLR    24
  1128. #define HS_API_MAX          25
  1129.  
  1130. /* Pen Styles */
  1131. #define PS_SOLID            0
  1132. #define PS_DASH             1       /* -------  */
  1133. #define PS_DOT              2       /* .......  */
  1134. #define PS_DASHDOT          3       /* _._._._  */
  1135. #define PS_DASHDOTDOT       4       /* _.._.._  */
  1136. #define PS_NULL             5
  1137. #define PS_INSIDEFRAME      6
  1138. #define PS_USERSTYLE        7
  1139. #define PS_ALTERNATE        8
  1140. #define PS_STYLE_MASK       0x0000000F
  1141.  
  1142. #define PS_ENDCAP_ROUND     0x00000000
  1143. #define PS_ENDCAP_SQUARE    0x00000100
  1144. #define PS_ENDCAP_FLAT      0x00000200
  1145. #define PS_ENDCAP_MASK      0x00000F00
  1146.  
  1147. #define PS_JOIN_ROUND       0x00000000
  1148. #define PS_JOIN_BEVEL       0x00001000
  1149. #define PS_JOIN_MITER       0x00002000
  1150. #define PS_JOIN_MASK        0x0000F000
  1151.  
  1152. #define PS_COSMETIC         0x00000000
  1153. #define PS_GEOMETRIC        0x00010000
  1154. #define PS_TYPE_MASK        0x000F0000
  1155.  
  1156. #define AD_COUNTERCLOCKWISE 1
  1157. #define AD_CLOCKWISE        2
  1158.  
  1159. /* Device Parameters for GetDeviceCaps() */
  1160. #define DRIVERVERSION 0     /* Device driver version                    */
  1161. #define TECHNOLOGY    2     /* Device classification                    */
  1162. #define HORZSIZE      4     /* Horizontal size in millimeters           */
  1163. #define VERTSIZE      6     /* Vertical size in millimeters             */
  1164. #define HORZRES       8     /* Horizontal width in pixels               */
  1165. #define VERTRES       10    /* Vertical width in pixels                 */
  1166. #define BITSPIXEL     12    /* Number of bits per pixel                 */
  1167. #define PLANES        14    /* Number of planes                         */
  1168. #define NUMBRUSHES    16    /* Number of brushes the device has         */
  1169. #define NUMPENS       18    /* Number of pens the device has            */
  1170. #define NUMMARKERS    20    /* Number of markers the device has         */
  1171. #define NUMFONTS      22    /* Number of fonts the device has           */
  1172. #define NUMCOLORS     24    /* Number of colors the device supports     */
  1173. #define PDEVICESIZE   26    /* Size required for device descriptor      */
  1174. #define CURVECAPS     28    /* Curve capabilities                       */
  1175. #define LINECAPS      30    /* Line capabilities                        */
  1176. #define POLYGONALCAPS 32    /* Polygonal capabilities                   */
  1177. #define TEXTCAPS      34    /* Text capabilities                        */
  1178. #define CLIPCAPS      36    /* Clipping capabilities                    */
  1179. #define RASTERCAPS    38    /* Bitblt capabilities                      */
  1180. #define ASPECTX       40    /* Length of the X leg                      */
  1181. #define ASPECTY       42    /* Length of the Y leg                      */
  1182. #define ASPECTXY      44    /* Length of the hypotenuse                 */
  1183.  
  1184. #define LOGPIXELSX    88    /* Logical pixels/inch in X                 */
  1185. #define LOGPIXELSY    90    /* Logical pixels/inch in Y                 */
  1186.  
  1187. #define SIZEPALETTE  104    /* Number of entries in physical palette    */
  1188. #define NUMRESERVED  106    /* Number of reserved entries in palette    */
  1189. #define COLORRES     108    /* Actual color resolution                  */
  1190.  
  1191.  
  1192. // Printing related DeviceCaps. These replace the appropriate Escapes
  1193.  
  1194. #define PHYSICALWIDTH   110 // Physical Width in device units
  1195. #define PHYSICALHEIGHT  111 // Physical Height in device units
  1196. #define PHYSICALOFFSETX 112 // Physical Printable Area x margin
  1197. #define PHYSICALOFFSETY 113 // Physical Printable Area y margin
  1198. #define SCALINGFACTORX  114 // Scaling factor x
  1199. #define SCALINGFACTORY  115 // Scaling factor y
  1200.  
  1201. #ifndef NOGDICAPMASKS
  1202.  
  1203. /* Device Capability Masks: */
  1204.  
  1205. /* Device Technologies */
  1206. #define DT_PLOTTER          0   /* Vector plotter                   */
  1207. #define DT_RASDISPLAY       1   /* Raster display                   */
  1208. #define DT_RASPRINTER       2   /* Raster printer                   */
  1209. #define DT_RASCAMERA        3   /* Raster camera                    */
  1210. #define DT_CHARSTREAM       4   /* Character-stream, PLP            */
  1211. #define DT_METAFILE         5   /* Metafile, VDM                    */
  1212. #define DT_DISPFILE         6   /* Display-file                     */
  1213.  
  1214. /* Curve Capabilities */
  1215. #define CC_NONE             0   /* Curves not supported             */
  1216. #define CC_CIRCLES          1   /* Can do circles                   */
  1217. #define CC_PIE              2   /* Can do pie wedges                */
  1218. #define CC_CHORD            4   /* Can do chord arcs                */
  1219. #define CC_ELLIPSES         8   /* Can do ellipese                  */
  1220. #define CC_WIDE             16  /* Can do wide lines                */
  1221. #define CC_STYLED           32  /* Can do styled lines              */
  1222. #define CC_WIDESTYLED       64  /* Can do wide styled lines         */
  1223. #define CC_INTERIORS        128 /* Can do interiors                 */
  1224. #define CC_ROUNDRECT        256 /*                                  */
  1225.  
  1226. /* Line Capabilities */
  1227. #define LC_NONE             0   /* Lines not supported              */
  1228. #define LC_POLYLINE         2   /* Can do polylines                 */
  1229. #define LC_MARKER           4   /* Can do markers                   */
  1230. #define LC_POLYMARKER       8   /* Can do polymarkers               */
  1231. #define LC_WIDE             16  /* Can do wide lines                */
  1232. #define LC_STYLED           32  /* Can do styled lines              */
  1233. #define LC_WIDESTYLED       64  /* Can do wide styled lines         */
  1234. #define LC_INTERIORS        128 /* Can do interiors                 */
  1235.  
  1236. /* Polygonal Capabilities */
  1237. #define PC_NONE             0   /* Polygonals not supported         */
  1238. #define PC_POLYGON          1   /* Can do polygons                  */
  1239. #define PC_RECTANGLE        2   /* Can do rectangles                */
  1240. #define PC_WINDPOLYGON      4   /* Can do winding polygons          */
  1241. #define PC_TRAPEZOID        4   /* Can do trapezoids                */
  1242. #define PC_SCANLINE         8   /* Can do scanlines                 */
  1243. #define PC_WIDE             16  /* Can do wide borders              */
  1244. #define PC_STYLED           32  /* Can do styled borders            */
  1245. #define PC_WIDESTYLED       64  /* Can do wide styled borders       */
  1246. #define PC_INTERIORS        128 /* Can do interiors                 */
  1247.  
  1248. /* Polygonal Capabilities */
  1249. #define CP_NONE             0   /* No clipping of output            */
  1250. #define CP_RECTANGLE        1   /* Output clipped to rects          */
  1251. #define CP_REGION           2   /*                                  */
  1252.  
  1253. /* Text Capabilities */
  1254. #define TC_OP_CHARACTER     0x00000001  /* Can do OutputPrecision   CHARACTER      */
  1255. #define TC_OP_STROKE        0x00000002  /* Can do OutputPrecision   STROKE         */
  1256. #define TC_CP_STROKE        0x00000004  /* Can do ClipPrecision     STROKE         */
  1257. #define TC_CR_90            0x00000008  /* Can do CharRotAbility    90             */
  1258. #define TC_CR_ANY           0x00000010  /* Can do CharRotAbility    ANY            */
  1259. #define TC_SF_X_YINDEP      0x00000020  /* Can do ScaleFreedom      X_YINDEPENDENT */
  1260. #define TC_SA_DOUBLE        0x00000040  /* Can do ScaleAbility      DOUBLE         */
  1261. #define TC_SA_INTEGER       0x00000080  /* Can do ScaleAbility      INTEGER        */
  1262. #define TC_SA_CONTIN        0x00000100  /* Can do ScaleAbility      CONTINUOUS     */
  1263. #define TC_EA_DOUBLE        0x00000200  /* Can do EmboldenAbility   DOUBLE         */
  1264. #define TC_IA_ABLE          0x00000400  /* Can do ItalisizeAbility  ABLE           */
  1265. #define TC_UA_ABLE          0x00000800  /* Can do UnderlineAbility  ABLE           */
  1266. #define TC_SO_ABLE          0x00001000  /* Can do StrikeOutAbility  ABLE           */
  1267. #define TC_RA_ABLE          0x00002000  /* Can do RasterFontAble    ABLE           */
  1268. #define TC_VA_ABLE          0x00004000  /* Can do VectorFontAble    ABLE           */
  1269. #define TC_RESERVED         0x00008000
  1270. #define TC_SCROLLBLT        0x00010000  /* do text scroll with blt                 */
  1271.  
  1272. #endif /* NOGDICAPMASKS */
  1273.  
  1274. /* Raster Capabilities */
  1275. #define RC_NONE
  1276. #define RC_BITBLT           1       /* Can do standard BLT.             */
  1277. #define RC_BANDING          2       /* Device requires banding support  */
  1278. #define RC_SCALING          4       /* Device requires scaling support  */
  1279. #define RC_BITMAP64         8       /* Device can support >64K bitmap   */
  1280. #define RC_GDI20_OUTPUT     0x0010      /* has 2.0 output calls         */
  1281. #define RC_GDI20_STATE      0x0020
  1282. #define RC_SAVEBITMAP       0x0040
  1283. #define RC_DI_BITMAP        0x0080      /* supports DIB to memory       */
  1284. #define RC_PALETTE          0x0100      /* supports a palette           */
  1285. #define RC_DIBTODEV         0x0200      /* supports DIBitsToDevice      */
  1286. #define RC_BIGFONT          0x0400      /* supports >64K fonts          */
  1287. #define RC_STRETCHBLT       0x0800      /* supports StretchBlt          */
  1288. #define RC_FLOODFILL        0x1000      /* supports FloodFill           */
  1289. #define RC_STRETCHDIB       0x2000      /* supports StretchDIBits       */
  1290. #define RC_OP_DX_OUTPUT     0x4000
  1291. #define RC_DEVBITS          0x8000
  1292.  
  1293. /* DIB color table identifiers */
  1294.  
  1295. #define DIB_RGB_COLORS      0 /* color table in RGBs */
  1296. #define DIB_PAL_COLORS      1 /* color table in palette indices */
  1297. #define DIB_PAL_INDICES     2 /* No color table indices into surf palette */
  1298. #define DIB_PAL_PHYSINDICES 2 /* No color table indices into surf palette */
  1299. #define DIB_PAL_LOGINDICES  4 /* No color table indices into DC palette */
  1300.  
  1301. /* constants for Get/SetSystemPaletteUse() */
  1302.  
  1303. #define SYSPAL_ERROR    0
  1304. #define SYSPAL_STATIC   1
  1305. #define SYSPAL_NOSTATIC 2
  1306.  
  1307. /* constants for CreateDIBitmap */
  1308. #define CBM_CREATEDIB   0x02L   /* create DIB bitmap */
  1309. #define CBM_INIT        0x04L   /* initialize bitmap */
  1310.  
  1311. /* ExtFloodFill style flags */
  1312. #define  FLOODFILLBORDER   0
  1313. #define  FLOODFILLSURFACE  1
  1314.  
  1315. /* size of a device name string */
  1316. #define CCHDEVICENAME 32
  1317.  
  1318. /* size of a form name string */
  1319. #define CCHFORMNAME 32
  1320.  
  1321. typedef struct _devicemodeA {
  1322.     BYTE   dmDeviceName[CCHDEVICENAME];
  1323.     WORD dmSpecVersion;
  1324.     WORD dmDriverVersion;
  1325.     WORD dmSize;
  1326.     WORD dmDriverExtra;
  1327.     DWORD dmFields;
  1328.     short dmOrientation;
  1329.     short dmPaperSize;
  1330.     short dmPaperLength;
  1331.     short dmPaperWidth;
  1332.     short dmScale;
  1333.     short dmCopies;
  1334.     short dmDefaultSource;
  1335.     short dmPrintQuality;
  1336.     short dmColor;
  1337.     short dmDuplex;
  1338.     short dmYResolution;
  1339.     short dmTTOption;
  1340.     short dmCollate;
  1341.     BYTE   dmFormName[CCHFORMNAME];
  1342.     WORD   dmUnusedPadding;
  1343.     DWORD  dmBitsPerPel;
  1344.     DWORD  dmPelsWidth;
  1345.     DWORD  dmPelsHeight;
  1346.     DWORD  dmDisplayFlags;
  1347.     DWORD  dmDisplayFrequency;
  1348. } DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA;
  1349. typedef struct _devicemodeW {
  1350.     WCHAR  dmDeviceName[CCHDEVICENAME];
  1351.     WORD dmSpecVersion;
  1352.     WORD dmDriverVersion;
  1353.     WORD dmSize;
  1354.     WORD dmDriverExtra;
  1355.     DWORD dmFields;
  1356.     short dmOrientation;
  1357.     short dmPaperSize;
  1358.     short dmPaperLength;
  1359.     short dmPaperWidth;
  1360.     short dmScale;
  1361.     short dmCopies;
  1362.     short dmDefaultSource;
  1363.     short dmPrintQuality;
  1364.     short dmColor;
  1365.     short dmDuplex;
  1366.     short dmYResolution;
  1367.     short dmTTOption;
  1368.     short dmCollate;
  1369.     WCHAR  dmFormName[CCHFORMNAME];
  1370.     WORD   dmUnusedPadding;
  1371.     DWORD  dmBitsPerPel;
  1372.     DWORD  dmPelsWidth;
  1373.     DWORD  dmPelsHeight;
  1374.     DWORD  dmDisplayFlags;
  1375.     DWORD  dmDisplayFrequency;
  1376. } DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;
  1377. #ifdef UNICODE
  1378. typedef DEVMODEW DEVMODE;
  1379. typedef PDEVMODEW PDEVMODE;
  1380. typedef NPDEVMODEW NPDEVMODE;
  1381. typedef LPDEVMODEW LPDEVMODE;
  1382. #else
  1383. typedef DEVMODEA DEVMODE;
  1384. typedef PDEVMODEA PDEVMODE;
  1385. typedef NPDEVMODEA NPDEVMODE;
  1386. typedef LPDEVMODEA LPDEVMODE;
  1387. #endif // UNICODE
  1388.  
  1389. /* current version of specification */
  1390. #define DM_SPECVERSION 0x320
  1391.  
  1392. /* field selection bits */
  1393. #define DM_ORIENTATION      0x0000001L
  1394. #define DM_PAPERSIZE        0x0000002L
  1395. #define DM_PAPERLENGTH      0x0000004L
  1396. #define DM_PAPERWIDTH       0x0000008L
  1397. #define DM_SCALE            0x0000010L
  1398. #define DM_COPIES           0x0000100L
  1399. #define DM_DEFAULTSOURCE    0x0000200L
  1400. #define DM_PRINTQUALITY     0x0000400L
  1401. #define DM_COLOR            0x0000800L
  1402. #define DM_DUPLEX           0x0001000L
  1403. #define DM_YRESOLUTION      0x0002000L
  1404. #define DM_TTOPTION         0x0004000L
  1405. #define DM_COLLATE          0x0008000L
  1406. #define DM_FORMNAME         0x0010000L
  1407.  
  1408. /* orientation selections */
  1409. #define DMORIENT_PORTRAIT   1
  1410. #define DMORIENT_LANDSCAPE  2
  1411.  
  1412. /* paper selections */
  1413. #define DMPAPER_FIRST       DMPAPER_LETTER
  1414. #define DMPAPER_LETTER      1           /* Letter 8 1/2 x 11 in               */
  1415. #define DMPAPER_LETTERSMALL 2           /* Letter Small 8 1/2 x 11 in         */
  1416. #define DMPAPER_TABLOID     3           /* Tabloid 11 x 17 in                 */
  1417. #define DMPAPER_LEDGER      4           /* Ledger 17 x 11 in                  */
  1418. #define DMPAPER_LEGAL       5           /* Legal 8 1/2 x 14 in                */
  1419. #define DMPAPER_STATEMENT   6           /* Statement 5 1/2 x 8 1/2 in         */
  1420. #define DMPAPER_EXECUTIVE   7           /* Executive 7 1/4 x 10 1/2 in        */
  1421. #define DMPAPER_A3          8           /* A3 297 x 420 mm                    */
  1422. #define DMPAPER_A4          9           /* A4 210 x 297 mm                    */
  1423. #define DMPAPER_A4SMALL     10          /* A4 Small 210 x 297 mm              */
  1424. #define DMPAPER_A5          11          /* A5 148 x 210 mm                    */
  1425. #define DMPAPER_B4          12          /* B4 250 x 354                       */
  1426. #define DMPAPER_B5          13          /* B5 182 x 257 mm                    */
  1427. #define DMPAPER_FOLIO       14          /* Folio 8 1/2 x 13 in                */
  1428. #define DMPAPER_QUARTO      15          /* Quarto 215 x 275 mm                */
  1429. #define DMPAPER_10X14       16          /* 10x14 in                           */
  1430. #define DMPAPER_11X17       17          /* 11x17 in                           */
  1431. #define DMPAPER_NOTE        18          /* Note 8 1/2 x 11 in                 */
  1432. #define DMPAPER_ENV_9       19          /* Envelope #9 3 7/8 x 8 7/8          */
  1433. #define DMPAPER_ENV_10      20          /* Envelope #10 4 1/8 x 9 1/2         */
  1434. #define DMPAPER_ENV_11      21          /* Envelope #11 4 1/2 x 10 3/8        */
  1435. #define DMPAPER_ENV_12      22          /* Envelope #12 4 \276 x 11           */
  1436. #define DMPAPER_ENV_14      23          /* Envelope #14 5 x 11 1/2            */
  1437. #define DMPAPER_CSHEET      24          /* C size sheet                       */
  1438. #define DMPAPER_DSHEET      25          /* D size sheet                       */
  1439. #define DMPAPER_ESHEET      26          /* E size sheet                       */
  1440. #define DMPAPER_ENV_DL      27          /* Envelope DL 110 x 220mm            */
  1441. #define DMPAPER_ENV_C5      28          /* Envelope C5 162 x 229 mm           */
  1442. #define DMPAPER_ENV_C3      29          /* Envelope C3  324 x 458 mm          */
  1443. #define DMPAPER_ENV_C4      30          /* Envelope C4  229 x 324 mm          */
  1444. #define DMPAPER_ENV_C6      31          /* Envelope C6  114 x 162 mm          */
  1445. #define DMPAPER_ENV_C65     32          /* Envelope C65 114 x 229 mm          */
  1446. #define DMPAPER_ENV_B4      33          /* Envelope B4  250 x 353 mm          */
  1447. #define DMPAPER_ENV_B5      34          /* Envelope B5  176 x 250 mm          */
  1448. #define DMPAPER_ENV_B6      35          /* Envelope B6  176 x 125 mm          */
  1449. #define DMPAPER_ENV_ITALY   36          /* Envelope 110 x 230 mm              */
  1450. #define DMPAPER_ENV_MONARCH 37          /* Envelope Monarch 3.875 x 7.5 in    */
  1451. #define DMPAPER_ENV_PERSONAL 38         /* 6 3/4 Envelope 3 5/8 x 6 1/2 in    */
  1452. #define DMPAPER_FANFOLD_US  39          /* US Std Fanfold 14 7/8 x 11 in      */
  1453. #define DMPAPER_FANFOLD_STD_GERMAN  40  /* German Std Fanfold 8 1/2 x 12 in   */
  1454. #define DMPAPER_FANFOLD_LGL_GERMAN  41  /* German Legal Fanfold 8 1/2 x 13 in */
  1455.  
  1456. #define DMPAPER_LAST        DMPAPER_FANFOLD_LGL_GERMAN
  1457.  
  1458. #define DMPAPER_USER        256
  1459.  
  1460. /* bin selections */
  1461. #define DMBIN_FIRST         DMBIN_UPPER
  1462. #define DMBIN_UPPER         1
  1463. #define DMBIN_ONLYONE       1
  1464. #define DMBIN_LOWER         2
  1465. #define DMBIN_MIDDLE        3
  1466. #define DMBIN_MANUAL        4
  1467. #define DMBIN_ENVELOPE      5
  1468. #define DMBIN_ENVMANUAL     6
  1469. #define DMBIN_AUTO          7
  1470. #define DMBIN_TRACTOR       8
  1471. #define DMBIN_SMALLFMT      9
  1472. #define DMBIN_LARGEFMT      10
  1473. #define DMBIN_LARGECAPACITY 11
  1474. #define DMBIN_CASSETTE      14
  1475. #define DMBIN_LAST          DMBIN_CASSETTE
  1476.  
  1477. #define DMBIN_USER          256     /* device specific bins start here */
  1478.  
  1479. /* print qualities */
  1480. #define DMRES_DRAFT         (-1)
  1481. #define DMRES_LOW           (-2)
  1482. #define DMRES_MEDIUM        (-3)
  1483. #define DMRES_HIGH          (-4)
  1484.  
  1485. /* color enable/disable for color printers */
  1486. #define DMCOLOR_MONOCHROME  1
  1487. #define DMCOLOR_COLOR       2
  1488.  
  1489. /* duplex enable */
  1490. #define DMDUP_SIMPLEX    1
  1491. #define DMDUP_VERTICAL   2
  1492. #define DMDUP_HORIZONTAL 3
  1493.  
  1494. /* TrueType options */
  1495. #define DMTT_BITMAP     1       /* print TT fonts as graphics */
  1496. #define DMTT_DOWNLOAD   2       /* download TT fonts as soft fonts */
  1497. #define DMTT_SUBDEV     3       /* substitute device fonts for TT fonts */
  1498.  
  1499. /* Collation selections */
  1500. #define DMCOLLATE_FALSE  0
  1501. #define DMCOLLATE_TRUE   1
  1502.  
  1503. /* DEVMODE dmDisplayFlags flags */
  1504.  
  1505. #define DM_GRAYSCALE  0x00000001
  1506. #define DM_INTERLACED 0x00000002
  1507.  
  1508. /* GetRegionData/ExtCreateRegion */
  1509.  
  1510. #define RDH_RECTANGLES  1
  1511.  
  1512. typedef struct _RGNDATAHEADER {
  1513.     DWORD   dwSize;
  1514.     DWORD   iType;
  1515.     DWORD   nCount;
  1516.     DWORD   nRgnSize;
  1517.     RECT    rcBound;
  1518. } RGNDATAHEADER, *PRGNDATAHEADER;
  1519.  
  1520. typedef struct _RGNDATA {
  1521.     RGNDATAHEADER   rdh;
  1522.     char            Buffer[1];
  1523. } RGNDATA, *PRGNDATA, NEAR *NPRGNDATA, FAR *LPRGNDATA;
  1524.  
  1525.  
  1526. typedef struct _ABC {
  1527.     int     abcA;
  1528.     UINT    abcB;
  1529.     int     abcC;
  1530. } ABC, *PABC, NEAR *NPABC, FAR *LPABC;
  1531.  
  1532. typedef struct _ABCFLOAT {
  1533.     FLOAT   abcfA;
  1534.     FLOAT   abcfB;
  1535.     FLOAT   abcfC;
  1536. } ABCFLOAT, *PABCFLOAT, NEAR *NPABCFLOAT, FAR *LPABCFLOAT;
  1537.  
  1538. #ifndef NOTEXTMETRIC
  1539.  
  1540. typedef struct _OUTLINETEXTMETRICA {
  1541.     UINT    otmSize;
  1542.     TEXTMETRICA otmTextMetrics;
  1543.     BYTE    otmFiller;
  1544.     PANOSE  otmPanoseNumber;
  1545.     UINT    otmfsSelection;
  1546.     UINT    otmfsType;
  1547.      int    otmsCharSlopeRise;
  1548.      int    otmsCharSlopeRun;
  1549.      int    otmItalicAngle;
  1550.     UINT    otmEMSquare;
  1551.      int    otmAscent;
  1552.      int    otmDescent;
  1553.     UINT    otmLineGap;
  1554.     UINT    otmsCapEmHeight;
  1555.     UINT    otmsXHeight;
  1556.     RECT    otmrcFontBox;
  1557.      int    otmMacAscent;
  1558.      int    otmMacDescent;
  1559.     UINT    otmMacLineGap;
  1560.     UINT    otmusMinimumPPEM;
  1561.     POINT   otmptSubscriptSize;
  1562.     POINT   otmptSubscriptOffset;
  1563.     POINT   otmptSuperscriptSize;
  1564.     POINT   otmptSuperscriptOffset;
  1565.     UINT    otmsStrikeoutSize;
  1566.      int    otmsStrikeoutPosition;
  1567.      int    otmsUnderscoreSize;
  1568.      int    otmsUnderscorePosition;
  1569.     PSTR    otmpFamilyName;
  1570.     PSTR    otmpFaceName;
  1571.     PSTR    otmpStyleName;
  1572.     PSTR    otmpFullName;
  1573. } OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, NEAR *NPOUTLINETEXTMETRICA, FAR *LPOUTLINETEXTMETRICA;
  1574. typedef struct _OUTLINETEXTMETRICW {
  1575.     UINT    otmSize;
  1576.     TEXTMETRICW otmTextMetrics;
  1577.     BYTE    otmFiller;
  1578.     PANOSE  otmPanoseNumber;
  1579.     UINT    otmfsSelection;
  1580.     UINT    otmfsType;
  1581.      int    otmsCharSlopeRise;
  1582.      int    otmsCharSlopeRun;
  1583.      int    otmItalicAngle;
  1584.     UINT    otmEMSquare;
  1585.      int    otmAscent;
  1586.      int    otmDescent;
  1587.     UINT    otmLineGap;
  1588.     UINT    otmsCapEmHeight;
  1589.     UINT    otmsXHeight;
  1590.     RECT    otmrcFontBox;
  1591.      int    otmMacAscent;
  1592.      int    otmMacDescent;
  1593.     UINT    otmMacLineGap;
  1594.     UINT    otmusMinimumPPEM;
  1595.     POINT   otmptSubscriptSize;
  1596.     POINT   otmptSubscriptOffset;
  1597.     POINT   otmptSuperscriptSize;
  1598.     POINT   otmptSuperscriptOffset;
  1599.     UINT    otmsStrikeoutSize;
  1600.      int    otmsStrikeoutPosition;
  1601.      int    otmsUnderscoreSize;
  1602.      int    otmsUnderscorePosition;
  1603.     PSTR    otmpFamilyName;
  1604.     PSTR    otmpFaceName;
  1605.     PSTR    otmpStyleName;
  1606.     PSTR    otmpFullName;
  1607. } OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, NEAR *NPOUTLINETEXTMETRICW, FAR *LPOUTLINETEXTMETRICW;
  1608. #ifdef UNICODE
  1609. typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
  1610. typedef POUTLINETEXTMETRICW POUTLINETEXTMETRIC;
  1611. typedef NPOUTLINETEXTMETRICW NPOUTLINETEXTMETRIC;
  1612. typedef LPOUTLINETEXTMETRICW LPOUTLINETEXTMETRIC;
  1613. #else
  1614. typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
  1615. typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC;
  1616. typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC;
  1617. typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
  1618. #endif // UNICODE
  1619.  
  1620. #endif /* NOTEXTMETRIC */
  1621.  
  1622.  
  1623. typedef struct tagPOLYTEXTA
  1624. {
  1625.     int       x;
  1626.     int       y;
  1627.     UINT      n;
  1628.     LPCSTR    lpstr;
  1629.     UINT      uiFlags;
  1630.     RECT      rcl;
  1631.     int      *pdx;
  1632. } POLYTEXTA, *PPOLYTEXTA, NEAR *NPPOLYTEXTA, FAR *LPPOLYTEXTA;
  1633. typedef struct tagPOLYTEXTW
  1634. {
  1635.     int       x;
  1636.     int       y;
  1637.     UINT      n;
  1638.     LPCWSTR   lpstr;
  1639.     UINT      uiFlags;
  1640.     RECT      rcl;
  1641.     int      *pdx;
  1642. } POLYTEXTW, *PPOLYTEXTW, NEAR *NPPOLYTEXTW, FAR *LPPOLYTEXTW;
  1643. #ifdef UNICODE
  1644. typedef POLYTEXTW POLYTEXT;
  1645. typedef PPOLYTEXTW PPOLYTEXT;
  1646. typedef NPPOLYTEXTW NPPOLYTEXT;
  1647. typedef LPPOLYTEXTW LPPOLYTEXT;
  1648. #else
  1649. typedef POLYTEXTA POLYTEXT;
  1650. typedef PPOLYTEXTA PPOLYTEXT;
  1651. typedef NPPOLYTEXTA NPPOLYTEXT;
  1652. typedef LPPOLYTEXTA LPPOLYTEXT;
  1653. #endif // UNICODE
  1654.  
  1655. typedef struct _FIXED {
  1656.     WORD    fract;
  1657.     short   value;
  1658. } FIXED;
  1659.  
  1660.  
  1661. typedef struct _MAT2 {
  1662.      FIXED  eM11;
  1663.      FIXED  eM12;
  1664.      FIXED  eM21;
  1665.      FIXED  eM22;
  1666. } MAT2, FAR *LPMAT2;
  1667.  
  1668.  
  1669.  
  1670. typedef struct _GLYPHMETRICS {
  1671.     UINT    gmBlackBoxX;
  1672.     UINT    gmBlackBoxY;
  1673.     POINT   gmptGlyphOrigin;
  1674.     short   gmCellIncX;
  1675.     short   gmCellIncY;
  1676. } GLYPHMETRICS, FAR *LPGLYPHMETRICS;
  1677.  
  1678. //  GetGlyphOutline constants
  1679.  
  1680. #define GGO_METRICS        0
  1681. #define GGO_BITMAP         1
  1682. #define GGO_NATIVE         2
  1683.  
  1684. #define TT_POLYGON_TYPE   24
  1685.  
  1686. #define TT_PRIM_LINE       1
  1687. #define TT_PRIM_QSPLINE    2
  1688.  
  1689. typedef struct tagPOINTFX
  1690. {
  1691.     FIXED x;
  1692.     FIXED y;
  1693. } POINTFX, FAR* LPPOINTFX;
  1694.  
  1695. typedef struct tagTTPOLYCURVE
  1696. {
  1697.     WORD    wType;
  1698.     WORD    cpfx;
  1699.     POINTFX apfx[1];
  1700. } TTPOLYCURVE, FAR* LPTTPOLYCURVE;
  1701.  
  1702. typedef struct tagTTPOLYGONHEADER
  1703. {
  1704.     DWORD   cb;
  1705.     DWORD   dwType;
  1706.     POINTFX pfxStart;
  1707. } TTPOLYGONHEADER, FAR* LPTTPOLYGONHEADER;
  1708.  
  1709.  
  1710.  
  1711. typedef struct _RASTERIZER_STATUS {
  1712.     short   nSize;
  1713.     short   wFlags;
  1714.     short   nLanguageID;
  1715. } RASTERIZER_STATUS, FAR *LPRASTERIZER_STATUS;
  1716.  
  1717. /* bits defined in wFlags of RASTERIZER_STATUS */
  1718. #define TT_AVAILABLE    0x0001
  1719. #define TT_ENABLED      0x0002
  1720.  
  1721. #ifdef STRICT
  1722. #if !defined(NOTEXTMETRIC)
  1723. typedef int (CALLBACK* OLDFONTENUMPROC)(CONST LOGFONT *, CONST TEXTMETRIC *, DWORD, LPARAM);
  1724. #else
  1725. typedef int (CALLBACK* OLDFONTENUMPROC)(CONST LOGFONT * ,CONST VOID *, DWORD, LPARAM);
  1726. #endif
  1727. typedef int (CALLBACK* GOBJENUMPROC)(LPVOID, LPARAM);
  1728. typedef VOID (CALLBACK* LINEDDAPROC)(int, int, LPARAM);
  1729. #else
  1730. typedef FARPROC OLDFONTENUMPROC;
  1731. typedef FARPROC GOBJENUMPROC;
  1732. typedef FARPROC LINEDDAPROC;
  1733. #endif
  1734.  
  1735. typedef OLDFONTENUMPROC FONTENUMPROC;
  1736.  
  1737. int WINAPI AddFontResourceA(LPCSTR);
  1738. int WINAPI AddFontResourceW(LPCWSTR);
  1739. #ifdef UNICODE
  1740. #define AddFontResource  AddFontResourceW
  1741. #else
  1742. #define AddFontResource  AddFontResourceA
  1743. #endif // !UNICODE
  1744.  
  1745. BOOL  WINAPI AnimatePalette(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);
  1746. BOOL  WINAPI Arc(HDC, int, int, int, int, int, int, int, int);
  1747. BOOL  WINAPI BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);
  1748. BOOL  WINAPI CancelDC(HDC);
  1749. BOOL  WINAPI Chord(HDC, int, int, int, int, int, int, int, int);
  1750. HMETAFILE  WINAPI CloseMetaFile(HDC);
  1751. int     WINAPI CombineRgn(HRGN, HRGN, HRGN, int);
  1752. HMETAFILE WINAPI CopyMetaFileA(HMETAFILE, LPCSTR);
  1753. HMETAFILE WINAPI CopyMetaFileW(HMETAFILE, LPCWSTR);
  1754. #ifdef UNICODE
  1755. #define CopyMetaFile  CopyMetaFileW
  1756. #else
  1757. #define CopyMetaFile  CopyMetaFileA
  1758. #endif // !UNICODE
  1759. HBITMAP WINAPI CreateBitmap(int, int, UINT, UINT, CONST VOID *);
  1760. HBITMAP WINAPI CreateBitmapIndirect(CONST BITMAP *);
  1761. HBRUSH  WINAPI CreateBrushIndirect(CONST LOGBRUSH *);
  1762. HBITMAP WINAPI CreateCompatibleBitmap(HDC, int, int);
  1763. HBITMAP WINAPI CreateDiscardableBitmap(HDC, int, int);
  1764. HDC     WINAPI CreateCompatibleDC(HDC);
  1765. HDC     WINAPI CreateDCA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODEA *);
  1766. HDC     WINAPI CreateDCW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODEW *);
  1767. #ifdef UNICODE
  1768. #define CreateDC  CreateDCW
  1769. #else
  1770. #define CreateDC  CreateDCA
  1771. #endif // !UNICODE
  1772. HBITMAP WINAPI CreateDIBitmap(HDC, CONST BITMAPINFOHEADER *, DWORD, CONST VOID *, CONST BITMAPINFO *, UINT);
  1773. HBRUSH  WINAPI CreateDIBPatternBrush(HGLOBAL, UINT);
  1774. HBRUSH  WINAPI CreateDIBPatternBrushPt(CONST VOID *, UINT);
  1775. HRGN    WINAPI CreateEllipticRgn(int, int, int, int);
  1776. HRGN    WINAPI CreateEllipticRgnIndirect(CONST RECT *);
  1777. HFONT   WINAPI CreateFontIndirectA(CONST LOGFONTA *);
  1778. HFONT   WINAPI CreateFontIndirectW(CONST LOGFONTW *);
  1779. #ifdef UNICODE
  1780. #define CreateFontIndirect  CreateFontIndirectW
  1781. #else
  1782. #define CreateFontIndirect  CreateFontIndirectA
  1783. #endif // !UNICODE
  1784. HFONT   WINAPI CreateFontA(int, int, int, int, int, DWORD,
  1785.                              DWORD, DWORD, DWORD, DWORD, DWORD,
  1786.                              DWORD, DWORD, LPCSTR);
  1787. HFONT   WINAPI CreateFontW(int, int, int, int, int, DWORD,
  1788.                              DWORD, DWORD, DWORD, DWORD, DWORD,
  1789.                              DWORD, DWORD, LPCWSTR);
  1790. #ifdef UNICODE
  1791. #define CreateFont  CreateFontW
  1792. #else
  1793. #define CreateFont  CreateFontA
  1794. #endif // !UNICODE
  1795.  
  1796. HBRUSH  WINAPI CreateHatchBrush(int, COLORREF);
  1797. HDC     WINAPI CreateICA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODEA *);
  1798. HDC     WINAPI CreateICW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODEW *);
  1799. #ifdef UNICODE
  1800. #define CreateIC  CreateICW
  1801. #else
  1802. #define CreateIC  CreateICA
  1803. #endif // !UNICODE
  1804. HDC     WINAPI CreateMetaFileA(LPCSTR);
  1805. HDC     WINAPI CreateMetaFileW(LPCWSTR);
  1806. #ifdef UNICODE
  1807. #define CreateMetaFile  CreateMetaFileW
  1808. #else
  1809. #define CreateMetaFile  CreateMetaFileA
  1810. #endif // !UNICODE
  1811. HPALETTE WINAPI CreatePalette(CONST LOGPALETTE *);
  1812. HPEN    WINAPI CreatePen(int, int, COLORREF);
  1813. HPEN    WINAPI CreatePenIndirect(CONST LOGPEN *);
  1814. HRGN    WINAPI CreatePolyPolygonRgn(CONST POINT *, CONST INT *, int, int);
  1815. HBRUSH  WINAPI CreatePatternBrush(HBITMAP);
  1816. HRGN    WINAPI CreateRectRgn(int, int, int, int);
  1817. HRGN    WINAPI CreateRectRgnIndirect(CONST RECT *);
  1818. HRGN    WINAPI CreateRoundRectRgn(int, int, int, int, int, int);
  1819. BOOL    WINAPI CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR);
  1820. BOOL    WINAPI CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);
  1821. #ifdef UNICODE
  1822. #define CreateScalableFontResource  CreateScalableFontResourceW
  1823. #else
  1824. #define CreateScalableFontResource  CreateScalableFontResourceA
  1825. #endif // !UNICODE
  1826. HBRUSH  WINAPI CreateSolidBrush(COLORREF);
  1827.  
  1828. BOOL WINAPI DeleteDC(HDC);
  1829. BOOL WINAPI DeleteMetaFile(HMETAFILE);
  1830. BOOL WINAPI DeleteObject(HGDIOBJ);
  1831.  
  1832. /* define types of pointers to ExtDeviceMode() and DeviceCapabilities()
  1833.  * functions for Win 3.1 compatibility
  1834.  */
  1835.  
  1836. typedef UINT   (CALLBACK* LPFNDEVMODE)(HWND, HMODULE, LPDEVMODE, LPSTR, LPSTR, LPDEVMODE, LPSTR, UINT);
  1837.  
  1838. typedef DWORD  (CALLBACK* LPFNDEVCAPS)(LPSTR, LPSTR, UINT, LPSTR, LPDEVMODE);
  1839.  
  1840. /* mode selections for the device mode function */
  1841. #define DM_UPDATE           1
  1842. #define DM_COPY             2
  1843. #define DM_PROMPT           4
  1844. #define DM_MODIFY           8
  1845.  
  1846. #define DM_IN_BUFFER        DM_MODIFY
  1847. #define DM_IN_PROMPT        DM_PROMPT
  1848. #define DM_OUT_BUFFER       DM_COPY
  1849. #define DM_OUT_DEFAULT      DM_UPDATE
  1850.  
  1851. /* device capabilities indices */
  1852. #define DC_FIELDS           1
  1853. #define DC_PAPERS           2
  1854. #define DC_PAPERSIZE        3
  1855. #define DC_MINEXTENT        4
  1856. #define DC_MAXEXTENT        5
  1857. #define DC_BINS             6
  1858. #define DC_DUPLEX           7
  1859. #define DC_SIZE             8
  1860. #define DC_EXTRA            9
  1861. #define DC_VERSION          10
  1862. #define DC_DRIVER           11
  1863. #define DC_BINNAMES         12
  1864. #define DC_ENUMRESOLUTIONS  13
  1865. #define DC_FILEDEPENDENCIES 14
  1866. #define DC_TRUETYPE         15
  1867. #define DC_PAPERNAMES       16
  1868. #define DC_ORIENTATION      17
  1869. #define DC_COPIES           18
  1870.  
  1871. /* bit fields of the return value (DWORD) for DC_TRUETYPE */
  1872. #define DCTT_BITMAP         0x0000001L
  1873. #define DCTT_DOWNLOAD       0x0000002L
  1874. #define DCTT_SUBDEV         0x0000004L
  1875.  
  1876. int  WINAPI DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD,
  1877.                                 LPSTR, CONST DEVMODEA *);
  1878. int  WINAPI DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD,
  1879.                                 LPWSTR, CONST DEVMODEW *);
  1880. #ifdef UNICODE
  1881. #define DeviceCapabilities  DeviceCapabilitiesW
  1882. #else
  1883. #define DeviceCapabilities  DeviceCapabilitiesA
  1884. #endif // !UNICODE
  1885.  
  1886. BOOL  WINAPI Ellipse(HDC, int, int, int, int);
  1887.  
  1888. int  WINAPI EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROC, LPARAM);
  1889. int  WINAPI EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROC, LPARAM);
  1890. #ifdef UNICODE
  1891. #define EnumFontFamilies  EnumFontFamiliesW
  1892. #else
  1893. #define EnumFontFamilies  EnumFontFamiliesA
  1894. #endif // !UNICODE
  1895. int  WINAPI EnumFontsA(HDC, LPCSTR,  FONTENUMPROC, LPARAM);
  1896. int  WINAPI EnumFontsW(HDC, LPCWSTR,  FONTENUMPROC, LPARAM);
  1897. #ifdef UNICODE
  1898. #define EnumFonts  EnumFontsW
  1899. #else
  1900. #define EnumFonts  EnumFontsA
  1901. #endif // !UNICODE
  1902.  
  1903. #ifdef STRICT
  1904. int  WINAPI EnumObjects(HDC, int, GOBJENUMPROC, LPARAM);
  1905. #else
  1906. int  WINAPI EnumObjects(HDC, int, GOBJENUMPROC, LPVOID);
  1907. #endif
  1908.  
  1909. BOOL WINAPI EqualRgn(HRGN, HRGN);
  1910. int  WINAPI Escape(HDC, int, int, LPCSTR, LPVOID);
  1911. int  WINAPI ExtEscape(HDC, int, int, LPCSTR, int, LPSTR);
  1912. int  WINAPI DrawEscape(HDC, int, int, LPCSTR);
  1913. int  WINAPI ExcludeClipRect(HDC, int, int, int, int);
  1914. HRGN WINAPI ExtCreateRegion(CONST XFORM *, DWORD, CONST RGNDATA *);
  1915. BOOL  WINAPI ExtFloodFill(HDC, int, int, COLORREF, UINT);
  1916. BOOL   WINAPI FillRgn(HDC, HRGN, HBRUSH);
  1917. BOOL   WINAPI FloodFill(HDC, int, int, COLORREF);
  1918. BOOL   WINAPI FrameRgn(HDC, HRGN, HBRUSH, int, int);
  1919. int   WINAPI GetROP2(HDC);
  1920. BOOL  WINAPI GetAspectRatioFilterEx(HDC, LPSIZE);
  1921. COLORREF WINAPI GetBkColor(HDC);
  1922. int   WINAPI GetBkMode(HDC);
  1923. LONG  WINAPI GetBitmapBits(HBITMAP, LONG, LPVOID);
  1924. BOOL  WINAPI GetBitmapDimensionEx(HBITMAP, LPSIZE);
  1925. UINT  WINAPI GetBoundsRect(HDC, LPRECT, UINT);
  1926.  
  1927. BOOL  WINAPI GetBrushOrgEx(HDC, LPPOINT);
  1928.  
  1929. BOOL  WINAPI GetCharWidthA(HDC, UINT, UINT, LPINT);
  1930. BOOL  WINAPI GetCharWidthW(HDC, UINT, UINT, LPINT);
  1931. #ifdef UNICODE
  1932. #define GetCharWidth  GetCharWidthW
  1933. #else
  1934. #define GetCharWidth  GetCharWidthA
  1935. #endif // !UNICODE
  1936. BOOL  WINAPI GetCharWidth32A(HDC, UINT, UINT, LPINT);
  1937. BOOL  WINAPI GetCharWidth32W(HDC, UINT, UINT, LPINT);
  1938. #ifdef UNICODE
  1939. #define GetCharWidth32  GetCharWidth32W
  1940. #else
  1941. #define GetCharWidth32  GetCharWidth32A
  1942. #endif // !UNICODE
  1943. BOOL  APIENTRY GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT);
  1944. BOOL  APIENTRY GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT);
  1945. #ifdef UNICODE
  1946. #define GetCharWidthFloat  GetCharWidthFloatW
  1947. #else
  1948. #define GetCharWidthFloat  GetCharWidthFloatA
  1949. #endif // !UNICODE
  1950.  
  1951. BOOL  APIENTRY GetCharABCWidthsA(HDC, UINT, UINT, LPABC);
  1952. BOOL  APIENTRY GetCharABCWidthsW(HDC, UINT, UINT, LPABC);
  1953. #ifdef UNICODE
  1954. #define GetCharABCWidths  GetCharABCWidthsW
  1955. #else
  1956. #define GetCharABCWidths  GetCharABCWidthsA
  1957. #endif // !UNICODE
  1958. BOOL  APIENTRY GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT);
  1959. BOOL  APIENTRY GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT);
  1960. #ifdef UNICODE
  1961. #define GetCharABCWidthsFloat  GetCharABCWidthsFloatW
  1962. #else
  1963. #define GetCharABCWidthsFloat  GetCharABCWidthsFloatA
  1964. #endif // !UNICODE
  1965.  
  1966. int   WINAPI GetClipBox(HDC, LPRECT);
  1967. int   WINAPI GetClipRgn(HDC, HRGN);
  1968. int   WINAPI GetMetaRgn(HDC, HRGN);
  1969. HGDIOBJ WINAPI GetCurrentObject(HDC, UINT);
  1970. BOOL  WINAPI GetCurrentPositionEx(HDC, LPPOINT);
  1971. int   WINAPI GetDeviceCaps(HDC, int);
  1972. int   WINAPI GetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
  1973. DWORD WINAPI GetFontData(HDC, DWORD, DWORD, LPVOID, DWORD);
  1974. DWORD WINAPI GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
  1975. DWORD WINAPI GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
  1976. #ifdef UNICODE
  1977. #define GetGlyphOutline  GetGlyphOutlineW
  1978. #else
  1979. #define GetGlyphOutline  GetGlyphOutlineA
  1980. #endif // !UNICODE
  1981. int   WINAPI GetGraphicsMode(HDC);
  1982. int   WINAPI GetMapMode(HDC);
  1983. UINT  WINAPI GetMetaFileBitsEx(HMETAFILE, UINT, LPVOID);
  1984. HMETAFILE   WINAPI GetMetaFileA(LPCSTR);
  1985. HMETAFILE   WINAPI GetMetaFileW(LPCWSTR);
  1986. #ifdef UNICODE
  1987. #define GetMetaFile  GetMetaFileW
  1988. #else
  1989. #define GetMetaFile  GetMetaFileA
  1990. #endif // !UNICODE
  1991. COLORREF WINAPI GetNearestColor(HDC, COLORREF);
  1992. UINT  WINAPI GetNearestPaletteIndex(HPALETTE, COLORREF);
  1993. DWORD WINAPI GetObjectType(HGDIOBJ h);
  1994.  
  1995. #ifndef NOTEXTMETRIC
  1996.  
  1997. UINT APIENTRY GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRICA);
  1998. UINT APIENTRY GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRICW);
  1999. #ifdef UNICODE
  2000. #define GetOutlineTextMetrics  GetOutlineTextMetricsW
  2001. #else
  2002. #define GetOutlineTextMetrics  GetOutlineTextMetricsA
  2003. #endif // !UNICODE
  2004.  
  2005. #endif /* NOTEXTMETRIC */
  2006.  
  2007. UINT  WINAPI GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY);
  2008. COLORREF WINAPI GetPixel(HDC, int, int);
  2009. int   WINAPI GetPolyFillMode(HDC);
  2010. BOOL  WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS, UINT);
  2011. DWORD WINAPI GetRegionData(HRGN, DWORD, LPRGNDATA);
  2012. int   WINAPI GetRgnBox(HRGN, LPRECT);
  2013. HGDIOBJ WINAPI GetStockObject(int);
  2014. int   WINAPI GetStretchBltMode(HDC);
  2015. UINT  WINAPI GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
  2016. UINT  WINAPI GetSystemPaletteUse(HDC);
  2017. int   WINAPI GetTextCharacterExtra(HDC);
  2018. UINT  WINAPI GetTextAlign(HDC);
  2019. COLORREF WINAPI GetTextColor(HDC);
  2020.  
  2021. BOOL  APIENTRY GetTextExtentPointA(
  2022.                     HDC,
  2023.                     LPCSTR,
  2024.                     int,
  2025.                     LPSIZE
  2026.                     );
  2027. BOOL  APIENTRY GetTextExtentPointW(
  2028.                     HDC,
  2029.                     LPCWSTR,
  2030.                     int,
  2031.                     LPSIZE
  2032.                     );
  2033. #ifdef UNICODE
  2034. #define GetTextExtentPoint  GetTextExtentPointW
  2035. #else
  2036. #define GetTextExtentPoint  GetTextExtentPointA
  2037. #endif // !UNICODE
  2038.  
  2039. BOOL  APIENTRY GetTextExtentPoint32A(
  2040.                     HDC,
  2041.                     LPCSTR,
  2042.                     int,
  2043.                     LPSIZE
  2044.                     );
  2045. BOOL  APIENTRY GetTextExtentPoint32W(
  2046.                     HDC,
  2047.                     LPCWSTR,
  2048.                     int,
  2049.                     LPSIZE
  2050.                     );
  2051. #ifdef UNICODE
  2052. #define GetTextExtentPoint32  GetTextExtentPoint32W
  2053. #else
  2054. #define GetTextExtentPoint32  GetTextExtentPoint32A
  2055. #endif // !UNICODE
  2056.  
  2057. BOOL  APIENTRY GetTextExtentExPointA(
  2058.                     HDC,
  2059.                     LPCSTR,
  2060.                     int,
  2061.                     int,
  2062.                     LPINT,
  2063.                     LPINT,
  2064.                     LPSIZE
  2065.                     );
  2066. BOOL  APIENTRY GetTextExtentExPointW(
  2067.                     HDC,
  2068.                     LPCWSTR,
  2069.                     int,
  2070.                     int,
  2071.                     LPINT,
  2072.                     LPINT,
  2073.                     LPSIZE
  2074.                     );
  2075. #ifdef UNICODE
  2076. #define GetTextExtentExPoint  GetTextExtentExPointW
  2077. #else
  2078. #define GetTextExtentExPoint  GetTextExtentExPointA
  2079. #endif // !UNICODE
  2080.  
  2081. BOOL  WINAPI GetViewportExtEx(HDC, LPSIZE);
  2082. BOOL  WINAPI GetViewportOrgEx(HDC, LPPOINT);
  2083. BOOL  WINAPI GetWindowExtEx(HDC, LPSIZE);
  2084. BOOL  WINAPI GetWindowOrgEx(HDC, LPPOINT);
  2085.  
  2086. int  WINAPI IntersectClipRect(HDC, int, int, int, int);
  2087. BOOL WINAPI InvertRgn(HDC, HRGN);
  2088. BOOL WINAPI LineDDA(int, int, int, int, LINEDDAPROC, LPARAM);
  2089. BOOL WINAPI LineTo(HDC, int, int);
  2090. BOOL WINAPI MaskBlt(HDC, int, int, int, int,
  2091.               HDC, int, int, HBITMAP, int, int, DWORD);
  2092. BOOL WINAPI PlgBlt(HDC, CONST POINT *, HDC, int, int, int,
  2093.                      int, HBITMAP, int, int);
  2094.  
  2095. int  WINAPI OffsetClipRgn(HDC, int, int);
  2096. int  WINAPI OffsetRgn(HRGN, int, int);
  2097. BOOL WINAPI PatBlt(HDC, int, int, int, int, DWORD);
  2098. BOOL WINAPI Pie(HDC, int, int, int, int, int, int, int, int);
  2099. BOOL WINAPI PlayMetaFile(HDC, HMETAFILE);
  2100. BOOL WINAPI PaintRgn(HDC, HRGN);
  2101. BOOL WINAPI PolyPolygon(HDC, CONST POINT *, CONST INT *, int);
  2102. BOOL WINAPI PtInRegion(HRGN, int, int);
  2103. BOOL WINAPI PtVisible(HDC, int, int);
  2104. BOOL WINAPI RectInRegion(HRGN, CONST RECT *);
  2105. BOOL WINAPI RectVisible(HDC, CONST RECT *);
  2106. BOOL WINAPI Rectangle(HDC, int, int, int, int);
  2107. BOOL WINAPI RestoreDC(HDC, int);
  2108. HDC  WINAPI ResetDCA(HDC, CONST DEVMODEA *);
  2109. HDC  WINAPI ResetDCW(HDC, CONST DEVMODEW *);
  2110. #ifdef UNICODE
  2111. #define ResetDC  ResetDCW
  2112. #else
  2113. #define ResetDC  ResetDCA
  2114. #endif // !UNICODE
  2115. UINT WINAPI RealizePalette(HDC);
  2116. BOOL WINAPI RemoveFontResourceA(LPCSTR);
  2117. BOOL WINAPI RemoveFontResourceW(LPCWSTR);
  2118. #ifdef UNICODE
  2119. #define RemoveFontResource  RemoveFontResourceW
  2120. #else
  2121. #define RemoveFontResource  RemoveFontResourceA
  2122. #endif // !UNICODE
  2123. BOOL  WINAPI RoundRect(HDC, int, int, int, int, int, int);
  2124. BOOL WINAPI ResizePalette(HPALETTE, UINT);
  2125.  
  2126. int  WINAPI SaveDC(HDC);
  2127. int  WINAPI SelectClipRgn(HDC, HRGN);
  2128. int  WINAPI ExtSelectClipRgn(HDC, HRGN, int);
  2129. int  WINAPI SetMetaRgn(HDC);
  2130. HGDIOBJ WINAPI SelectObject(HDC, HGDIOBJ);
  2131. HPALETTE WINAPI SelectPalette(HDC, HPALETTE, BOOL);
  2132. COLORREF WINAPI SetBkColor(HDC, COLORREF);
  2133. int   WINAPI SetBkMode(HDC, int);
  2134. LONG  WINAPI SetBitmapBits(HBITMAP, DWORD, CONST VOID *);
  2135.  
  2136. UINT  WINAPI SetBoundsRect(HDC, CONST RECT *, UINT);
  2137. int   WINAPI SetDIBits(HDC, HBITMAP, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);
  2138. int   WINAPI SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int,
  2139. int, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);
  2140. DWORD WINAPI SetMapperFlags(HDC, DWORD);
  2141. int   WINAPI SetGraphicsMode(HDC hdc, int iMode);
  2142. int   WINAPI SetMapMode(HDC, int);
  2143. HMETAFILE   WINAPI SetMetaFileBitsEx(UINT, CONST BYTE *);
  2144. UINT  WINAPI SetPaletteEntries(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);
  2145. COLORREF WINAPI SetPixel(HDC, int, int, COLORREF);
  2146. BOOL   WINAPI SetPixelV(HDC, int, int, COLORREF);
  2147. int   WINAPI SetPolyFillMode(HDC, int);
  2148. BOOL   WINAPI StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
  2149. BOOL   WINAPI SetRectRgn(HRGN, int, int, int, int);
  2150. int   WINAPI StretchDIBits(HDC, int, int, int, int, int, int, int, int, CONST
  2151.         VOID *, CONST BITMAPINFO *, UINT, DWORD);
  2152. int   WINAPI SetROP2(HDC, int);
  2153. int   WINAPI SetStretchBltMode(HDC, int);
  2154. UINT  WINAPI SetSystemPaletteUse(HDC, UINT);
  2155. int   WINAPI SetTextCharacterExtra(HDC, int);
  2156. COLORREF WINAPI SetTextColor(HDC, COLORREF);
  2157. UINT  WINAPI SetTextAlign(HDC, UINT);
  2158. BOOL  WINAPI SetTextJustification(HDC, int, int);
  2159. BOOL  WINAPI UpdateColors(HDC);
  2160.  
  2161. #ifndef NOMETAFILE
  2162.  
  2163. BOOL  WINAPI PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT);
  2164. typedef int (CALLBACK* MFENUMPROC)(HDC, HANDLETABLE FAR*, METARECORD FAR*, int, LPARAM);
  2165. BOOL  WINAPI EnumMetaFile(HDC, HMETAFILE, MFENUMPROC, LPARAM);
  2166.  
  2167. typedef int (CALLBACK* ENHMFENUMPROC)(HDC, HANDLETABLE FAR*, CONST ENHMETARECORD *, int, LPARAM);
  2168.  
  2169. // Enhanced Metafile Function Declarations
  2170.  
  2171. HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
  2172. HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE, LPCSTR);
  2173. HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR);
  2174. #ifdef UNICODE
  2175. #define CopyEnhMetaFile  CopyEnhMetaFileW
  2176. #else
  2177. #define CopyEnhMetaFile  CopyEnhMetaFileA
  2178. #endif // !UNICODE
  2179. HDC   WINAPI CreateEnhMetaFileA(HDC, LPCSTR, CONST RECT *, LPCSTR);
  2180. HDC   WINAPI CreateEnhMetaFileW(HDC, LPCWSTR, CONST RECT *, LPCWSTR);
  2181. #ifdef UNICODE
  2182. #define CreateEnhMetaFile  CreateEnhMetaFileW
  2183. #else
  2184. #define CreateEnhMetaFile  CreateEnhMetaFileA
  2185. #endif // !UNICODE
  2186. BOOL  WINAPI DeleteEnhMetaFile(HENHMETAFILE);
  2187. BOOL  WINAPI EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMFENUMPROC,
  2188. LPVOID, CONST RECT *);
  2189. HENHMETAFILE  WINAPI GetEnhMetaFileA(LPCSTR);
  2190. HENHMETAFILE  WINAPI GetEnhMetaFileW(LPCWSTR);
  2191. #ifdef UNICODE
  2192. #define GetEnhMetaFile  GetEnhMetaFileW
  2193. #else
  2194. #define GetEnhMetaFile  GetEnhMetaFileA
  2195. #endif // !UNICODE
  2196. UINT  WINAPI GetEnhMetaFileBits(HENHMETAFILE, UINT, LPBYTE);
  2197. UINT  WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR );
  2198. UINT  WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR );
  2199. #ifdef UNICODE
  2200. #define GetEnhMetaFileDescription  GetEnhMetaFileDescriptionW
  2201. #else
  2202. #define GetEnhMetaFileDescription  GetEnhMetaFileDescriptionA
  2203. #endif // !UNICODE
  2204. UINT  WINAPI GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER );
  2205. UINT  WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY );
  2206. UINT  WINAPI GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, INT, HDC);
  2207. BOOL  WINAPI PlayEnhMetaFile(HDC, HENHMETAFILE, CONST RECT *);
  2208. BOOL  WINAPI PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, CONST ENHMETARECORD *, UINT);
  2209. HENHMETAFILE  WINAPI SetEnhMetaFileBits(UINT, CONST BYTE *);
  2210. HENHMETAFILE  WINAPI SetWinMetaFileBits(UINT, CONST BYTE *, HDC, CONST METAFILEPICT *);
  2211. BOOL  WINAPI GdiComment(HDC, UINT, CONST BYTE *);
  2212.  
  2213. #endif  /* NOMETAFILE */
  2214.  
  2215. #ifndef NOTEXTMETRIC
  2216.  
  2217. BOOL WINAPI GetTextMetricsA(HDC, LPTEXTMETRICA);
  2218. BOOL WINAPI GetTextMetricsW(HDC, LPTEXTMETRICW);
  2219. #ifdef UNICODE
  2220. #define GetTextMetrics  GetTextMetricsW
  2221. #else
  2222. #define GetTextMetrics  GetTextMetricsA
  2223. #endif // !UNICODE
  2224.  
  2225. #endif
  2226.  
  2227. /* new GDI */
  2228. BOOL WINAPI AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT);
  2229. BOOL WINAPI PolyPolyline(HDC, CONST POINT *, CONST DWORD *, DWORD);
  2230. BOOL WINAPI GetWorldTransform(HDC, LPXFORM);
  2231. BOOL WINAPI SetWorldTransform(HDC, CONST XFORM *);
  2232. BOOL WINAPI ModifyWorldTransform(HDC, CONST XFORM *, DWORD);
  2233. BOOL WINAPI CombineTransform(LPXFORM, CONST XFORM *, CONST XFORM *);
  2234.  
  2235. /* Flags value for COLORADJUSTMENT */
  2236. #define CA_NEGATIVE                 0x0001
  2237. #define CA_LOG_FILTER               0x0002
  2238.  
  2239. /* IlluminantIndex values */
  2240. #define ILLUMINANT_DEVICE_DEFAULT   0
  2241. #define ILLUMINANT_A                1
  2242. #define ILLUMINANT_B                2
  2243. #define ILLUMINANT_C                3
  2244. #define ILLUMINANT_D50              4
  2245. #define ILLUMINANT_D55              5
  2246. #define ILLUMINANT_D65              6
  2247. #define ILLUMINANT_D75              7
  2248. #define ILLUMINANT_F2               8
  2249. #define ILLUMINANT_MAX_INDEX        ILLUMINANT_F2
  2250.  
  2251. #define ILLUMINANT_TUNGSTEN         ILLUMINANT_A
  2252. #define ILLUMINANT_DAYLIGHT         ILLUMINANT_C
  2253. #define ILLUMINANT_FLUORESCENT      ILLUMINANT_F2
  2254. #define ILLUMINANT_NTSC             ILLUMINANT_C
  2255.  
  2256. /* Min and max for RedGamma, GreenGamma, BlueGamma */
  2257. #define RGB_GAMMA_MIN               (WORD)02500
  2258. #define RGB_GAMMA_MAX               (WORD)65000
  2259.  
  2260. /* Min and max for ReferenceBlack and ReferenceWhite */
  2261. #define REFERENCE_WHITE_MIN         (WORD)6000
  2262. #define REFERENCE_WHITE_MAX         (WORD)10000
  2263. #define REFERENCE_BLACK_MIN         (WORD)0
  2264. #define REFERENCE_BLACK_MAX         (WORD)4000
  2265.  
  2266. /* Min and max for Contrast, Brightness, Colorfulness, RedGreenTint */
  2267. #define COLOR_ADJ_MIN               (SHORT)-100
  2268. #define COLOR_ADJ_MAX               (SHORT)100
  2269.  
  2270. typedef struct  tagCOLORADJUSTMENT {
  2271.     WORD   caSize;
  2272.     WORD   caFlags;
  2273.     WORD   caIlluminantIndex;
  2274.     WORD   caRedGamma;
  2275.     WORD   caGreenGamma;
  2276.     WORD   caBlueGamma;
  2277.     WORD   caReferenceBlack;
  2278.     WORD   caReferenceWhite;
  2279.     SHORT  caContrast;
  2280.     SHORT  caBrightness;
  2281.     SHORT  caColorfulness;
  2282.     SHORT  caRedGreenTint;
  2283. } COLORADJUSTMENT, *PCOLORADJUSTMENT, FAR *LPCOLORADJUSTMENT;
  2284.  
  2285. BOOL WINAPI SetColorAdjustment(HDC, CONST COLORADJUSTMENT *);
  2286. BOOL WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);
  2287. HPALETTE WINAPI CreateHalftonePalette(HDC);
  2288.  
  2289. #ifdef STRICT
  2290. typedef BOOL (CALLBACK* ABORTPROC)(HDC, int);
  2291. #else
  2292. typedef FARPROC ABORTPROC;
  2293. #endif
  2294.  
  2295. typedef struct _DOCINFOA {
  2296.     int     cbSize;
  2297.     LPCSTR   lpszDocName;
  2298.     LPCSTR   lpszOutput;
  2299. } DOCINFOA, *LPDOCINFOA;
  2300. typedef struct _DOCINFOW {
  2301.     int     cbSize;
  2302.     LPCWSTR  lpszDocName;
  2303.     LPCWSTR  lpszOutput;
  2304. } DOCINFOW, *LPDOCINFOW;
  2305. #ifdef UNICODE
  2306. typedef DOCINFOW DOCINFO;
  2307. typedef LPDOCINFOW LPDOCINFO;
  2308. #else
  2309. typedef DOCINFOA DOCINFO;
  2310. typedef LPDOCINFOA LPDOCINFO;
  2311. #endif // UNICODE
  2312.  
  2313. int WINAPI StartDocA(HDC, CONST DOCINFOA *);
  2314. int WINAPI StartDocW(HDC, CONST DOCINFOW *);
  2315. #ifdef UNICODE
  2316. #define StartDoc  StartDocW
  2317. #else
  2318. #define StartDoc  StartDocA
  2319. #endif // !UNICODE
  2320. int WINAPI EndDoc(HDC);
  2321. int WINAPI StartPage(HDC);
  2322. int WINAPI EndPage(HDC);
  2323. int WINAPI AbortDoc(HDC);
  2324. int WINAPI SetAbortProc(HDC, ABORTPROC);
  2325.  
  2326. BOOL WINAPI AbortPath(HDC);
  2327. BOOL WINAPI ArcTo(HDC, int, int, int, int, int, int,int, int);
  2328. BOOL WINAPI BeginPath(HDC);
  2329. BOOL WINAPI CloseFigure(HDC);
  2330. BOOL WINAPI EndPath(HDC);
  2331. BOOL WINAPI FillPath(HDC);
  2332. BOOL WINAPI FlattenPath(HDC);
  2333. int  WINAPI GetPath(HDC, LPPOINT, LPBYTE, int);
  2334. HRGN WINAPI PathToRegion(HDC);
  2335. BOOL WINAPI PolyDraw(HDC, CONST POINT *, CONST BYTE *, int);
  2336. BOOL WINAPI SelectClipPath(HDC, int);
  2337. int  WINAPI SetArcDirection(HDC, int);
  2338. BOOL WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);
  2339. BOOL WINAPI StrokeAndFillPath(HDC);
  2340. BOOL WINAPI StrokePath(HDC);
  2341. BOOL WINAPI WidenPath(HDC);
  2342. HPEN WINAPI ExtCreatePen(DWORD, DWORD, CONST LOGBRUSH *, DWORD, CONST DWORD *);
  2343. BOOL WINAPI GetMiterLimit(HDC, PFLOAT);
  2344. int  WINAPI GetArcDirection(HDC);
  2345.  
  2346. int   WINAPI GetObjectA(HGDIOBJ, int, LPVOID);
  2347. int   WINAPI GetObjectW(HGDIOBJ, int, LPVOID);
  2348. #ifdef UNICODE
  2349. #define GetObject  GetObjectW
  2350. #else
  2351. #define GetObject  GetObjectA
  2352. #endif // !UNICODE
  2353. BOOL  WINAPI MoveToEx(HDC, int, int, LPPOINT);
  2354. BOOL  WINAPI TextOutA(HDC, int, int, LPCSTR, int);
  2355. BOOL  WINAPI TextOutW(HDC, int, int, LPCWSTR, int);
  2356. #ifdef UNICODE
  2357. #define TextOut  TextOutW
  2358. #else
  2359. #define TextOut  TextOutA
  2360. #endif // !UNICODE
  2361. BOOL  WINAPI ExtTextOutA(HDC, int, int, UINT, CONST RECT *,LPCSTR, UINT, CONST INT *);
  2362. BOOL  WINAPI ExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *);
  2363. #ifdef UNICODE
  2364. #define ExtTextOut  ExtTextOutW
  2365. #else
  2366. #define ExtTextOut  ExtTextOutA
  2367. #endif // !UNICODE
  2368. BOOL  WINAPI PolyTextOutA(HDC, CONST POLYTEXTA *, int);
  2369. BOOL  WINAPI PolyTextOutW(HDC, CONST POLYTEXTW *, int);
  2370. #ifdef UNICODE
  2371. #define PolyTextOut  PolyTextOutW
  2372. #else
  2373. #define PolyTextOut  PolyTextOutA
  2374. #endif // !UNICODE
  2375.  
  2376. HRGN  WINAPI CreatePolygonRgn(CONST POINT *, int, int);
  2377. BOOL  WINAPI DPtoLP(HDC, LPPOINT, int);
  2378. BOOL  WINAPI LPtoDP(HDC, LPPOINT, int);
  2379. BOOL  WINAPI Polygon(HDC, CONST POINT *, int);
  2380. BOOL  WINAPI Polyline(HDC, CONST POINT *, int);
  2381.  
  2382. BOOL  WINAPI PolyBezier(HDC, CONST POINT *, DWORD);
  2383. BOOL  WINAPI PolyBezierTo(HDC, CONST POINT *, DWORD);
  2384. BOOL  WINAPI PolylineTo(HDC, CONST POINT *, DWORD);
  2385.  
  2386. BOOL  WINAPI SetViewportExtEx(HDC, int, int, LPSIZE);
  2387. BOOL  WINAPI SetViewportOrgEx(HDC, int, int, LPPOINT);
  2388. BOOL  WINAPI SetWindowExtEx(HDC, int, int, LPSIZE);
  2389. BOOL  WINAPI SetWindowOrgEx(HDC, int, int, LPPOINT);
  2390.  
  2391. BOOL  WINAPI OffsetViewportOrgEx(HDC, int, int, LPPOINT);
  2392. BOOL  WINAPI OffsetWindowOrgEx(HDC, int, int, LPPOINT);
  2393. BOOL  WINAPI ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE);
  2394. BOOL  WINAPI ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE);
  2395. BOOL  WINAPI SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE);
  2396. BOOL  WINAPI SetBrushOrgEx(HDC, int, int, LPPOINT);
  2397.  
  2398. int   WINAPI GetTextFaceA(HDC, int, LPSTR);
  2399. int   WINAPI GetTextFaceW(HDC, int, LPWSTR);
  2400. #ifdef UNICODE
  2401. #define GetTextFace  GetTextFaceW
  2402. #else
  2403. #define GetTextFace  GetTextFaceA
  2404. #endif // !UNICODE
  2405.  
  2406. #define FONTMAPPER_MAX 10
  2407.  
  2408. typedef struct tagKERNINGPAIR {
  2409.    WORD wFirst;
  2410.    WORD wSecond;
  2411.    int  iKernAmount;
  2412. } KERNINGPAIR, *LPKERNINGPAIR;
  2413.  
  2414. DWORD WINAPI GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR);
  2415. DWORD WINAPI GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR);
  2416. #ifdef UNICODE
  2417. #define GetKerningPairs  GetKerningPairsW
  2418. #else
  2419. #define GetKerningPairs  GetKerningPairsA
  2420. #endif // !UNICODE
  2421.  
  2422. BOOL  WINAPI GetDCOrgEx(HDC,LPPOINT);
  2423. BOOL  WINAPI FixBrushOrgEx(HDC,int,int,LPPOINT);
  2424. BOOL  WINAPI UnrealizeObject(HGDIOBJ);
  2425.  
  2426. BOOL  WINAPI GdiFlush();
  2427. DWORD WINAPI GdiSetBatchLimit(DWORD);
  2428. DWORD WINAPI GdiGetBatchLimit();
  2429.  
  2430. #ifndef NOMETAFILE
  2431.  
  2432. // Enhanced metafile constants.
  2433.  
  2434. #define ENHMETA_SIGNATURE       0x464D4520
  2435.  
  2436. // Stock object flag used in the object handle index in the enhanced
  2437. // metafile records.
  2438. // E.g. The object handle index (META_STOCK_OBJECT | BLACK_BRUSH)
  2439. // represents the stock object BLACK_BRUSH.
  2440.  
  2441. #define ENHMETA_STOCK_OBJECT    0x80000000
  2442.  
  2443. // Enhanced metafile record types.
  2444.  
  2445. #define EMR_HEADER                      1
  2446. #define EMR_POLYBEZIER                  2
  2447. #define EMR_POLYGON                     3
  2448. #define EMR_POLYLINE                    4
  2449. #define EMR_POLYBEZIERTO                5
  2450. #define EMR_POLYLINETO                  6
  2451. #define EMR_POLYPOLYLINE                7
  2452. #define EMR_POLYPOLYGON                 8
  2453. #define EMR_SETWINDOWEXTEX              9
  2454. #define EMR_SETWINDOWORGEX              10
  2455. #define EMR_SETVIEWPORTEXTEX            11
  2456. #define EMR_SETVIEWPORTORGEX            12
  2457. #define EMR_SETBRUSHORGEX               13
  2458. #define EMR_EOF                         14
  2459. #define EMR_SETPIXELV                   15
  2460. #define EMR_SETMAPPERFLAGS              16
  2461. #define EMR_SETMAPMODE                  17
  2462. #define EMR_SETBKMODE                   18
  2463. #define EMR_SETPOLYFILLMODE             19
  2464. #define EMR_SETROP2                     20
  2465. #define EMR_SETSTRETCHBLTMODE           21
  2466. #define EMR_SETTEXTALIGN                22
  2467. #define EMR_SETCOLORADJUSTMENT          23
  2468. #define EMR_SETTEXTCOLOR                24
  2469. #define EMR_SETBKCOLOR                  25
  2470. #define EMR_OFFSETCLIPRGN               26
  2471. #define EMR_MOVETOEX                    27
  2472. #define EMR_SETMETARGN                  28
  2473. #define EMR_EXCLUDECLIPRECT             29
  2474. #define EMR_INTERSECTCLIPRECT           30
  2475. #define EMR_SCALEVIEWPORTEXTEX          31
  2476. #define EMR_SCALEWINDOWEXTEX            32
  2477. #define EMR_SAVEDC                      33
  2478. #define EMR_RESTOREDC                   34
  2479. #define EMR_SETWORLDTRANSFORM           35
  2480. #define EMR_MODIFYWORLDTRANSFORM        36
  2481. #define EMR_SELECTOBJECT                37
  2482. #define EMR_CREATEPEN                   38
  2483. #define EMR_CREATEBRUSHINDIRECT         39
  2484. #define EMR_DELETEOBJECT                40
  2485. #define EMR_ANGLEARC                    41
  2486. #define EMR_ELLIPSE                     42
  2487. #define EMR_RECTANGLE                   43
  2488. #define EMR_ROUNDRECT                   44
  2489. #define EMR_ARC                         45
  2490. #define EMR_CHORD                       46
  2491. #define EMR_PIE                         47
  2492. #define EMR_SELECTPALETTE               48
  2493. #define EMR_CREATEPALETTE               49
  2494. #define EMR_SETPALETTEENTRIES           50
  2495. #define EMR_RESIZEPALETTE               51
  2496. #define EMR_REALIZEPALETTE              52
  2497. #define EMR_EXTFLOODFILL                53
  2498. #define EMR_LINETO                      54
  2499. #define EMR_ARCTO                       55
  2500. #define EMR_POLYDRAW                    56
  2501. #define EMR_SETARCDIRECTION             57
  2502. #define EMR_SETMITERLIMIT               58
  2503. #define EMR_BEGINPATH                   59
  2504. #define EMR_ENDPATH                     60
  2505. #define EMR_CLOSEFIGURE                 61
  2506. #define EMR_FILLPATH                    62
  2507. #define EMR_STROKEANDFILLPATH           63
  2508. #define EMR_STROKEPATH                  64
  2509. #define EMR_FLATTENPATH                 65
  2510. #define EMR_WIDENPATH                   66
  2511. #define EMR_SELECTCLIPPATH              67
  2512. #define EMR_ABORTPATH                   68
  2513.  
  2514. #define EMR_GDICOMMENT                  70
  2515. #define EMR_FILLRGN                     71
  2516. #define EMR_FRAMERGN                    72
  2517. #define EMR_INVERTRGN                   73
  2518. #define EMR_PAINTRGN                    74
  2519. #define EMR_EXTSELECTCLIPRGN            75
  2520. #define EMR_BITBLT                      76
  2521. #define EMR_STRETCHBLT                  77
  2522. #define EMR_MASKBLT                     78
  2523. #define EMR_PLGBLT                      79
  2524. #define EMR_SETDIBITSTODEVICE           80
  2525. #define EMR_STRETCHDIBITS               81
  2526. #define EMR_EXTCREATEFONTINDIRECTW      82
  2527. #define EMR_EXTTEXTOUTA                 83
  2528. #define EMR_EXTTEXTOUTW                 84
  2529. #define EMR_POLYBEZIER16                85
  2530. #define EMR_POLYGON16                   86
  2531. #define EMR_POLYLINE16                  87
  2532. #define EMR_POLYBEZIERTO16              88
  2533. #define EMR_POLYLINETO16                89
  2534. #define EMR_POLYPOLYLINE16              90
  2535. #define EMR_POLYPOLYGON16               91
  2536. #define EMR_POLYDRAW16                  92
  2537. #define EMR_CREATEMONOBRUSH             93
  2538. #define EMR_CREATEDIBPATTERNBRUSHPT     94
  2539. #define EMR_EXTCREATEPEN                95
  2540. #define EMR_POLYTEXTOUTA                96
  2541. #define EMR_POLYTEXTOUTW                97
  2542.  
  2543. #define EMR_MIN                         1
  2544. #define EMR_MAX                         97
  2545.  
  2546. // Base record type for the enhanced metafile.
  2547.  
  2548. typedef struct tagEMR
  2549. {
  2550.     DWORD   iType;              // Enhanced metafile record type
  2551.     DWORD   nSize;              // Length of the record in bytes.
  2552.                                 // This must be a multiple of 4.
  2553. } EMR, *PEMR;
  2554.  
  2555. // Base text record type for the enhanced metafile.
  2556.  
  2557. typedef struct tagEMRTEXT
  2558. {
  2559.     POINTL  ptlReference;
  2560.     DWORD   nChars;
  2561.     DWORD   offString;          // Offset to the string
  2562.     DWORD   fOptions;
  2563.     RECTL   rcl;
  2564.     DWORD   offDx;              // Offset to the inter-character spacing array.
  2565.                                 // This is always given.
  2566. } EMRTEXT, *PEMRTEXT;
  2567.  
  2568. // Record structures for the enhanced metafile.
  2569.  
  2570. typedef struct tagABORTPATH
  2571. {
  2572.     EMR     emr;
  2573. } EMRABORTPATH,      *PEMRABORTPATH,
  2574.   EMRBEGINPATH,      *PEMRBEGINPATH,
  2575.   EMRENDPATH,        *PEMRENDPATH,
  2576.   EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,
  2577.   EMRFLATTENPATH,    *PEMRFLATTENPATH,
  2578.   EMRWIDENPATH,      *PEMRWIDENPATH,
  2579.   EMRSETMETARGN,     *PEMRSETMETARGN,
  2580.   EMRSAVEDC,         *PEMRSAVEDC,
  2581.   EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
  2582.  
  2583. typedef struct tagEMRSELECTCLIPPATH
  2584. {
  2585.     EMR     emr;
  2586.     DWORD   iMode;
  2587. } EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,
  2588.   EMRSETBKMODE,         *PEMRSETBKMODE,
  2589.   EMRSETMAPMODE,        *PEMRSETMAPMODE,
  2590.   EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,
  2591.   EMRSETROP2,           *PEMRSETROP2,
  2592.   EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
  2593.   EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN;
  2594.  
  2595. typedef struct tagEMRSETMITERLIMIT
  2596. {
  2597.     EMR     emr;
  2598.     FLOAT   eMiterLimit;
  2599. } EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
  2600.  
  2601. typedef struct tagEMRRESTOREDC
  2602. {
  2603.     EMR     emr;
  2604.     LONG    iRelative;          // Specifies a relative instance
  2605. } EMRRESTOREDC, *PEMRRESTOREDC;
  2606.  
  2607. typedef struct tagEMRSETARCDIRECTION
  2608. {
  2609.     EMR     emr;
  2610.     DWORD   iArcDirection;      // Specifies the arc direction in the
  2611.                                 // advanced graphics mode.
  2612. } EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
  2613.  
  2614. typedef struct tagEMRSETMAPPERFLAGS
  2615. {
  2616.     EMR     emr;
  2617.     DWORD   dwFlags;
  2618. } EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
  2619.  
  2620. typedef struct tagEMRSETTEXTCOLOR
  2621. {
  2622.     EMR     emr;
  2623.     COLORREF crColor;
  2624. } EMRSETBKCOLOR,   *PEMRSETBKCOLOR,
  2625.   EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
  2626.  
  2627. typedef struct tagEMRSELECTOBJECT
  2628. {
  2629.     EMR     emr;
  2630.     DWORD   ihObject;           // Object handle index
  2631. } EMRSELECTOBJECT, *PEMRSELECTOBJECT,
  2632.   EMRDELETEOBJECT, *PEMRDELETEOBJECT;
  2633.  
  2634. typedef struct tagEMRSELECTPALETTE
  2635. {
  2636.     EMR     emr;
  2637.     DWORD   ihPal;              // Palette handle index, background mode only
  2638. } EMRSELECTPALETTE, *PEMRSELECTPALETTE;
  2639.  
  2640. typedef struct tagEMRRESIZEPALETTE
  2641. {
  2642.     EMR     emr;
  2643.     DWORD   ihPal;              // Palette handle index
  2644.     DWORD   cEntries;
  2645. } EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
  2646.  
  2647. typedef struct tagEMRSETPALETTEENTRIES
  2648. {
  2649.     EMR     emr;
  2650.     DWORD   ihPal;              // Palette handle index
  2651.     DWORD   iStart;
  2652.     DWORD   cEntries;
  2653.     PALETTEENTRY aPalEntries[1];// The peFlags fields do not contain any flags
  2654. } EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
  2655.  
  2656. typedef struct tagEMRSETCOLORADJUSTMENT
  2657. {
  2658.     EMR     emr;
  2659.     COLORADJUSTMENT ColorAdjustment;
  2660. } EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
  2661.  
  2662. typedef struct tagEMRGDICOMMENT
  2663. {
  2664.     EMR     emr;
  2665.     DWORD   cbData;             // Size of data in bytes
  2666.     BYTE    Data[1];
  2667. } EMRGDICOMMENT, *PEMRGDICOMMENT;
  2668.  
  2669. typedef struct tagEMREOF
  2670. {
  2671.     EMR     emr;
  2672.     DWORD   nPalEntries;        // Number of palette entries
  2673.     DWORD   offPalEntries;      // Offset to the palette entries
  2674.     DWORD   nSizeLast;          // Same as nSize and must be the last DWORD
  2675.                                 // of the record.  The palette entries,
  2676.                                 // if exist, precede this field.
  2677. } EMREOF, *PEMREOF;
  2678.  
  2679. typedef struct tagEMRLINETO
  2680. {
  2681.     EMR     emr;
  2682.     POINTL  ptl;
  2683. } EMRLINETO,   *PEMRLINETO,
  2684.   EMRMOVETOEX, *PEMRMOVETOEX;
  2685.  
  2686. typedef struct tagEMROFFSETCLIPRGN
  2687. {
  2688.     EMR     emr;
  2689.     POINTL  ptlOffset;
  2690. } EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
  2691.  
  2692. typedef struct tagEMRFILLPATH
  2693. {
  2694.     EMR     emr;
  2695.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2696. } EMRFILLPATH,          *PEMRFILLPATH,
  2697.   EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
  2698.   EMRSTROKEPATH,        *PEMRSTROKEPATH;
  2699.  
  2700. typedef struct tagEMREXCLUDECLIPRECT
  2701. {
  2702.     EMR     emr;
  2703.     RECTL   rclClip;
  2704. } EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,
  2705.   EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
  2706.  
  2707. typedef struct tagEMRSETVIEWPORTORGEX
  2708. {
  2709.     EMR     emr;
  2710.     POINTL  ptlOrigin;
  2711. } EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
  2712.   EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX,
  2713.   EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX;
  2714.  
  2715. typedef struct tagEMRSETVIEWPORTEXTEX
  2716. {
  2717.     EMR     emr;
  2718.     SIZEL   szlExtent;
  2719. } EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
  2720.   EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;
  2721.  
  2722. typedef struct tagEMRSCALEVIEWPORTEXTEX
  2723. {
  2724.     EMR     emr;
  2725.     LONG    xNum;
  2726.     LONG    xDenom;
  2727.     LONG    yNum;
  2728.     LONG    yDenom;
  2729. } EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
  2730.   EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;
  2731.  
  2732. typedef struct tagEMRSETWORLDTRANSFORM
  2733. {
  2734.     EMR     emr;
  2735.     XFORM   xform;
  2736. } EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
  2737.  
  2738. typedef struct tagEMRMODIFYWORLDTRANSFORM
  2739. {
  2740.     EMR     emr;
  2741.     XFORM   xform;
  2742.     DWORD   iMode;
  2743. } EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;
  2744.  
  2745. typedef struct tagEMRSETPIXELV
  2746. {
  2747.     EMR     emr;
  2748.     POINTL  ptlPixel;
  2749.     COLORREF crColor;
  2750. } EMRSETPIXELV, *PEMRSETPIXELV;
  2751.  
  2752. typedef struct tagEMREXTFLOODFILL
  2753. {
  2754.     EMR     emr;
  2755.     POINTL  ptlStart;
  2756.     COLORREF crColor;
  2757.     DWORD   iMode;
  2758. } EMREXTFLOODFILL, *PEMREXTFLOODFILL;
  2759.  
  2760. typedef struct tagEMRELLIPSE
  2761. {
  2762.     EMR     emr;
  2763.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  2764. } EMRELLIPSE,  *PEMRELLIPSE,
  2765.   EMRRECTANGLE, *PEMRRECTANGLE;
  2766.  
  2767. typedef struct tagEMRROUNDRECT
  2768. {
  2769.     EMR     emr;
  2770.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  2771.     SIZEL   szlCorner;
  2772. } EMRROUNDRECT, *PEMRROUNDRECT;
  2773.  
  2774. typedef struct tagEMRARC
  2775. {
  2776.     EMR     emr;
  2777.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  2778.     POINTL  ptlStart;
  2779.     POINTL  ptlEnd;
  2780. } EMRARC,   *PEMRARC,
  2781.   EMRARCTO, *PEMRARCTO,
  2782.   EMRCHORD, *PEMRCHORD,
  2783.   EMRPIE,   *PEMRPIE;
  2784.  
  2785. typedef struct tagEMRANGLEARC
  2786. {
  2787.     EMR     emr;
  2788.     POINTL  ptlCenter;
  2789.     DWORD   nRadius;
  2790.     FLOAT   eStartAngle;
  2791.     FLOAT   eSweepAngle;
  2792. } EMRANGLEARC, *PEMRANGLEARC;
  2793.  
  2794. typedef struct tagEMRPOLYLINE
  2795. {
  2796.     EMR     emr;
  2797.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2798.     DWORD   cptl;
  2799.     POINTL  aptl[1];
  2800. } EMRPOLYLINE,     *PEMRPOLYLINE,
  2801.   EMRPOLYBEZIER,   *PEMRPOLYBEZIER,
  2802.   EMRPOLYGON,      *PEMRPOLYGON,
  2803.   EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
  2804.   EMRPOLYLINETO,   *PEMRPOLYLINETO;
  2805.  
  2806. typedef struct tagEMRPOLYLINE16
  2807. {
  2808.     EMR     emr;
  2809.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2810.     DWORD   cpts;
  2811.     POINTS  apts[1];
  2812. } EMRPOLYLINE16,     *PEMRPOLYLINE16,
  2813.   EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,
  2814.   EMRPOLYGON16,      *PEMRPOLYGON16,
  2815.   EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
  2816.   EMRPOLYLINETO16,   *PEMRPOLYLINETO16;
  2817.  
  2818. typedef struct tagEMRPOLYDRAW
  2819. {
  2820.     EMR     emr;
  2821.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2822.     DWORD   cptl;               // Number of points
  2823.     POINTL  aptl[1];            // Array of points
  2824.     BYTE    abTypes[1];         // Array of point types
  2825. } EMRPOLYDRAW, *PEMRPOLYDRAW;
  2826.  
  2827. typedef struct tagEMRPOLYDRAW16
  2828. {
  2829.     EMR     emr;
  2830.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2831.     DWORD   cpts;               // Number of points
  2832.     POINTS  apts[1];            // Array of points
  2833.     BYTE    abTypes[1];         // Array of point types
  2834. } EMRPOLYDRAW16, *PEMRPOLYDRAW16;
  2835.  
  2836. typedef struct tagEMRPOLYPOLYLINE
  2837. {
  2838.     EMR     emr;
  2839.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2840.     DWORD   nPolys;             // Number of polys
  2841.     DWORD   cptl;               // Total number of points in all polys
  2842.     DWORD   aPolyCounts[1];     // Array of point counts for each poly
  2843.     POINTL  aptl[1];            // Array of points
  2844. } EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
  2845.   EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;
  2846.  
  2847. typedef struct tagEMRPOLYPOLYLINE16
  2848. {
  2849.     EMR     emr;
  2850.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2851.     DWORD   nPolys;             // Number of polys
  2852.     DWORD   cpts;               // Total number of points in all polys
  2853.     DWORD   aPolyCounts[1];     // Array of point counts for each poly
  2854.     POINTS  apts[1];            // Array of points
  2855. } EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
  2856.   EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;
  2857.  
  2858. typedef struct tagEMRINVERTRGN
  2859. {
  2860.     EMR     emr;
  2861.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2862.     DWORD   cbRgnData;          // Size of region data in bytes
  2863.     BYTE    RgnData[1];
  2864. } EMRINVERTRGN, *PEMRINVERTRGN,
  2865.   EMRPAINTRGN,  *PEMRPAINTRGN;
  2866.  
  2867. typedef struct tagEMRFILLRGN
  2868. {
  2869.     EMR     emr;
  2870.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2871.     DWORD   cbRgnData;          // Size of region data in bytes
  2872.     DWORD   ihBrush;            // Brush handle index
  2873.     BYTE    RgnData[1];
  2874. } EMRFILLRGN, *PEMRFILLRGN;
  2875.  
  2876. typedef struct tagEMRFRAMERGN
  2877. {
  2878.     EMR     emr;
  2879.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2880.     DWORD   cbRgnData;          // Size of region data in bytes
  2881.     DWORD   ihBrush;            // Brush handle index
  2882.     SIZEL   szlStroke;
  2883.     BYTE    RgnData[1];
  2884. } EMRFRAMERGN, *PEMRFRAMERGN;
  2885.  
  2886. typedef struct tagEMREXTSELECTCLIPRGN
  2887. {
  2888.     EMR     emr;
  2889.     DWORD   cbRgnData;          // Size of region data in bytes
  2890.     DWORD   iMode;
  2891.     BYTE    RgnData[1];
  2892. } EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
  2893.  
  2894. typedef struct tagEMREXTTEXTOUTA
  2895. {
  2896.     EMR     emr;
  2897.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2898.     DWORD   iGraphicsMode;      // Current graphics mode
  2899.     FLOAT   exScale;            // X and Y scales from Page units to .01mm units
  2900.     FLOAT   eyScale;            //   if graphics mode is GM_COMPATIBLE.
  2901.     EMRTEXT emrtext;            // This is followed by the string and spacing
  2902.                                 // array
  2903. } EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
  2904.   EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
  2905.  
  2906. typedef struct tagEMRPOLYTEXTOUTA
  2907. {
  2908.     EMR     emr;
  2909.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2910.     DWORD   iGraphicsMode;      // Current graphics mode
  2911.     FLOAT   exScale;            // X and Y scales from Page units to .01mm units
  2912.     FLOAT   eyScale;            //   if graphics mode is GM_COMPATIBLE.
  2913.     LONG    cStrings;
  2914.     EMRTEXT aemrtext[1];        // Array of EMRTEXT structures.  This is
  2915.                                 // followed by the strings and spacing arrays.
  2916. } EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
  2917.   EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
  2918.  
  2919. typedef struct tagEMRBITBLT
  2920. {
  2921.     EMR     emr;
  2922.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2923.     LONG    xDest;
  2924.     LONG    yDest;
  2925.     LONG    cxDest;
  2926.     LONG    cyDest;
  2927.     DWORD   dwRop;
  2928.     LONG    xSrc;
  2929.     LONG    ySrc;
  2930.     XFORM   xformSrc;           // Source DC transform
  2931.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  2932.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  2933.                                 // (DIB_RGB_COLORS)
  2934.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  2935.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  2936.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  2937.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  2938. } EMRBITBLT, *PEMRBITBLT;
  2939.  
  2940. typedef struct tagEMRSTRETCHBLT
  2941. {
  2942.     EMR     emr;
  2943.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2944.     LONG    xDest;
  2945.     LONG    yDest;
  2946.     LONG    cxDest;
  2947.     LONG    cyDest;
  2948.     DWORD   dwRop;
  2949.     LONG    xSrc;
  2950.     LONG    ySrc;
  2951.     XFORM   xformSrc;           // Source DC transform
  2952.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  2953.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  2954.                                 // (DIB_RGB_COLORS)
  2955.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  2956.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  2957.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  2958.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  2959.     LONG    cxSrc;
  2960.     LONG    cySrc;
  2961. } EMRSTRETCHBLT, *PEMRSTRETCHBLT;
  2962.  
  2963. typedef struct tagEMRMASKBLT
  2964. {
  2965.     EMR     emr;
  2966.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2967.     LONG    xDest;
  2968.     LONG    yDest;
  2969.     LONG    cxDest;
  2970.     LONG    cyDest;
  2971.     DWORD   dwRop;
  2972.     LONG    xSrc;
  2973.     LONG    ySrc;
  2974.     XFORM   xformSrc;           // Source DC transform
  2975.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  2976.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  2977.                                 // (DIB_RGB_COLORS)
  2978.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  2979.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  2980.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  2981.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  2982.     LONG    xMask;
  2983.     LONG    yMask;
  2984.     DWORD   iUsageMask;         // Mask bitmap info color table usage
  2985.     DWORD   offBmiMask;         // Offset to the mask BITMAPINFO structure if any
  2986.     DWORD   cbBmiMask;          // Size of the mask BITMAPINFO structure if any
  2987.     DWORD   offBitsMask;        // Offset to the mask bitmap bits if any
  2988.     DWORD   cbBitsMask;         // Size of the mask bitmap bits if any
  2989. } EMRMASKBLT, *PEMRMASKBLT;
  2990.  
  2991. typedef struct tagEMRPLGBLT
  2992. {
  2993.     EMR     emr;
  2994.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  2995.     POINTL  aptlDest[3];
  2996.     LONG    xSrc;
  2997.     LONG    ySrc;
  2998.     LONG    cxSrc;
  2999.     LONG    cySrc;
  3000.     XFORM   xformSrc;           // Source DC transform
  3001.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  3002.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3003.                                 // (DIB_RGB_COLORS)
  3004.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3005.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3006.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3007.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3008.     LONG    xMask;
  3009.     LONG    yMask;
  3010.     DWORD   iUsageMask;         // Mask bitmap info color table usage
  3011.     DWORD   offBmiMask;         // Offset to the mask BITMAPINFO structure if any
  3012.     DWORD   cbBmiMask;          // Size of the mask BITMAPINFO structure if any
  3013.     DWORD   offBitsMask;        // Offset to the mask bitmap bits if any
  3014.     DWORD   cbBitsMask;         // Size of the mask bitmap bits if any
  3015. } EMRPLGBLT, *PEMRPLGBLT;
  3016.  
  3017. typedef struct tagEMRSETDIBITSTODEVICE
  3018. {
  3019.     EMR     emr;
  3020.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3021.     LONG    xDest;
  3022.     LONG    yDest;
  3023.     LONG    xSrc;
  3024.     LONG    ySrc;
  3025.     LONG    cxSrc;
  3026.     LONG    cySrc;
  3027.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3028.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3029.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3030.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3031.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3032.     DWORD   iStartScan;
  3033.     DWORD   cScans;
  3034. } EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
  3035.  
  3036. typedef struct tagEMRSTRETCHDIBITS
  3037. {
  3038.     EMR     emr;
  3039.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  3040.     LONG    xDest;
  3041.     LONG    yDest;
  3042.     LONG    xSrc;
  3043.     LONG    ySrc;
  3044.     LONG    cxSrc;
  3045.     LONG    cySrc;
  3046.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  3047.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  3048.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  3049.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  3050.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  3051.     DWORD   dwRop;
  3052.     LONG    cxDest;
  3053.     LONG    cyDest;
  3054. } EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
  3055.  
  3056. typedef struct tagEMREXTCREATEFONTINDIRECTW
  3057. {
  3058.     EMR     emr;
  3059.     DWORD   ihFont;             // Font handle index
  3060.     EXTLOGFONTW elfw;
  3061. } EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;
  3062.  
  3063. typedef struct tagEMRCREATEPALETTE
  3064. {
  3065.     EMR     emr;
  3066.     DWORD   ihPal;              // Palette handle index
  3067.     LOGPALETTE lgpl;            // The peFlags fields in the palette entries
  3068.                                 // do not contain any flags
  3069. } EMRCREATEPALETTE, *PEMRCREATEPALETTE;
  3070.  
  3071. typedef struct tagEMRCREATEPEN
  3072. {
  3073.     EMR     emr;
  3074.     DWORD   ihPen;              // Pen handle index
  3075.     LOGPEN  lopn;
  3076. } EMRCREATEPEN, *PEMRCREATEPEN;
  3077.  
  3078. typedef struct tagEMREXTCREATEPEN
  3079. {
  3080.     EMR     emr;
  3081.     DWORD   ihPen;              // Pen handle index
  3082.     DWORD   offBmi;             // Offset to the BITMAPINFO structure if any
  3083.     DWORD   cbBmi;              // Size of the BITMAPINFO structure if any
  3084.                                 // The bitmap info is followed by the bitmap
  3085.                                 // bits to form a packed DIB.
  3086.     DWORD   offBits;            // Offset to the brush bitmap bits if any
  3087.     DWORD   cbBits;             // Size of the brush bitmap bits if any
  3088.     EXTLOGPEN elp;              // The extended pen with the style array.
  3089. } EMREXTCREATEPEN, *PEMREXTCREATEPEN;
  3090.  
  3091. typedef struct tagEMRCREATEBRUSHINDIRECT
  3092. {
  3093.     EMR     emr;
  3094.     DWORD   ihBrush;            // Brush handle index
  3095.     LOGBRUSH lb;                // The style must be BS_SOLID, BS_HOLLOW,
  3096.                                 // BS_NULL or BS_HATCHED.
  3097. } EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
  3098.  
  3099. typedef struct tagEMRCREATEMONOBRUSH
  3100. {
  3101.     EMR     emr;
  3102.     DWORD   ihBrush;            // Brush handle index
  3103.     DWORD   iUsage;             // Bitmap info color table usage
  3104.     DWORD   offBmi;             // Offset to the BITMAPINFO structure
  3105.     DWORD   cbBmi;              // Size of the BITMAPINFO structure
  3106.     DWORD   offBits;            // Offset to the bitmap bits
  3107.     DWORD   cbBits;             // Size of the bitmap bits
  3108. } EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
  3109.  
  3110. typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
  3111. {
  3112.     EMR     emr;
  3113.     DWORD   ihBrush;            // Brush handle index
  3114.     DWORD   iUsage;             // Bitmap info color table usage
  3115.     DWORD   offBmi;             // Offset to the BITMAPINFO structure
  3116.     DWORD   cbBmi;              // Size of the BITMAPINFO structure
  3117.                                 // The bitmap info is followed by the bitmap
  3118.                                 // bits to form a packed DIB.
  3119.     DWORD   offBits;            // Offset to the bitmap bits
  3120.     DWORD   cbBits;             // Size of the bitmap bits
  3121. } EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;
  3122.  
  3123. #endif  /* NOMETAFILE */
  3124.  
  3125. #endif /* NOGDI */
  3126.  
  3127. #ifdef __cplusplus
  3128. }
  3129. #endif
  3130.  
  3131. #endif /* _WINGDI_ */
  3132.