home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 2000 May / PCP163A.iso / Runimage / Cbuilder4 / Include / WINGDI.H < prev    next >
Encoding:
C/C++ Source or Header  |  1999-01-26  |  168.6 KB  |  4,750 lines

  1. /**************************************************************************
  2. *                                                                         *
  3. * wingdi.h -- GDI procedure declarations, constant definitions and macros *
  4. *                                                                         *
  5. * Copyright (c) 1985-1997, Microsoft Corp. All rights reserved.           *
  6. *                                                                         *
  7. **************************************************************************/
  8.  
  9. #ifndef _WINGDI_
  10. #pragma option push -b -a8 -pc -A- /*P_O_Push_S*/
  11. #define _WINGDI_
  12.  
  13.  
  14. #ifdef _MAC
  15. #include <macwin32.h>
  16. #endif
  17. //
  18. // Define API decoration for direct importing of DLL references.
  19. //
  20.  
  21. #if !defined(_GDI32_)
  22. #define WINGDIAPI DECLSPEC_IMPORT
  23. #else
  24. #define WINGDIAPI
  25. #endif
  26.  
  27. //
  28. // Define API decoration for direct importing of DLL references.
  29. //
  30.  
  31. #if !defined(_SPOOL32_)
  32. #define WINSPOOLAPI DECLSPEC_IMPORT
  33. #else
  34. #define WINSPOOLAPI
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. #ifndef WINVER
  42. #define WINVER 0x0500   // version 5.0
  43. #endif /* WINVER */
  44.  
  45. #ifndef NOGDI
  46.  
  47. #ifndef NORASTEROPS
  48.  
  49. /* Binary raster ops */
  50. #define R2_BLACK            1   /*  0       */
  51. #define R2_NOTMERGEPEN      2   /* DPon     */
  52. #define R2_MASKNOTPEN       3   /* DPna     */
  53. #define R2_NOTCOPYPEN       4   /* PN       */
  54. #define R2_MASKPENNOT       5   /* PDna     */
  55. #define R2_NOT              6   /* Dn       */
  56. #define R2_XORPEN           7   /* DPx      */
  57. #define R2_NOTMASKPEN       8   /* DPan     */
  58. #define R2_MASKPEN          9   /* DPa      */
  59. #define R2_NOTXORPEN        10  /* DPxn     */
  60. #define R2_NOP              11  /* D        */
  61. #define R2_MERGENOTPEN      12  /* DPno     */
  62. #define R2_COPYPEN          13  /* P        */
  63. #define R2_MERGEPENNOT      14  /* PDno     */
  64. #define R2_MERGEPEN         15  /* DPo      */
  65. #define R2_WHITE            16  /*  1       */
  66. #define R2_LAST             16
  67.  
  68. /* Ternary raster operations */
  69. #define SRCCOPY             (DWORD)0x00CC0020 /* dest = source                   */
  70. #define SRCPAINT            (DWORD)0x00EE0086 /* dest = source OR dest           */
  71. #define SRCAND              (DWORD)0x008800C6 /* dest = source AND dest          */
  72. #define SRCINVERT           (DWORD)0x00660046 /* dest = source XOR dest          */
  73. #define SRCERASE            (DWORD)0x00440328 /* dest = source AND (NOT dest )   */
  74. #define NOTSRCCOPY          (DWORD)0x00330008 /* dest = (NOT source)             */
  75. #define NOTSRCERASE         (DWORD)0x001100A6 /* dest = (NOT src) AND (NOT dest) */
  76. #define MERGECOPY           (DWORD)0x00C000CA /* dest = (source AND pattern)     */
  77. #define MERGEPAINT          (DWORD)0x00BB0226 /* dest = (NOT source) OR dest     */
  78. #define PATCOPY             (DWORD)0x00F00021 /* dest = pattern                  */
  79. #define PATPAINT            (DWORD)0x00FB0A09 /* dest = DPSnoo                   */
  80. #define PATINVERT           (DWORD)0x005A0049 /* dest = pattern XOR dest         */
  81. #define DSTINVERT           (DWORD)0x00550009 /* dest = (NOT dest)               */
  82. #define BLACKNESS           (DWORD)0x00000042 /* dest = BLACK                    */
  83. #define WHITENESS           (DWORD)0x00FF0062 /* dest = WHITE                    */
  84.  
  85. /* Quaternary raster codes */
  86. #define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore))
  87.  
  88. #endif /* NORASTEROPS */
  89.  
  90. #define GDI_ERROR (0xFFFFFFFFL)
  91. #define HGDI_ERROR ((HANDLE)(0xFFFFFFFFL))
  92.  
  93. /* Region Flags */
  94. #define ERROR               0
  95. #define NULLREGION          1
  96. #define SIMPLEREGION        2
  97. #define COMPLEXREGION       3
  98. #define RGN_ERROR ERROR
  99.  
  100. /* CombineRgn() Styles */
  101. #define RGN_AND             1
  102. #define RGN_OR              2
  103. #define RGN_XOR             3
  104. #define RGN_DIFF            4
  105. #define RGN_COPY            5
  106. #define RGN_MIN             RGN_AND
  107. #define RGN_MAX             RGN_COPY
  108.  
  109. /* StretchBlt() Modes */
  110. #define BLACKONWHITE                 1
  111. #define WHITEONBLACK                 2
  112. #define COLORONCOLOR                 3
  113. #define HALFTONE                     4
  114. #define MAXSTRETCHBLTMODE            4
  115.  
  116. #if(WINVER >= 0x0400)
  117. /* New StretchBlt() Modes */
  118. #define STRETCH_ANDSCANS    BLACKONWHITE
  119. #define STRETCH_ORSCANS     WHITEONBLACK
  120. #define STRETCH_DELETESCANS COLORONCOLOR
  121. #define STRETCH_HALFTONE    HALFTONE
  122. #endif /* WINVER >= 0x0400 */
  123.  
  124. /* PolyFill() Modes */
  125. #define ALTERNATE                    1
  126. #define WINDING                      2
  127. #define POLYFILL_LAST                2
  128.  
  129. /* Text Alignment Options */
  130. #define TA_NOUPDATECP                0
  131. #define TA_UPDATECP                  1
  132.  
  133. #define TA_LEFT                      0
  134. #define TA_RIGHT                     2
  135. #define TA_CENTER                    6
  136.  
  137. #define TA_TOP                       0
  138. #define TA_BOTTOM                    8
  139. #define TA_BASELINE                  24
  140. #if (WINVER >= 0x0400)
  141. #define TA_RTLREADING                256
  142. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING)
  143. #else
  144. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP)
  145. #endif
  146.  
  147. #define VTA_BASELINE TA_BASELINE
  148. #define VTA_LEFT     TA_BOTTOM
  149. #define VTA_RIGHT    TA_TOP
  150. #define VTA_CENTER   TA_CENTER
  151. #define VTA_BOTTOM   TA_RIGHT
  152. #define VTA_TOP      TA_LEFT
  153.  
  154. #define ETO_OPAQUE                   0x0002
  155. #define ETO_CLIPPED                  0x0004
  156. #if(WINVER >= 0x0400)
  157. #define ETO_GLYPH_INDEX              0x0010
  158. #define ETO_RTLREADING               0x0080
  159. #define ETO_NUMERICSLOCAL            0x0400
  160. #define ETO_NUMERICSLATIN            0x0800
  161. #define ETO_IGNORELANGUAGE           0x1000
  162. #endif /* WINVER >= 0x0400 */
  163. #if (_WIN32_WINNT >= 0x0500)
  164. #define ETO_PDY                      0x2000
  165. #endif // (_WIN32_WINNT >= 0x0500)
  166.  
  167. #define ASPECT_FILTERING             0x0001
  168.  
  169. /* Bounds Accumulation APIs */
  170.  
  171. #define DCB_RESET       0x0001
  172. #define DCB_ACCUMULATE  0x0002
  173. #define DCB_DIRTY       DCB_ACCUMULATE
  174. #define DCB_SET         (DCB_RESET | DCB_ACCUMULATE)
  175. #define DCB_ENABLE      0x0004
  176. #define DCB_DISABLE     0x0008
  177.  
  178. #ifndef NOMETAFILE
  179.  
  180. /* Metafile Functions */
  181. #define META_SETBKCOLOR              0x0201
  182. #define META_SETBKMODE               0x0102
  183. #define META_SETMAPMODE              0x0103
  184. #define META_SETROP2                 0x0104
  185. #define META_SETRELABS               0x0105
  186. #define META_SETPOLYFILLMODE         0x0106
  187. #define META_SETSTRETCHBLTMODE       0x0107
  188. #define META_SETTEXTCHAREXTRA        0x0108
  189. #define META_SETTEXTCOLOR            0x0209
  190. #define META_SETTEXTJUSTIFICATION    0x020A
  191. #define META_SETWINDOWORG            0x020B
  192. #define META_SETWINDOWEXT            0x020C
  193. #define META_SETVIEWPORTORG          0x020D
  194. #define META_SETVIEWPORTEXT          0x020E
  195. #define META_OFFSETWINDOWORG         0x020F
  196. #define META_SCALEWINDOWEXT          0x0410
  197. #define META_OFFSETVIEWPORTORG       0x0211
  198. #define META_SCALEVIEWPORTEXT        0x0412
  199. #define META_LINETO                  0x0213
  200. #define META_MOVETO                  0x0214
  201. #define META_EXCLUDECLIPRECT         0x0415
  202. #define META_INTERSECTCLIPRECT       0x0416
  203. #define META_ARC                     0x0817
  204. #define META_ELLIPSE                 0x0418
  205. #define META_FLOODFILL               0x0419
  206. #define META_PIE                     0x081A
  207. #define META_RECTANGLE               0x041B
  208. #define META_ROUNDRECT               0x061C
  209. #define META_PATBLT                  0x061D
  210. #define META_SAVEDC                  0x001E
  211. #define META_SETPIXEL                0x041F
  212. #define META_OFFSETCLIPRGN           0x0220
  213. #define META_TEXTOUT                 0x0521
  214. #define META_BITBLT                  0x0922
  215. #define META_STRETCHBLT              0x0B23
  216. #define META_POLYGON                 0x0324
  217. #define META_POLYLINE                0x0325
  218. #define META_ESCAPE                  0x0626
  219. #define META_RESTOREDC               0x0127
  220. #define META_FILLREGION              0x0228
  221. #define META_FRAMEREGION             0x0429
  222. #define META_INVERTREGION            0x012A
  223. #define META_PAINTREGION             0x012B
  224. #define META_SELECTCLIPREGION        0x012C
  225. #define META_SELECTOBJECT            0x012D
  226. #define META_SETTEXTALIGN            0x012E
  227. #define META_CHORD                   0x0830
  228. #define META_SETMAPPERFLAGS          0x0231
  229. #define META_EXTTEXTOUT              0x0a32
  230. #define META_SETDIBTODEV             0x0d33
  231. #define META_SELECTPALETTE           0x0234
  232. #define META_REALIZEPALETTE          0x0035
  233. #define META_ANIMATEPALETTE          0x0436
  234. #define META_SETPALENTRIES           0x0037
  235. #define META_POLYPOLYGON             0x0538
  236. #define META_RESIZEPALETTE           0x0139
  237. #define META_DIBBITBLT               0x0940
  238. #define META_DIBSTRETCHBLT           0x0b41
  239. #define META_DIBCREATEPATTERNBRUSH   0x0142
  240. #define META_STRETCHDIB              0x0f43
  241. #define META_EXTFLOODFILL            0x0548
  242. #define META_DELETEOBJECT            0x01f0
  243. #define META_CREATEPALETTE           0x00f7
  244. #define META_CREATEPATTERNBRUSH      0x01F9
  245. #define META_CREATEPENINDIRECT       0x02FA
  246. #define META_CREATEFONTINDIRECT      0x02FB
  247. #define META_CREATEBRUSHINDIRECT     0x02FC
  248. #define META_CREATEREGION            0x06FF
  249.  
  250. #if(WINVER >= 0x0400)
  251. typedef struct _DRAWPATRECT {
  252.         POINT ptPosition;
  253.         POINT ptSize;
  254.         WORD wStyle;
  255.         WORD wPattern;
  256. } DRAWPATRECT, *PDRAWPATRECT;
  257. #endif /* WINVER >= 0x0400 */
  258.  
  259. #endif /* NOMETAFILE */
  260.  
  261. /* GDI Escapes */
  262. #define NEWFRAME                     1
  263. #define ABORTDOC                     2
  264. #define NEXTBAND                     3
  265. #define SETCOLORTABLE                4
  266. #define GETCOLORTABLE                5
  267. #define FLUSHOUTPUT                  6
  268. #define DRAFTMODE                    7
  269. #define QUERYESCSUPPORT              8
  270. #define SETABORTPROC                 9
  271. #define STARTDOC                     10
  272. #define ENDDOC                       11
  273. #define GETPHYSPAGESIZE              12
  274. #define GETPRINTINGOFFSET            13
  275. #define GETSCALINGFACTOR             14
  276. #define MFCOMMENT                    15
  277. #define GETPENWIDTH                  16
  278. #define SETCOPYCOUNT                 17
  279. #define SELECTPAPERSOURCE            18
  280. #define DEVICEDATA                   19
  281. #define PASSTHROUGH                  19
  282. #define GETTECHNOLGY                 20
  283. #define GETTECHNOLOGY                20
  284. #define SETLINECAP                   21
  285. #define SETLINEJOIN                  22
  286. #define SETMITERLIMIT                23
  287. #define BANDINFO                     24
  288. #define DRAWPATTERNRECT              25
  289. #define GETVECTORPENSIZE             26
  290. #define GETVECTORBRUSHSIZE           27
  291. #define ENABLEDUPLEX                 28
  292. #define GETSETPAPERBINS              29
  293. #define GETSETPRINTORIENT            30
  294. #define ENUMPAPERBINS                31
  295. #define SETDIBSCALING                32
  296. #define EPSPRINTING                  33
  297. #define ENUMPAPERMETRICS             34
  298. #define GETSETPAPERMETRICS           35
  299. #define POSTSCRIPT_DATA              37
  300. #define POSTSCRIPT_IGNORE            38
  301. #define MOUSETRAILS                  39
  302. #define GETDEVICEUNITS               42
  303.  
  304. #define GETEXTENDEDTEXTMETRICS       256
  305. #define GETEXTENTTABLE               257
  306. #define GETPAIRKERNTABLE             258
  307. #define GETTRACKKERNTABLE            259
  308. #define EXTTEXTOUT                   512
  309. #define GETFACENAME                  513
  310. #define DOWNLOADFACE                 514
  311. #define ENABLERELATIVEWIDTHS         768
  312. #define ENABLEPAIRKERNING            769
  313. #define SETKERNTRACK                 770
  314. #define SETALLJUSTVALUES             771
  315. #define SETCHARSET                   772
  316.  
  317. #define STRETCHBLT                   2048
  318. #define GETSETSCREENPARAMS           3072
  319. #define QUERYDIBSUPPORT              3073
  320. #define BEGIN_PATH                   4096
  321. #define CLIP_TO_PATH                 4097
  322. #define END_PATH                     4098
  323. #define EXT_DEVICE_CAPS              4099
  324. #define RESTORE_CTM                  4100
  325. #define SAVE_CTM                     4101
  326. #define SET_ARC_DIRECTION            4102
  327. #define SET_BACKGROUND_COLOR         4103
  328. #define SET_POLY_MODE                4104
  329. #define SET_SCREEN_ANGLE             4105
  330. #define SET_SPREAD                   4106
  331. #define TRANSFORM_CTM                4107
  332. #define SET_CLIP_BOX                 4108
  333. #define SET_BOUNDS                   4109
  334. #define SET_MIRROR_MODE              4110
  335. #define OPENCHANNEL                  4110
  336. #define DOWNLOADHEADER               4111
  337. #define CLOSECHANNEL                 4112
  338. #define POSTSCRIPT_PASSTHROUGH       4115
  339. #define ENCAPSULATED_POSTSCRIPT      4116
  340.  
  341. #define POSTSCRIPT_IDENTIFY          4117   /* new escape for NT5 pscript driver */
  342. #define POSTSCRIPT_INJECTION         4118   /* new escape for NT5 pscript driver */
  343.  
  344. /*
  345.  * Parameters for POSTSCRIPT_IDENTIFY escape
  346.  */
  347.  
  348. #define PSIDENT_GDICENTRIC    0
  349. #define PSIDENT_PSCENTRIC     1
  350.  
  351. /*
  352.  * Header structure for the input buffer to POSTSCRIPT_INJECTION escape
  353.  */
  354.  
  355. typedef struct _PSINJECTDATA {
  356.  
  357.     DWORD   DataBytes;          /* number of raw data bytes */
  358.     DWORD   InjectionPoint;     /* injection point */
  359.     DWORD   Flags;              /* flags */
  360.     DWORD   Reserved;           /* reserved field - must be 0 */
  361.  
  362.     /* Followed by raw data to be injected */
  363.  
  364. } PSINJECTDATA, *PPSINJECTDATA;
  365.  
  366. /*
  367.  * Constants for PSINJECTDATA.Flags field
  368.  */
  369.  
  370. #define   PSINJECT_APPEND       0
  371. #define   PSINJECT_REPLACE      1
  372.  
  373. /*
  374.  * Constants for PSINJECTDATA.InjectionPoint field
  375.  */
  376.  
  377. /*
  378.  * The data injected at these points coexist with the output emitted
  379.  * by the driver for the same points.
  380.  */
  381.  
  382. #define PSINJECT_BEGINSTREAM     0
  383. #define PSINJECT_PSADOBE         1
  384. #define PSINJECT_COMMENTS        2
  385. #define PSINJECT_BEGINDEFAULTS   3
  386. #define PSINJECT_ENDDEFAULTS     4
  387. #define PSINJECT_BEGINPROLOG     5
  388. #define PSINJECT_ENDPROLOG       6
  389. #define PSINJECT_BEGINSETUP      7
  390. #define PSINJECT_ENDSETUP        8
  391. #define PSINJECT_ENDPAGECOMMENTS 9
  392. #define PSINJECT_BEGINPAGESETUP 10
  393. #define PSINJECT_ENDPAGESETUP   11
  394. #define PSINJECT_SHOWPAGE       12
  395. #define PSINJECT_PAGETRAILER    13
  396. #define PSINJECT_TRAILER        14
  397. #define PSINJECT_EOF            15
  398. #define PSINJECT_ENDSTREAM      16
  399. #define PSINJECT_VMSAVE         17
  400. #define PSINJECT_VMRESTORE      18
  401.  
  402. /*
  403.  * The data injected at these points are appended to the output
  404.  * emitted by the driver for the same points. It will go into
  405.  * the document trailer section. They must be in the form of:
  406.  *     %%+ resource-type resource-names
  407.  */
  408.  
  409. #define PSINJECT_DOCNEEDEDRES   19
  410. #define PSINJECT_DOCSUPPLIEDRES 20
  411.  
  412. /*
  413.  * The data injected at these points replaces the output emitted
  414.  * by the driver for the same points.
  415.  */
  416.  
  417. #define PSINJECT_PAGES          21
  418. #define PSINJECT_PAGEORDER      22
  419. #define PSINJECT_ORIENTATION    23
  420. #define PSINJECT_BOUNDINGBOX    24
  421. #define PSINJECT_PAGENUMBER     25
  422. #define PSINJECT_PAGEBBOX       26
  423.  
  424. #define PSINJECT_MAX            27
  425.  
  426.  
  427. /* Flag returned from QUERYDIBSUPPORT */
  428. #define QDI_SETDIBITS                1
  429. #define QDI_GETDIBITS                2
  430. #define QDI_DIBTOSCREEN              4
  431. #define QDI_STRETCHDIB               8
  432.  
  433. /* Spooler Error Codes */
  434. #define SP_NOTREPORTED               0x4000
  435. #define SP_ERROR                     (-1)
  436. #define SP_APPABORT                  (-2)
  437. #define SP_USERABORT                 (-3)
  438. #define SP_OUTOFDISK                 (-4)
  439. #define SP_OUTOFMEMORY               (-5)
  440.  
  441. #define PR_JOBSTATUS                 0x0000
  442.  
  443. /* Object Definitions for EnumObjects() */
  444. #define OBJ_PEN             1
  445. #define OBJ_BRUSH           2
  446. #define OBJ_DC              3
  447. #define OBJ_METADC          4
  448. #define OBJ_PAL             5
  449. #define OBJ_FONT            6
  450. #define OBJ_BITMAP          7
  451. #define OBJ_REGION          8
  452. #define OBJ_METAFILE        9
  453. #define OBJ_MEMDC           10
  454. #define OBJ_EXTPEN          11
  455. #define OBJ_ENHMETADC       12
  456. #define OBJ_ENHMETAFILE     13
  457.  
  458. /* xform stuff */
  459. #define MWT_IDENTITY        1
  460. #define MWT_LEFTMULTIPLY    2
  461. #define MWT_RIGHTMULTIPLY   3
  462.  
  463. #define MWT_MIN             MWT_IDENTITY
  464. #define MWT_MAX             MWT_RIGHTMULTIPLY
  465.  
  466. #define _XFORM_
  467. typedef struct  tagXFORM
  468.   {
  469.     FLOAT   eM11;
  470.     FLOAT   eM12;
  471.     FLOAT   eM21;
  472.     FLOAT   eM22;
  473.     FLOAT   eDx;
  474.     FLOAT   eDy;
  475.   } XFORM, *PXFORM, FAR *LPXFORM;
  476.  
  477. /* Bitmap Header Definition */
  478. typedef struct tagBITMAP
  479.   {
  480.     LONG        bmType;
  481.     LONG        bmWidth;
  482.     LONG        bmHeight;
  483.     LONG        bmWidthBytes;
  484.     WORD        bmPlanes;
  485.     WORD        bmBitsPixel;
  486.     LPVOID      bmBits;
  487.   } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
  488.  
  489. #include <pshpack1.h>
  490. typedef struct tagRGBTRIPLE {
  491.         BYTE    rgbtBlue;
  492.         BYTE    rgbtGreen;
  493.         BYTE    rgbtRed;
  494. } RGBTRIPLE;
  495. #include <poppack.h>
  496.  
  497. typedef struct tagRGBQUAD {
  498.         BYTE    rgbBlue;
  499.         BYTE    rgbGreen;
  500.         BYTE    rgbRed;
  501.         BYTE    rgbReserved;
  502. } RGBQUAD;
  503. typedef RGBQUAD FAR* LPRGBQUAD;
  504.  
  505. #if(WINVER >= 0x0400)
  506.  
  507. /* Image Color Matching color definitions */
  508.  
  509. #define CS_ENABLE                       0x00000001L
  510. #define CS_DISABLE                      0x00000002L
  511. #define CS_DELETE_TRANSFORM             0x00000003L
  512.  
  513. /* Logcolorspace signature */
  514.  
  515. #define LCS_SIGNATURE           'PSOC'
  516.  
  517. /* Logcolorspace lcsType values */
  518.  
  519. #define LCS_sRGB                'sRGB'
  520. #define LCS_WINDOWS_COLOR_SPACE 'Win '  // Windows default color space
  521.  
  522. typedef LONG   LCSCSTYPE;
  523. #define LCS_CALIBRATED_RGB              0x00000000L
  524. #define LCS_DEVICE_RGB                  0x00000001L
  525. #define LCS_DEVICE_CMYK                 0x00000002L
  526.  
  527. typedef LONG    LCSGAMUTMATCH;
  528. #define LCS_GM_BUSINESS                 0x00000001L
  529. #define LCS_GM_GRAPHICS                 0x00000002L
  530. #define LCS_GM_IMAGES                   0x00000004L
  531. #define LCS_GM_ABS_COLORIMETRIC         0x00000008L
  532.  
  533. /* ICM Defines for results from CheckColorInGamut() */
  534. #define CM_OUT_OF_GAMUT                 255
  535. #define CM_IN_GAMUT                     0
  536.  
  537. /* UpdateICMRegKey Constants               */
  538. #define ICM_ADDPROFILE                  1
  539. #define ICM_DELETEPROFILE               2
  540. #define ICM_QUERYPROFILE                3
  541. #define ICM_SETDEFAULTPROFILE           4
  542. #define ICM_REGISTERICMATCHER           5
  543. #define ICM_UNREGISTERICMATCHER         6
  544. #define ICM_QUERYMATCH                  7
  545.  
  546. /* Macros to retrieve CMYK values from a COLORREF */
  547. #define GetKValue(cmyk)      ((BYTE)(cmyk))
  548. #define GetYValue(cmyk)      ((BYTE)((cmyk)>> 8))
  549. #define GetMValue(cmyk)      ((BYTE)((cmyk)>>16))
  550. #define GetCValue(cmyk)      ((BYTE)((cmyk)>>24))
  551.  
  552. #define CMYK(c,m,y,k)       ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24)))
  553.  
  554. typedef long            FXPT16DOT16, FAR *LPFXPT16DOT16;
  555. typedef long            FXPT2DOT30, FAR *LPFXPT2DOT30;
  556.  
  557. /* ICM Color Definitions */
  558. // The following two structures are used for defining RGB's in terms of CIEXYZ.
  559.  
  560. typedef struct tagCIEXYZ
  561. {
  562.         FXPT2DOT30 ciexyzX;
  563.         FXPT2DOT30 ciexyzY;
  564.         FXPT2DOT30 ciexyzZ;
  565. } CIEXYZ;
  566. typedef CIEXYZ  FAR *LPCIEXYZ;
  567.  
  568. typedef struct tagICEXYZTRIPLE
  569. {
  570.         CIEXYZ  ciexyzRed;
  571.         CIEXYZ  ciexyzGreen;
  572.         CIEXYZ  ciexyzBlue;
  573. } CIEXYZTRIPLE;
  574. typedef CIEXYZTRIPLE    FAR *LPCIEXYZTRIPLE;
  575.  
  576. // The next structures the logical color space. Unlike pens and brushes,
  577. // but like palettes, there is only one way to create a LogColorSpace.
  578. // A pointer to it must be passed, its elements can't be pushed as
  579. // arguments.
  580.  
  581. typedef struct tagLOGCOLORSPACEA {
  582.     DWORD lcsSignature;
  583.     DWORD lcsVersion;
  584.     DWORD lcsSize;
  585.     LCSCSTYPE lcsCSType;
  586.     LCSGAMUTMATCH lcsIntent;
  587.     CIEXYZTRIPLE lcsEndpoints;
  588.     DWORD lcsGammaRed;
  589.     DWORD lcsGammaGreen;
  590.     DWORD lcsGammaBlue;
  591.     CHAR   lcsFilename[MAX_PATH];
  592. } LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
  593. typedef struct tagLOGCOLORSPACEW {
  594.     DWORD lcsSignature;
  595.     DWORD lcsVersion;
  596.     DWORD lcsSize;
  597.     LCSCSTYPE lcsCSType;
  598.     LCSGAMUTMATCH lcsIntent;
  599.     CIEXYZTRIPLE lcsEndpoints;
  600.     DWORD lcsGammaRed;
  601.     DWORD lcsGammaGreen;
  602.     DWORD lcsGammaBlue;
  603.     WCHAR  lcsFilename[MAX_PATH];
  604. } LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
  605. #ifdef UNICODE
  606. typedef LOGCOLORSPACEW LOGCOLORSPACE;
  607. typedef LPLOGCOLORSPACEW LPLOGCOLORSPACE;
  608. #else
  609. typedef LOGCOLORSPACEA LOGCOLORSPACE;
  610. typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE;
  611. #endif // UNICODE
  612.  
  613. #endif /* WINVER >= 0x0400 */
  614.  
  615. /* structures for defining DIBs */
  616. typedef struct tagBITMAPCOREHEADER {
  617.         DWORD   bcSize;                 /* used to get to color table */
  618.         WORD    bcWidth;
  619.         WORD    bcHeight;
  620.         WORD    bcPlanes;
  621.         WORD    bcBitCount;
  622. } BITMAPCOREHEADER, FAR *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER;
  623.  
  624. typedef struct tagBITMAPINFOHEADER{
  625.         DWORD      biSize;
  626.         LONG       biWidth;
  627.         LONG       biHeight;
  628.         WORD       biPlanes;
  629.         WORD       biBitCount;
  630.         DWORD      biCompression;
  631.         DWORD      biSizeImage;
  632.         LONG       biXPelsPerMeter;
  633.         LONG       biYPelsPerMeter;
  634.         DWORD      biClrUsed;
  635.         DWORD      biClrImportant;
  636. } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
  637.  
  638. #if(WINVER >= 0x0400)
  639. typedef struct {
  640.         DWORD        bV4Size;
  641.         LONG         bV4Width;
  642.         LONG         bV4Height;
  643.         WORD         bV4Planes;
  644.         WORD         bV4BitCount;
  645.         DWORD        bV4V4Compression;
  646.         DWORD        bV4SizeImage;
  647.         LONG         bV4XPelsPerMeter;
  648.         LONG         bV4YPelsPerMeter;
  649.         DWORD        bV4ClrUsed;
  650.         DWORD        bV4ClrImportant;
  651.         DWORD        bV4RedMask;
  652.         DWORD        bV4GreenMask;
  653.         DWORD        bV4BlueMask;
  654.         DWORD        bV4AlphaMask;
  655.         DWORD        bV4CSType;
  656.         CIEXYZTRIPLE bV4Endpoints;
  657.         DWORD        bV4GammaRed;
  658.         DWORD        bV4GammaGreen;
  659.         DWORD        bV4GammaBlue;
  660. } BITMAPV4HEADER, FAR *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
  661. #endif /* WINVER >= 0x0400 */
  662.  
  663. #if (WINVER >= 0x0500)
  664. typedef struct {
  665.         DWORD        bV5Size;
  666.         LONG         bV5Width;
  667.         LONG         bV5Height;
  668.         WORD         bV5Planes;
  669.         WORD         bV5BitCount;
  670.         DWORD        bV5Compression;
  671.         DWORD        bV5SizeImage;
  672.         LONG         bV5XPelsPerMeter;
  673.         LONG         bV5YPelsPerMeter;
  674.         DWORD        bV5ClrUsed;
  675.         DWORD        bV5ClrImportant;
  676.         DWORD        bV5RedMask;
  677.         DWORD        bV5GreenMask;
  678.         DWORD        bV5BlueMask;
  679.         DWORD        bV5AlphaMask;
  680.         DWORD        bV5CSType;
  681.         CIEXYZTRIPLE bV5Endpoints;
  682.         DWORD        bV5GammaRed;
  683.         DWORD        bV5GammaGreen;
  684.         DWORD        bV5GammaBlue;
  685.         DWORD        bV5Intent;
  686.         DWORD        bV5ProfileData;
  687.         DWORD        bV5ProfileSize;
  688.         DWORD        bV5Reserved;
  689. } BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
  690.  
  691. // Values for bV5CSType
  692. #define PROFILE_LINKED          'LINK'
  693. #define PROFILE_EMBEDDED        'MBED'
  694. #endif
  695.  
  696. /* constants for the biCompression field */
  697. #define BI_RGB        0L
  698. #define BI_RLE8       1L
  699. #define BI_RLE4       2L
  700. #define BI_BITFIELDS  3L
  701. #if (_WIN32_WINNT >= 0x0400)
  702. #endif
  703.  
  704. typedef struct tagBITMAPINFO {
  705.     BITMAPINFOHEADER    bmiHeader;
  706.     RGBQUAD             bmiColors[1];
  707. } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
  708.  
  709. typedef struct tagBITMAPCOREINFO {
  710.     BITMAPCOREHEADER    bmciHeader;
  711.     RGBTRIPLE           bmciColors[1];
  712. } BITMAPCOREINFO, FAR *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
  713.  
  714. #include <pshpack2.h>
  715. typedef struct tagBITMAPFILEHEADER {
  716.         WORD    bfType;
  717.         DWORD   bfSize;
  718.         WORD    bfReserved1;
  719.         WORD    bfReserved2;
  720.         DWORD   bfOffBits;
  721. } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
  722. #include <poppack.h>
  723.  
  724. #define MAKEPOINTS(l)       (*((POINTS FAR *)&(l)))
  725.  
  726. #if(WINVER >= 0x0400)
  727. #ifndef NOFONTSIG
  728. typedef struct tagFONTSIGNATURE
  729. {
  730.     DWORD fsUsb[4];
  731.     DWORD fsCsb[2];
  732. } FONTSIGNATURE, *PFONTSIGNATURE,FAR *LPFONTSIGNATURE;
  733.  
  734. typedef struct tagCHARSETINFO
  735. {
  736.     UINT ciCharset;
  737.     UINT ciACP;
  738.     FONTSIGNATURE fs;
  739. } CHARSETINFO, *PCHARSETINFO, NEAR *NPCHARSETINFO, FAR *LPCHARSETINFO;
  740.  
  741. #define TCI_SRCCHARSET  1
  742. #define TCI_SRCCODEPAGE 2
  743. #define TCI_SRCFONTSIG  3
  744.  
  745. typedef struct tagLOCALESIGNATURE
  746. {
  747.     DWORD lsUsb[4];
  748.     DWORD lsCsbDefault[2];
  749.     DWORD lsCsbSupported[2];
  750. } LOCALESIGNATURE, *PLOCALESIGNATURE,FAR *LPLOCALESIGNATURE;
  751.  
  752.  
  753. #endif
  754. #endif /* WINVER >= 0x0400 */
  755.  
  756. #ifndef NOMETAFILE
  757.  
  758. /* Clipboard Metafile Picture Structure */
  759. typedef struct tagHANDLETABLE
  760.   {
  761.     HGDIOBJ     objectHandle[1];
  762.   } HANDLETABLE, *PHANDLETABLE, FAR *LPHANDLETABLE;
  763.  
  764. typedef struct tagMETARECORD
  765.   {
  766.     DWORD       rdSize;
  767.     WORD        rdFunction;
  768.     WORD        rdParm[1];
  769.   } METARECORD;
  770. typedef struct tagMETARECORD UNALIGNED *PMETARECORD;
  771. typedef struct tagMETARECORD UNALIGNED FAR *LPMETARECORD;
  772.  
  773. typedef struct tagMETAFILEPICT
  774.   {
  775.     LONG        mm;
  776.     LONG        xExt;
  777.     LONG        yExt;
  778.     HMETAFILE   hMF;
  779.   } METAFILEPICT, FAR *LPMETAFILEPICT;
  780.  
  781. #include <pshpack2.h>
  782. typedef struct tagMETAHEADER
  783. {
  784.     WORD        mtType;
  785.     WORD        mtHeaderSize;
  786.     WORD        mtVersion;
  787.     DWORD       mtSize;
  788.     WORD        mtNoObjects;
  789.     DWORD       mtMaxRecord;
  790.     WORD        mtNoParameters;
  791. } METAHEADER;
  792. typedef struct tagMETAHEADER UNALIGNED *PMETAHEADER;
  793. typedef struct tagMETAHEADER UNALIGNED FAR *LPMETAHEADER;
  794.  
  795. #include <poppack.h>
  796.  
  797. /* Enhanced Metafile structures */
  798. typedef struct tagENHMETARECORD
  799. {
  800.     DWORD   iType;              // Record type EMR_XXX
  801.     DWORD   nSize;              // Record size in bytes
  802.     DWORD   dParm[1];           // Parameters
  803. } ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
  804.  
  805. typedef struct tagENHMETAHEADER
  806. {
  807.     DWORD   iType;              // Record type EMR_HEADER
  808.     DWORD   nSize;              // Record size in bytes.  This may be greater
  809.                                 // than the sizeof(ENHMETAHEADER).
  810.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  811.     RECTL   rclFrame;           // Inclusive-inclusive Picture Frame of metafile in .01 mm units
  812.     DWORD   dSignature;         // Signature.  Must be ENHMETA_SIGNATURE.
  813.     DWORD   nVersion;           // Version number
  814.     DWORD   nBytes;             // Size of the metafile in bytes
  815.     DWORD   nRecords;           // Number of records in the metafile
  816.     WORD    nHandles;           // Number of handles in the handle table
  817.                                 // Handle index zero is reserved.
  818.     WORD    sReserved;          // Reserved.  Must be zero.
  819.     DWORD   nDescription;       // Number of chars in the unicode description string
  820.                                 // This is 0 if there is no description string
  821.     DWORD   offDescription;     // Offset to the metafile description record.
  822.                                 // This is 0 if there is no description string
  823.     DWORD   nPalEntries;        // Number of entries in the metafile palette.
  824.     SIZEL   szlDevice;          // Size of the reference device in pels
  825.     SIZEL   szlMillimeters;     // Size of the reference device in millimeters
  826. #if(WINVER >= 0x0400)
  827.     DWORD   cbPixelFormat;      // Size of PIXELFORMATDESCRIPTOR information
  828.                                 // This is 0 if no pixel format is set
  829.     DWORD   offPixelFormat;     // Offset to PIXELFORMATDESCRIPTOR
  830.                                 // This is 0 if no pixel format is set
  831.     DWORD   bOpenGL;            // TRUE if OpenGL commands are present in
  832.                                 // the metafile, otherwise FALSE
  833. #endif /* WINVER >= 0x0400 */
  834. } ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
  835.  
  836. #endif /* NOMETAFILE */
  837.  
  838. #ifndef NOTEXTMETRIC
  839.  
  840. /* tmPitchAndFamily flags */
  841. #define TMPF_FIXED_PITCH    0x01
  842. #define TMPF_VECTOR             0x02
  843. #define TMPF_DEVICE             0x08
  844. #define TMPF_TRUETYPE       0x04
  845.  
  846. //
  847. // BCHAR definition for APPs
  848. //
  849. #ifdef UNICODE
  850.     typedef WCHAR BCHAR;
  851. #else
  852.     typedef BYTE BCHAR;
  853. #endif
  854.  
  855. typedef struct tagTEXTMETRICA
  856. {
  857.     LONG        tmHeight;
  858.     LONG        tmAscent;
  859.     LONG        tmDescent;
  860.     LONG        tmInternalLeading;
  861.     LONG        tmExternalLeading;
  862.     LONG        tmAveCharWidth;
  863.     LONG        tmMaxCharWidth;
  864.     LONG        tmWeight;
  865.     LONG        tmOverhang;
  866.     LONG        tmDigitizedAspectX;
  867.     LONG        tmDigitizedAspectY;
  868.     BYTE        tmFirstChar;
  869.     BYTE        tmLastChar;
  870.     BYTE        tmDefaultChar;
  871.     BYTE        tmBreakChar;
  872.     BYTE        tmItalic;
  873.     BYTE        tmUnderlined;
  874.     BYTE        tmStruckOut;
  875.     BYTE        tmPitchAndFamily;
  876.     BYTE        tmCharSet;
  877. } TEXTMETRICA, *PTEXTMETRICA, NEAR *NPTEXTMETRICA, FAR *LPTEXTMETRICA;
  878. typedef struct tagTEXTMETRICW
  879. {
  880.     LONG        tmHeight;
  881.     LONG        tmAscent;
  882.     LONG        tmDescent;
  883.     LONG        tmInternalLeading;
  884.     LONG        tmExternalLeading;
  885.     LONG        tmAveCharWidth;
  886.     LONG        tmMaxCharWidth;
  887.     LONG        tmWeight;
  888.     LONG        tmOverhang;
  889.     LONG        tmDigitizedAspectX;
  890.     LONG        tmDigitizedAspectY;
  891.     WCHAR       tmFirstChar;
  892.     WCHAR       tmLastChar;
  893.     WCHAR       tmDefaultChar;
  894.     WCHAR       tmBreakChar;
  895.     BYTE        tmItalic;
  896.     BYTE        tmUnderlined;
  897.     BYTE        tmStruckOut;
  898.     BYTE        tmPitchAndFamily;
  899.     BYTE        tmCharSet;
  900. } TEXTMETRICW, *PTEXTMETRICW, NEAR *NPTEXTMETRICW, FAR *LPTEXTMETRICW;
  901. #ifdef UNICODE
  902. typedef TEXTMETRICW TEXTMETRIC;
  903. typedef PTEXTMETRICW PTEXTMETRIC;
  904. typedef NPTEXTMETRICW NPTEXTMETRIC;
  905. typedef LPTEXTMETRICW LPTEXTMETRIC;
  906. #else
  907. typedef TEXTMETRICA TEXTMETRIC;
  908. typedef PTEXTMETRICA PTEXTMETRIC;
  909. typedef NPTEXTMETRICA NPTEXTMETRIC;
  910. typedef LPTEXTMETRICA LPTEXTMETRIC;
  911. #endif // UNICODE
  912.  
  913. /* ntmFlags field flags */
  914. #define NTM_REGULAR     0x00000040L
  915. #define NTM_BOLD        0x00000020L
  916. #define NTM_ITALIC      0x00000001L
  917.  
  918. #define NTM_NONNEGATIVE_AC  0x00010000
  919. #define NTM_OPENTYPE        0x00020000
  920. #define NTM_MULTIPLEMASTER  0x00040000
  921. #define NTM_MM_INSTANCE     0x00080000
  922. #define NTM_TYPE1           0x00100000
  923. #define NTM_DSIG            0x00200000
  924.  
  925. #include <pshpack4.h>
  926. typedef struct tagNEWTEXTMETRICA
  927. {
  928.     LONG        tmHeight;
  929.     LONG        tmAscent;
  930.     LONG        tmDescent;
  931.     LONG        tmInternalLeading;
  932.     LONG        tmExternalLeading;
  933.     LONG        tmAveCharWidth;
  934.     LONG        tmMaxCharWidth;
  935.     LONG        tmWeight;
  936.     LONG        tmOverhang;
  937.     LONG        tmDigitizedAspectX;
  938.     LONG        tmDigitizedAspectY;
  939.     BYTE        tmFirstChar;
  940.     BYTE        tmLastChar;
  941.     BYTE        tmDefaultChar;
  942.     BYTE        tmBreakChar;
  943.     BYTE        tmItalic;
  944.     BYTE        tmUnderlined;
  945.     BYTE        tmStruckOut;
  946.     BYTE        tmPitchAndFamily;
  947.     BYTE        tmCharSet;
  948.     DWORD   ntmFlags;
  949.     UINT    ntmSizeEM;
  950.     UINT    ntmCellHeight;
  951.     UINT    ntmAvgWidth;
  952. } NEWTEXTMETRICA, *PNEWTEXTMETRICA, NEAR *NPNEWTEXTMETRICA, FAR *LPNEWTEXTMETRICA;
  953. typedef struct tagNEWTEXTMETRICW
  954. {
  955.     LONG        tmHeight;
  956.     LONG        tmAscent;
  957.     LONG        tmDescent;
  958.     LONG        tmInternalLeading;
  959.     LONG        tmExternalLeading;
  960.     LONG        tmAveCharWidth;
  961.     LONG        tmMaxCharWidth;
  962.     LONG        tmWeight;
  963.     LONG        tmOverhang;
  964.     LONG        tmDigitizedAspectX;
  965.     LONG        tmDigitizedAspectY;
  966.     WCHAR       tmFirstChar;
  967.     WCHAR       tmLastChar;
  968.     WCHAR       tmDefaultChar;
  969.     WCHAR       tmBreakChar;
  970.     BYTE        tmItalic;
  971.     BYTE        tmUnderlined;
  972.     BYTE        tmStruckOut;
  973.     BYTE        tmPitchAndFamily;
  974.     BYTE        tmCharSet;
  975.     DWORD   ntmFlags;
  976.     UINT    ntmSizeEM;
  977.     UINT    ntmCellHeight;
  978.     UINT    ntmAvgWidth;
  979. } NEWTEXTMETRICW, *PNEWTEXTMETRICW, NEAR *NPNEWTEXTMETRICW, FAR *LPNEWTEXTMETRICW;
  980. #ifdef UNICODE
  981. typedef NEWTEXTMETRICW NEWTEXTMETRIC;
  982. typedef PNEWTEXTMETRICW PNEWTEXTMETRIC;
  983. typedef NPNEWTEXTMETRICW NPNEWTEXTMETRIC;
  984. typedef LPNEWTEXTMETRICW LPNEWTEXTMETRIC;
  985. #else
  986. typedef NEWTEXTMETRICA NEWTEXTMETRIC;
  987. typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
  988. typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
  989. typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
  990. #endif // UNICODE
  991. #include <poppack.h>
  992.  
  993. #if(WINVER >= 0x0400)
  994. typedef struct tagNEWTEXTMETRICEXA
  995. {
  996.     NEWTEXTMETRICA  ntmTm;
  997.     FONTSIGNATURE   ntmFontSig;
  998. }NEWTEXTMETRICEXA;
  999. typedef struct tagNEWTEXTMETRICEXW
  1000. {
  1001.     NEWTEXTMETRICW  ntmTm;
  1002.     FONTSIGNATURE   ntmFontSig;
  1003. }NEWTEXTMETRICEXW;
  1004. #ifdef UNICODE
  1005. typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
  1006. #else
  1007. typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
  1008. #endif // UNICODE
  1009. #endif /* WINVER >= 0x0400 */
  1010.  
  1011. #endif /* NOTEXTMETRIC */
  1012. /* GDI Logical Objects: */
  1013.  
  1014. /* Pel Array */
  1015. typedef struct tagPELARRAY
  1016.   {
  1017.     LONG        paXCount;
  1018.     LONG        paYCount;
  1019.     LONG        paXExt;
  1020.     LONG        paYExt;
  1021.     BYTE        paRGBs;
  1022.   } PELARRAY, *PPELARRAY, NEAR *NPPELARRAY, FAR *LPPELARRAY;
  1023.  
  1024. /* Logical Brush (or Pattern) */
  1025. typedef struct tagLOGBRUSH
  1026.   {
  1027.     UINT        lbStyle;
  1028.     COLORREF    lbColor;
  1029.     LONG        lbHatch;
  1030.   } LOGBRUSH, *PLOGBRUSH, NEAR *NPLOGBRUSH, FAR *LPLOGBRUSH;
  1031.  
  1032. typedef LOGBRUSH            PATTERN;
  1033. typedef PATTERN             *PPATTERN;
  1034. typedef PATTERN NEAR        *NPPATTERN;
  1035. typedef PATTERN FAR         *LPPATTERN;
  1036.  
  1037. /* Logical Pen */
  1038. typedef struct tagLOGPEN
  1039.   {
  1040.     UINT        lopnStyle;
  1041.     POINT       lopnWidth;
  1042.     COLORREF    lopnColor;
  1043.   } LOGPEN, *PLOGPEN, NEAR *NPLOGPEN, FAR *LPLOGPEN;
  1044.  
  1045. typedef struct tagEXTLOGPEN {
  1046.     DWORD       elpPenStyle;
  1047.     DWORD       elpWidth;
  1048.     UINT        elpBrushStyle;
  1049.     COLORREF    elpColor;
  1050.     LONG        elpHatch;
  1051.     DWORD       elpNumEntries;
  1052.     DWORD       elpStyleEntry[1];
  1053. } EXTLOGPEN, *PEXTLOGPEN, NEAR *NPEXTLOGPEN, FAR *LPEXTLOGPEN;
  1054.  
  1055. typedef struct tagPALETTEENTRY {
  1056.     BYTE        peRed;
  1057.     BYTE        peGreen;
  1058.     BYTE        peBlue;
  1059.     BYTE        peFlags;
  1060. } PALETTEENTRY, *PPALETTEENTRY, FAR *LPPALETTEENTRY;
  1061.  
  1062. /* Logical Palette */
  1063. typedef struct tagLOGPALETTE {
  1064.     WORD        palVersion;
  1065.     WORD        palNumEntries;
  1066.     PALETTEENTRY        palPalEntry[1];
  1067. } LOGPALETTE, *PLOGPALETTE, NEAR *NPLOGPALETTE, FAR *LPLOGPALETTE;
  1068.  
  1069.  
  1070. /* Logical Font */
  1071. #define LF_FACESIZE         32
  1072.  
  1073. typedef struct tagLOGFONTA
  1074. {
  1075.     LONG      lfHeight;
  1076.     LONG      lfWidth;
  1077.     LONG      lfEscapement;
  1078.     LONG      lfOrientation;
  1079.     LONG      lfWeight;
  1080.     BYTE      lfItalic;
  1081.     BYTE      lfUnderline;
  1082.     BYTE      lfStrikeOut;
  1083.     BYTE      lfCharSet;
  1084.     BYTE      lfOutPrecision;
  1085.     BYTE      lfClipPrecision;
  1086.     BYTE      lfQuality;
  1087.     BYTE      lfPitchAndFamily;
  1088.     CHAR      lfFaceName[LF_FACESIZE];
  1089. } LOGFONTA, *PLOGFONTA, NEAR *NPLOGFONTA, FAR *LPLOGFONTA;
  1090. typedef struct tagLOGFONTW
  1091. {
  1092.     LONG      lfHeight;
  1093.     LONG      lfWidth;
  1094.     LONG      lfEscapement;
  1095.     LONG      lfOrientation;
  1096.     LONG      lfWeight;
  1097.     BYTE      lfItalic;
  1098.     BYTE      lfUnderline;
  1099.     BYTE      lfStrikeOut;
  1100.     BYTE      lfCharSet;
  1101.     BYTE      lfOutPrecision;
  1102.     BYTE      lfClipPrecision;
  1103.     BYTE      lfQuality;
  1104.     BYTE      lfPitchAndFamily;
  1105.     WCHAR     lfFaceName[LF_FACESIZE];
  1106. } LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;
  1107. #ifdef UNICODE
  1108. typedef LOGFONTW LOGFONT;
  1109. typedef PLOGFONTW PLOGFONT;
  1110. typedef NPLOGFONTW NPLOGFONT;
  1111. typedef LPLOGFONTW LPLOGFONT;
  1112. #else
  1113. typedef LOGFONTA LOGFONT;
  1114. typedef PLOGFONTA PLOGFONT;
  1115. typedef NPLOGFONTA NPLOGFONT;
  1116. typedef LPLOGFONTA LPLOGFONT;
  1117. #endif // UNICODE
  1118.  
  1119. #define LF_FULLFACESIZE     64
  1120.  
  1121. /* Structure passed to FONTENUMPROC */
  1122. typedef struct tagENUMLOGFONTA
  1123. {
  1124.     LOGFONTA elfLogFont;
  1125.     BYTE     elfFullName[LF_FULLFACESIZE];
  1126.     BYTE     elfStyle[LF_FACESIZE];
  1127. } ENUMLOGFONTA, FAR* LPENUMLOGFONTA;
  1128. /* Structure passed to FONTENUMPROC */
  1129. typedef struct tagENUMLOGFONTW
  1130. {
  1131.     LOGFONTW elfLogFont;
  1132.     WCHAR    elfFullName[LF_FULLFACESIZE];
  1133.     WCHAR    elfStyle[LF_FACESIZE];
  1134. } ENUMLOGFONTW, FAR* LPENUMLOGFONTW;
  1135. #ifdef UNICODE
  1136. typedef ENUMLOGFONTW ENUMLOGFONT;
  1137. typedef LPENUMLOGFONTW LPENUMLOGFONT;
  1138. #else
  1139. typedef ENUMLOGFONTA ENUMLOGFONT;
  1140. typedef LPENUMLOGFONTA LPENUMLOGFONT;
  1141. #endif // UNICODE
  1142.  
  1143. #if(WINVER >= 0x0400)
  1144. typedef struct tagENUMLOGFONTEXA
  1145. {
  1146.     LOGFONTA    elfLogFont;
  1147.     BYTE        elfFullName[LF_FULLFACESIZE];
  1148.     BYTE        elfStyle[LF_FACESIZE];
  1149.     BYTE        elfScript[LF_FACESIZE];
  1150. } ENUMLOGFONTEXA, FAR *LPENUMLOGFONTEXA;
  1151. typedef struct tagENUMLOGFONTEXW
  1152. {
  1153.     LOGFONTW    elfLogFont;
  1154.     WCHAR       elfFullName[LF_FULLFACESIZE];
  1155.     WCHAR       elfStyle[LF_FACESIZE];
  1156.     WCHAR       elfScript[LF_FACESIZE];
  1157. } ENUMLOGFONTEXW, FAR *LPENUMLOGFONTEXW;
  1158. #ifdef UNICODE
  1159. typedef ENUMLOGFONTEXW ENUMLOGFONTEX;
  1160. typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX;
  1161. #else
  1162. typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
  1163. typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
  1164. #endif // UNICODE
  1165. #endif /* WINVER >= 0x0400 */
  1166.  
  1167. #define OUT_DEFAULT_PRECIS          0
  1168. #define OUT_STRING_PRECIS           1
  1169. #define OUT_CHARACTER_PRECIS        2
  1170. #define OUT_STROKE_PRECIS           3
  1171. #define OUT_TT_PRECIS               4
  1172. #define OUT_DEVICE_PRECIS           5
  1173. #define OUT_RASTER_PRECIS           6
  1174. #define OUT_TT_ONLY_PRECIS          7
  1175. #define OUT_OUTLINE_PRECIS          8
  1176. #define OUT_SCREEN_OUTLINE_PRECIS   9
  1177.  
  1178. #define CLIP_DEFAULT_PRECIS     0
  1179. #define CLIP_CHARACTER_PRECIS   1
  1180. #define CLIP_STROKE_PRECIS      2
  1181. #define CLIP_MASK               0xf
  1182. #define CLIP_LH_ANGLES          (1<<4)
  1183. #define CLIP_TT_ALWAYS          (2<<4)
  1184. #define CLIP_EMBEDDED           (8<<4)
  1185.  
  1186. #define DEFAULT_QUALITY         0
  1187. #define DRAFT_QUALITY           1
  1188. #define PROOF_QUALITY           2
  1189. #if(WINVER >= 0x0400)
  1190. #define NONANTIALIASED_QUALITY  3
  1191. #define ANTIALIASED_QUALITY     4
  1192. #endif /* WINVER >= 0x0400 */
  1193.  
  1194. #define DEFAULT_PITCH           0
  1195. #define FIXED_PITCH             1
  1196. #define VARIABLE_PITCH          2
  1197. #if(WINVER >= 0x0400)
  1198. #define MONO_FONT               8
  1199. #endif /* WINVER >= 0x0400 */
  1200.  
  1201. #define ANSI_CHARSET            0
  1202. #define DEFAULT_CHARSET         1
  1203. #define SYMBOL_CHARSET          2
  1204. #define SHIFTJIS_CHARSET        128
  1205. #define HANGEUL_CHARSET         129
  1206. #define HANGUL_CHARSET          129
  1207. #define GB2312_CHARSET          134
  1208. #define CHINESEBIG5_CHARSET     136
  1209. #define OEM_CHARSET             255
  1210. #if(WINVER >= 0x0400)
  1211. #define JOHAB_CHARSET           130
  1212. #define HEBREW_CHARSET          177
  1213. #define ARABIC_CHARSET          178
  1214. #define GREEK_CHARSET           161
  1215. #define TURKISH_CHARSET         162
  1216. #define VIETNAMESE_CHARSET      163
  1217. #define THAI_CHARSET            222
  1218. #define EASTEUROPE_CHARSET      238
  1219. #define RUSSIAN_CHARSET         204
  1220.  
  1221. #define MAC_CHARSET             77
  1222. #define BALTIC_CHARSET          186
  1223.  
  1224. #define FS_LATIN1               0x00000001L
  1225. #define FS_LATIN2               0x00000002L
  1226. #define FS_CYRILLIC             0x00000004L
  1227. #define FS_GREEK                0x00000008L
  1228. #define FS_TURKISH              0x00000010L
  1229. #define FS_HEBREW               0x00000020L
  1230. #define FS_ARABIC               0x00000040L
  1231. #define FS_BALTIC               0x00000080L
  1232. #define FS_VIETNAMESE           0x00000100L
  1233. #define FS_THAI                 0x00010000L
  1234. #define FS_JISJAPAN             0x00020000L
  1235. #define FS_CHINESESIMP          0x00040000L
  1236. #define FS_WANSUNG              0x00080000L
  1237. #define FS_CHINESETRAD          0x00100000L
  1238. #define FS_JOHAB                0x00200000L
  1239. #define FS_SYMBOL               0x80000000L
  1240. #endif /* WINVER >= 0x0400 */
  1241.  
  1242. /* Font Families */
  1243. #define FF_DONTCARE         (0<<4)  /* Don't care or don't know. */
  1244. #define FF_ROMAN            (1<<4)  /* Variable stroke width, serifed. */
  1245.                                     /* Times Roman, Century Schoolbook, etc. */
  1246. #define FF_SWISS            (2<<4)  /* Variable stroke width, sans-serifed. */
  1247.                                     /* Helvetica, Swiss, etc. */
  1248. #define FF_MODERN           (3<<4)  /* Constant stroke width, serifed or sans-serifed. */
  1249.                                     /* Pica, Elite, Courier, etc. */
  1250. #define FF_SCRIPT           (4<<4)  /* Cursive, etc. */
  1251. #define FF_DECORATIVE       (5<<4)  /* Old English, etc. */
  1252.  
  1253. /* Font Weights */
  1254. #define FW_DONTCARE         0
  1255. #define FW_THIN             100
  1256. #define FW_EXTRALIGHT       200
  1257. #define FW_LIGHT            300
  1258. #define FW_NORMAL           400
  1259. #define FW_MEDIUM           500
  1260. #define FW_SEMIBOLD         600
  1261. #define FW_BOLD             700
  1262. #define FW_EXTRABOLD        800
  1263. #define FW_HEAVY            900
  1264.  
  1265. #define FW_ULTRALIGHT       FW_EXTRALIGHT
  1266. #define FW_REGULAR          FW_NORMAL
  1267. #define FW_DEMIBOLD         FW_SEMIBOLD
  1268. #define FW_ULTRABOLD        FW_EXTRABOLD
  1269. #define FW_BLACK            FW_HEAVY
  1270.  
  1271. #define PANOSE_COUNT               10
  1272. #define PAN_FAMILYTYPE_INDEX        0
  1273. #define PAN_SERIFSTYLE_INDEX        1
  1274. #define PAN_WEIGHT_INDEX            2
  1275. #define PAN_PROPORTION_INDEX        3
  1276. #define PAN_CONTRAST_INDEX          4
  1277. #define PAN_STROKEVARIATION_INDEX   5
  1278. #define PAN_ARMSTYLE_INDEX          6
  1279. #define PAN_LETTERFORM_INDEX        7
  1280. #define PAN_MIDLINE_INDEX           8
  1281. #define PAN_XHEIGHT_INDEX           9
  1282.  
  1283. #define PAN_CULTURE_LATIN           0
  1284.  
  1285. typedef struct tagPANOSE
  1286. {
  1287.     BYTE    bFamilyType;
  1288.     BYTE    bSerifStyle;
  1289.     BYTE    bWeight;
  1290.     BYTE    bProportion;
  1291.     BYTE    bContrast;
  1292.     BYTE    bStrokeVariation;
  1293.     BYTE    bArmStyle;
  1294.     BYTE    bLetterform;
  1295.     BYTE    bMidline;
  1296.     BYTE    bXHeight;
  1297. } PANOSE, * LPPANOSE;
  1298.  
  1299. #define PAN_ANY                         0 /* Any                            */
  1300. #define PAN_NO_FIT                      1 /* No Fit                         */
  1301.  
  1302. #define PAN_FAMILY_TEXT_DISPLAY         2 /* Text and Display               */
  1303. #define PAN_FAMILY_SCRIPT               3 /* Script                         */
  1304. #define PAN_FAMILY_DECORATIVE           4 /* Decorative                     */
  1305. #define PAN_FAMILY_PICTORIAL            5 /* Pictorial                      */
  1306.  
  1307. #define PAN_SERIF_COVE                  2 /* Cove                           */
  1308. #define PAN_SERIF_OBTUSE_COVE           3 /* Obtuse Cove                    */
  1309. #define PAN_SERIF_SQUARE_COVE           4 /* Square Cove                    */
  1310. #define PAN_SERIF_OBTUSE_SQUARE_COVE    5 /* Obtuse Square Cove             */
  1311. #define PAN_SERIF_SQUARE                6 /* Square                         */
  1312. #define PAN_SERIF_THIN                  7 /* Thin                           */
  1313. #define PAN_SERIF_BONE                  8 /* Bone                           */
  1314. #define PAN_SERIF_EXAGGERATED           9 /* Exaggerated                    */
  1315. #define PAN_SERIF_TRIANGLE             10 /* Triangle                       */
  1316. #define PAN_SERIF_NORMAL_SANS          11 /* Normal Sans                    */
  1317. #define PAN_SERIF_OBTUSE_SANS          12 /* Obtuse Sans                    */
  1318. #define PAN_SERIF_PERP_SANS            13 /* Prep Sans                      */
  1319. #define PAN_SERIF_FLARED               14 /* Flared                         */
  1320. #define PAN_SERIF_ROUNDED              15 /* Rounded                        */
  1321.  
  1322. #define PAN_WEIGHT_VERY_LIGHT           2 /* Very Light                     */
  1323. #define PAN_WEIGHT_LIGHT                3 /* Light                          */
  1324. #define PAN_WEIGHT_THIN                 4 /* Thin                           */
  1325. #define PAN_WEIGHT_BOOK                 5 /* Book                           */
  1326. #define PAN_WEIGHT_MEDIUM               6 /* Medium                         */
  1327. #define PAN_WEIGHT_DEMI                 7 /* Demi                           */
  1328. #define PAN_WEIGHT_BOLD                 8 /* Bold                           */
  1329. #define PAN_WEIGHT_HEAVY                9 /* Heavy                          */
  1330. #define PAN_WEIGHT_BLACK               10 /* Black                          */
  1331. #define PAN_WEIGHT_NORD                11 /* Nord                           */
  1332.  
  1333. #define PAN_PROP_OLD_STYLE              2 /* Old Style                      */
  1334. #define PAN_PROP_MODERN                 3 /* Modern                         */
  1335. #define PAN_PROP_EVEN_WIDTH             4 /* Even Width                     */
  1336. #define PAN_PROP_EXPANDED               5 /* Expanded                       */
  1337. #define PAN_PROP_CONDENSED              6 /* Condensed                      */
  1338. #define PAN_PROP_VERY_EXPANDED          7 /* Very Expanded                  */
  1339. #define PAN_PROP_VERY_CONDENSED         8 /* Very Condensed                 */
  1340. #define PAN_PROP_MONOSPACED             9 /* Monospaced                     */
  1341.  
  1342. #define PAN_CONTRAST_NONE               2 /* None                           */
  1343. #define PAN_CONTRAST_VERY_LOW           3 /* Very Low                       */
  1344. #define PAN_CONTRAST_LOW                4 /* Low                            */
  1345. #define PAN_CONTRAST_MEDIUM_LOW         5 /* Medium Low                     */
  1346. #define PAN_CONTRAST_MEDIUM             6 /* Medium                         */
  1347. #define PAN_CONTRAST_MEDIUM_HIGH        7 /* Mediim High                    */
  1348. #define PAN_CONTRAST_HIGH               8 /* High                           */
  1349. #define PAN_CONTRAST_VERY_HIGH          9 /* Very High                      */
  1350.  
  1351. #define PAN_STROKE_GRADUAL_DIAG         2 /* Gradual/Diagonal               */
  1352. #define PAN_STROKE_GRADUAL_TRAN         3 /* Gradual/Transitional           */
  1353. #define PAN_STROKE_GRADUAL_VERT         4 /* Gradual/Vertical               */
  1354. #define PAN_STROKE_GRADUAL_HORZ         5 /* Gradual/Horizontal             */
  1355. #define PAN_STROKE_RAPID_VERT           6 /* Rapid/Vertical                 */
  1356. #define PAN_STROKE_RAPID_HORZ           7 /* Rapid/Horizontal               */
  1357. #define PAN_STROKE_INSTANT_VERT         8 /* Instant/Vertical               */
  1358.  
  1359. #define PAN_STRAIGHT_ARMS_HORZ          2 /* Straight Arms/Horizontal       */
  1360. #define PAN_STRAIGHT_ARMS_WEDGE         3 /* Straight Arms/Wedge            */
  1361. #define PAN_STRAIGHT_ARMS_VERT          4 /* Straight Arms/Vertical         */
  1362. #define PAN_STRAIGHT_ARMS_SINGLE_SERIF  5 /* Straight Arms/Single-Serif     */
  1363. #define PAN_STRAIGHT_ARMS_DOUBLE_SERIF  6 /* Straight Arms/Double-Serif     */
  1364. #define PAN_BENT_ARMS_HORZ              7 /* Non-Straight Arms/Horizontal   */
  1365. #define PAN_BENT_ARMS_WEDGE             8 /* Non-Straight Arms/Wedge        */
  1366. #define PAN_BENT_ARMS_VERT              9 /* Non-Straight Arms/Vertical     */
  1367. #define PAN_BENT_ARMS_SINGLE_SERIF     10 /* Non-Straight Arms/Single-Serif */
  1368. #define PAN_BENT_ARMS_DOUBLE_SERIF     11 /* Non-Straight Arms/Double-Serif */
  1369.  
  1370. #define PAN_LETT_NORMAL_CONTACT         2 /* Normal/Contact                 */
  1371. #define PAN_LETT_NORMAL_WEIGHTED        3 /* Normal/Weighted                */
  1372. #define PAN_LETT_NORMAL_BOXED           4 /* Normal/Boxed                   */
  1373. #define PAN_LETT_NORMAL_FLATTENED       5 /* Normal/Flattened               */
  1374. #define PAN_LETT_NORMAL_ROUNDED         6 /* Normal/Rounded                 */
  1375. #define PAN_LETT_NORMAL_OFF_CENTER      7 /* Normal/Off Center              */
  1376. #define PAN_LETT_NORMAL_SQUARE          8 /* Normal/Square                  */
  1377. #define PAN_LETT_OBLIQUE_CONTACT        9 /* Oblique/Contact                */
  1378. #define PAN_LETT_OBLIQUE_WEIGHTED      10 /* Oblique/Weighted               */
  1379. #define PAN_LETT_OBLIQUE_BOXED         11 /* Oblique/Boxed                  */
  1380. #define PAN_LETT_OBLIQUE_FLATTENED     12 /* Oblique/Flattened              */
  1381. #define PAN_LETT_OBLIQUE_ROUNDED       13 /* Oblique/Rounded                */
  1382. #define PAN_LETT_OBLIQUE_OFF_CENTER    14 /* Oblique/Off Center             */
  1383. #define PAN_LETT_OBLIQUE_SQUARE        15 /* Oblique/Square                 */
  1384.  
  1385. #define PAN_MIDLINE_STANDARD_TRIMMED    2 /* Standard/Trimmed               */
  1386. #define PAN_MIDLINE_STANDARD_POINTED    3 /* Standard/Pointed               */
  1387. #define PAN_MIDLINE_STANDARD_SERIFED    4 /* Standard/Serifed               */
  1388. #define PAN_MIDLINE_HIGH_TRIMMED        5 /* High/Trimmed                   */
  1389. #define PAN_MIDLINE_HIGH_POINTED        6 /* High/Pointed                   */
  1390. #define PAN_MIDLINE_HIGH_SERIFED        7 /* High/Serifed                   */
  1391. #define PAN_MIDLINE_CONSTANT_TRIMMED    8 /* Constant/Trimmed               */
  1392. #define PAN_MIDLINE_CONSTANT_POINTED    9 /* Constant/Pointed               */
  1393. #define PAN_MIDLINE_CONSTANT_SERIFED   10 /* Constant/Serifed               */
  1394. #define PAN_MIDLINE_LOW_TRIMMED        11 /* Low/Trimmed                    */
  1395. #define PAN_MIDLINE_LOW_POINTED        12 /* Low/Pointed                    */
  1396. #define PAN_MIDLINE_LOW_SERIFED        13 /* Low/Serifed                    */
  1397.  
  1398. #define PAN_XHEIGHT_CONSTANT_SMALL      2 /* Constant/Small                 */
  1399. #define PAN_XHEIGHT_CONSTANT_STD        3 /* Constant/Standard              */
  1400. #define PAN_XHEIGHT_CONSTANT_LARGE      4 /* Constant/Large                 */
  1401. #define PAN_XHEIGHT_DUCKING_SMALL       5 /* Ducking/Small                  */
  1402. #define PAN_XHEIGHT_DUCKING_STD         6 /* Ducking/Standard               */
  1403. #define PAN_XHEIGHT_DUCKING_LARGE       7 /* Ducking/Large                  */
  1404.  
  1405.  
  1406. #define ELF_VENDOR_SIZE     4
  1407.  
  1408. /* The extended logical font       */
  1409. /* An extension of the ENUMLOGFONT */
  1410.  
  1411. typedef struct tagEXTLOGFONTA {
  1412.     LOGFONTA    elfLogFont;
  1413.     BYTE        elfFullName[LF_FULLFACESIZE];
  1414.     BYTE        elfStyle[LF_FACESIZE];
  1415.     DWORD       elfVersion;     /* 0 for the first release of NT */
  1416.     DWORD       elfStyleSize;
  1417.     DWORD       elfMatch;
  1418.     DWORD       elfReserved;
  1419.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  1420.     DWORD       elfCulture;     /* 0 for Latin                   */
  1421.     PANOSE      elfPanose;
  1422. } EXTLOGFONTA, *PEXTLOGFONTA, NEAR *NPEXTLOGFONTA, FAR *LPEXTLOGFONTA;
  1423. typedef struct tagEXTLOGFONTW {
  1424.     LOGFONTW    elfLogFont;
  1425.     WCHAR       elfFullName[LF_FULLFACESIZE];
  1426.     WCHAR       elfStyle[LF_FACESIZE];
  1427.     DWORD       elfVersion;     /* 0 for the first release of NT */
  1428.     DWORD       elfStyleSize;
  1429.     DWORD       elfMatch;
  1430.     DWORD       elfReserved;
  1431.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  1432.     DWORD       elfCulture;     /* 0 for Latin                   */
  1433.     PANOSE      elfPanose;
  1434. } EXTLOGFONTW, *PEXTLOGFONTW, NEAR *NPEXTLOGFONTW, FAR *LPEXTLOGFONTW;
  1435. #ifdef UNICODE
  1436. typedef EXTLOGFONTW EXTLOGFONT;
  1437. typedef PEXTLOGFONTW PEXTLOGFONT;
  1438. typedef NPEXTLOGFONTW NPEXTLOGFONT;
  1439. typedef LPEXTLOGFONTW LPEXTLOGFONT;
  1440. #else
  1441. typedef EXTLOGFONTA EXTLOGFONT;
  1442. typedef PEXTLOGFONTA PEXTLOGFONT;
  1443. typedef NPEXTLOGFONTA NPEXTLOGFONT;
  1444. typedef LPEXTLOGFONTA LPEXTLOGFONT;
  1445. #endif // UNICODE
  1446.  
  1447. #define ELF_VERSION         0
  1448. #define ELF_CULTURE_LATIN   0
  1449.  
  1450. /* EnumFonts Masks */
  1451. #define RASTER_FONTTYPE     0x0001
  1452. #define DEVICE_FONTTYPE     0x002
  1453. #define TRUETYPE_FONTTYPE   0x004
  1454.  
  1455. #define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
  1456. #define PALETTERGB(r,g,b)   (0x02000000 | RGB(r,g,b))
  1457. #define PALETTEINDEX(i)     ((COLORREF)(0x01000000 | (DWORD)(WORD)(i)))
  1458.  
  1459. /* palette entry flags */
  1460.  
  1461. #define PC_RESERVED     0x01    /* palette index used for animation */
  1462. #define PC_EXPLICIT     0x02    /* palette index is explicit to device */
  1463. #define PC_NOCOLLAPSE   0x04    /* do not match color to system palette */
  1464.  
  1465. #define GetRValue(rgb)      ((BYTE)(rgb))
  1466. #define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8))
  1467. #define GetBValue(rgb)      ((BYTE)((rgb)>>16))
  1468.  
  1469. /* Background Modes */
  1470. #define TRANSPARENT         1
  1471. #define OPAQUE              2
  1472. #define BKMODE_LAST         2
  1473.  
  1474. /* Graphics Modes */
  1475.  
  1476. #define GM_COMPATIBLE       1
  1477. #define GM_ADVANCED         2
  1478. #define GM_LAST             2
  1479.  
  1480. /* PolyDraw and GetPath point types */
  1481. #define PT_CLOSEFIGURE      0x01
  1482. #define PT_LINETO           0x02
  1483. #define PT_BEZIERTO         0x04
  1484. #define PT_MOVETO           0x06
  1485.  
  1486. /* Mapping Modes */
  1487. #define MM_TEXT             1
  1488. #define MM_LOMETRIC         2
  1489. #define MM_HIMETRIC         3
  1490. #define MM_LOENGLISH        4
  1491. #define MM_HIENGLISH        5
  1492. #define MM_TWIPS            6
  1493. #define MM_ISOTROPIC        7
  1494. #define MM_ANISOTROPIC      8
  1495.  
  1496. /* Min and Max Mapping Mode values */
  1497. #define MM_MIN              MM_TEXT
  1498. #define MM_MAX              MM_ANISOTROPIC
  1499. #define MM_MAX_FIXEDSCALE   MM_TWIPS
  1500.  
  1501. /* Coordinate Modes */
  1502. #define ABSOLUTE            1
  1503. #define RELATIVE            2
  1504.  
  1505. /* Stock Logical Objects */
  1506. #define WHITE_BRUSH         0
  1507. #define LTGRAY_BRUSH        1
  1508. #define GRAY_BRUSH          2
  1509. #define DKGRAY_BRUSH        3
  1510. #define BLACK_BRUSH         4
  1511. #define NULL_BRUSH          5
  1512. #define HOLLOW_BRUSH        NULL_BRUSH
  1513. #define WHITE_PEN           6
  1514. #define BLACK_PEN           7
  1515. #define NULL_PEN            8
  1516. #define OEM_FIXED_FONT      10
  1517. #define ANSI_FIXED_FONT     11
  1518. #define ANSI_VAR_FONT       12
  1519. #define SYSTEM_FONT         13
  1520. #define DEVICE_DEFAULT_FONT 14
  1521. #define DEFAULT_PALETTE     15
  1522. #define SYSTEM_FIXED_FONT   16
  1523.  
  1524. #if(WINVER >= 0x0400)
  1525. #define DEFAULT_GUI_FONT    17
  1526. #endif /* WINVER >= 0x0400 */
  1527.  
  1528. #if (_WIN32_WINNT >= 0x0500)
  1529. #define DC_BRUSH            18
  1530. #define DC_PEN              19
  1531. #endif
  1532.  
  1533. #if (_WIN32_WINNT >= 0x0500)
  1534. #define STOCK_LAST          19
  1535. #elif (WINVER >= 0x0400)
  1536. #define STOCK_LAST          17
  1537. #else
  1538. #define STOCK_LAST          16
  1539. #endif
  1540.  
  1541. #define CLR_INVALID     0xFFFFFFFF
  1542.  
  1543. /* Brush Styles */
  1544. #define BS_SOLID            0
  1545. #define BS_NULL             1
  1546. #define BS_HOLLOW           BS_NULL
  1547. #define BS_HATCHED          2
  1548. #define BS_PATTERN          3
  1549. #define BS_INDEXED          4
  1550. #define BS_DIBPATTERN       5
  1551. #define BS_DIBPATTERNPT     6
  1552. #define BS_PATTERN8X8       7
  1553. #define BS_DIBPATTERN8X8    8
  1554. #define BS_MONOPATTERN      9
  1555.  
  1556. /* Hatch Styles */
  1557. #define HS_HORIZONTAL       0       /* ----- */
  1558. #define HS_VERTICAL         1       /* ||||| */
  1559. #define HS_FDIAGONAL        2       /* \\\\\ */
  1560. #define HS_BDIAGONAL        3       /* ///// */
  1561. #define HS_CROSS            4       /* +++++ */
  1562. #define HS_DIAGCROSS        5       /* xxxxx */
  1563.  
  1564. /* Pen Styles */
  1565. #define PS_SOLID            0
  1566. #define PS_DASH             1       /* -------  */
  1567. #define PS_DOT              2       /* .......  */
  1568. #define PS_DASHDOT          3       /* _._._._  */
  1569. #define PS_DASHDOTDOT       4       /* _.._.._  */
  1570. #define PS_NULL             5
  1571. #define PS_INSIDEFRAME      6
  1572. #define PS_USERSTYLE        7
  1573. #define PS_ALTERNATE        8
  1574. #define PS_STYLE_MASK       0x0000000F
  1575.  
  1576. #define PS_ENDCAP_ROUND     0x00000000
  1577. #define PS_ENDCAP_SQUARE    0x00000100
  1578. #define PS_ENDCAP_FLAT      0x00000200
  1579. #define PS_ENDCAP_MASK      0x00000F00
  1580.  
  1581. #define PS_JOIN_ROUND       0x00000000
  1582. #define PS_JOIN_BEVEL       0x00001000
  1583. #define PS_JOIN_MITER       0x00002000
  1584. #define PS_JOIN_MASK        0x0000F000
  1585.  
  1586. #define PS_COSMETIC         0x00000000
  1587. #define PS_GEOMETRIC        0x00010000
  1588. #define PS_TYPE_MASK        0x000F0000
  1589.  
  1590. #define AD_COUNTERCLOCKWISE 1
  1591. #define AD_CLOCKWISE        2
  1592.  
  1593. /* Device Parameters for GetDeviceCaps() */
  1594. #define DRIVERVERSION 0     /* Device driver version                    */
  1595. #define TECHNOLOGY    2     /* Device classification                    */
  1596. #define HORZSIZE      4     /* Horizontal size in millimeters           */
  1597. #define VERTSIZE      6     /* Vertical size in millimeters             */
  1598. #define HORZRES       8     /* Horizontal width in pixels               */
  1599. #define VERTRES       10    /* Vertical height in pixels                */
  1600. #define BITSPIXEL     12    /* Number of bits per pixel                 */
  1601. #define PLANES        14    /* Number of planes                         */
  1602. #define NUMBRUSHES    16    /* Number of brushes the device has         */
  1603. #define NUMPENS       18    /* Number of pens the device has            */
  1604. #define NUMMARKERS    20    /* Number of markers the device has         */
  1605. #define NUMFONTS      22    /* Number of fonts the device has           */
  1606. #define NUMCOLORS     24    /* Number of colors the device supports     */
  1607. #define PDEVICESIZE   26    /* Size required for device descriptor      */
  1608. #define CURVECAPS     28    /* Curve capabilities                       */
  1609. #define LINECAPS      30    /* Line capabilities                        */
  1610. #define POLYGONALCAPS 32    /* Polygonal capabilities                   */
  1611. #define TEXTCAPS      34    /* Text capabilities                        */
  1612. #define CLIPCAPS      36    /* Clipping capabilities                    */
  1613. #define RASTERCAPS    38    /* Bitblt capabilities                      */
  1614. #define ASPECTX       40    /* Length of the X leg                      */
  1615. #define ASPECTY       42    /* Length of the Y leg                      */
  1616. #define ASPECTXY      44    /* Length of the hypotenuse                 */
  1617.  
  1618. #if(WINVER >= 0x0500)
  1619. #define SHADEBLENDCAPS 45   /* Shading and blending caps                */
  1620. #endif /* WINVER >= 0x0500 */
  1621.  
  1622. #define LOGPIXELSX    88    /* Logical pixels/inch in X                 */
  1623. #define LOGPIXELSY    90    /* Logical pixels/inch in Y                 */
  1624.  
  1625. #define SIZEPALETTE  104    /* Number of entries in physical palette    */
  1626. #define NUMRESERVED  106    /* Number of reserved entries in palette    */
  1627. #define COLORRES     108    /* Actual color resolution                  */
  1628.  
  1629.  
  1630. // Printing related DeviceCaps. These replace the appropriate Escapes
  1631.  
  1632. #define PHYSICALWIDTH   110 /* Physical Width in device units           */
  1633. #define PHYSICALHEIGHT  111 /* Physical Height in device units          */
  1634. #define PHYSICALOFFSETX 112 /* Physical Printable Area x margin         */
  1635. #define PHYSICALOFFSETY 113 /* Physical Printable Area y margin         */
  1636. #define SCALINGFACTORX  114 /* Scaling factor x                         */
  1637. #define SCALINGFACTORY  115 /* Scaling factor y                         */
  1638.  
  1639. // Display driver specific
  1640.  
  1641. #define VREFRESH        116  /* Current vertical refresh rate of the    */
  1642.                              /* display device (for displays only) in Hz*/
  1643. #define DESKTOPVERTRES  117  /* Horizontal width of entire desktop in   */
  1644.                              /* pixels                                  */
  1645. #define DESKTOPHORZRES  118  /* Vertical height of entire desktop in    */
  1646.                              /* pixels                                  */
  1647. #define BLTALIGNMENT    119  /* Preferred blt alignment                 */
  1648.  
  1649. #ifndef NOGDICAPMASKS
  1650.  
  1651. /* Device Capability Masks: */
  1652.  
  1653. /* Device Technologies */
  1654. #define DT_PLOTTER          0   /* Vector plotter                   */
  1655. #define DT_RASDISPLAY       1   /* Raster display                   */
  1656. #define DT_RASPRINTER       2   /* Raster printer                   */
  1657. #define DT_RASCAMERA        3   /* Raster camera                    */
  1658. #define DT_CHARSTREAM       4   /* Character-stream, PLP            */
  1659. #define DT_METAFILE         5   /* Metafile, VDM                    */
  1660. #define DT_DISPFILE         6   /* Display-file                     */
  1661.  
  1662. /* Curve Capabilities */
  1663. #define CC_NONE             0   /* Curves not supported             */
  1664. #define CC_CIRCLES          1   /* Can do circles                   */
  1665. #define CC_PIE              2   /* Can do pie wedges                */
  1666. #define CC_CHORD            4   /* Can do chord arcs                */
  1667. #define CC_ELLIPSES         8   /* Can do ellipese                  */
  1668. #define CC_WIDE             16  /* Can do wide lines                */
  1669. #define CC_STYLED           32  /* Can do styled lines              */
  1670. #define CC_WIDESTYLED       64  /* Can do wide styled lines         */
  1671. #define CC_INTERIORS        128 /* Can do interiors                 */
  1672. #define CC_ROUNDRECT        256 /*                                  */
  1673.  
  1674. /* Line Capabilities */
  1675. #define LC_NONE             0   /* Lines not supported              */
  1676. #define LC_POLYLINE         2   /* Can do polylines                 */
  1677. #define LC_MARKER           4   /* Can do markers                   */
  1678. #define LC_POLYMARKER       8   /* Can do polymarkers               */
  1679. #define LC_WIDE             16  /* Can do wide lines                */
  1680. #define LC_STYLED           32  /* Can do styled lines              */
  1681. #define LC_WIDESTYLED       64  /* Can do wide styled lines         */
  1682. #define LC_INTERIORS        128 /* Can do interiors                 */
  1683.  
  1684. /* Polygonal Capabilities */
  1685. #define PC_NONE             0   /* Polygonals not supported         */
  1686. #define PC_POLYGON          1   /* Can do polygons                  */
  1687. #define PC_RECTANGLE        2   /* Can do rectangles                */
  1688. #define PC_WINDPOLYGON      4   /* Can do winding polygons          */
  1689. #define PC_TRAPEZOID        4   /* Can do trapezoids                */
  1690. #define PC_SCANLINE         8   /* Can do scanlines                 */
  1691. #define PC_WIDE             16  /* Can do wide borders              */
  1692. #define PC_STYLED           32  /* Can do styled borders            */
  1693. #define PC_WIDESTYLED       64  /* Can do wide styled borders       */
  1694. #define PC_INTERIORS        128 /* Can do interiors                 */
  1695. #define PC_POLYPOLYGON      256 /* Can do polypolygons              */
  1696. #define PC_PATHS            512 /* Can do paths                     */
  1697.  
  1698. /* Clipping Capabilities */
  1699. #define CP_NONE             0   /* No clipping of output            */
  1700. #define CP_RECTANGLE        1   /* Output clipped to rects          */
  1701. #define CP_REGION           2   /* obsolete                         */
  1702.  
  1703. /* Text Capabilities */
  1704. #define TC_OP_CHARACTER     0x00000001  /* Can do OutputPrecision   CHARACTER      */
  1705. #define TC_OP_STROKE        0x00000002  /* Can do OutputPrecision   STROKE         */
  1706. #define TC_CP_STROKE        0x00000004  /* Can do ClipPrecision     STROKE         */
  1707. #define TC_CR_90            0x00000008  /* Can do CharRotAbility    90             */
  1708. #define TC_CR_ANY           0x00000010  /* Can do CharRotAbility    ANY            */
  1709. #define TC_SF_X_YINDEP      0x00000020  /* Can do ScaleFreedom      X_YINDEPENDENT */
  1710. #define TC_SA_DOUBLE        0x00000040  /* Can do ScaleAbility      DOUBLE         */
  1711. #define TC_SA_INTEGER       0x00000080  /* Can do ScaleAbility      INTEGER        */
  1712. #define TC_SA_CONTIN        0x00000100  /* Can do ScaleAbility      CONTINUOUS     */
  1713. #define TC_EA_DOUBLE        0x00000200  /* Can do EmboldenAbility   DOUBLE         */
  1714. #define TC_IA_ABLE          0x00000400  /* Can do ItalisizeAbility  ABLE           */
  1715. #define TC_UA_ABLE          0x00000800  /* Can do UnderlineAbility  ABLE           */
  1716. #define TC_SO_ABLE          0x00001000  /* Can do StrikeOutAbility  ABLE           */
  1717. #define TC_RA_ABLE          0x00002000  /* Can do RasterFontAble    ABLE           */
  1718. #define TC_VA_ABLE          0x00004000  /* Can do VectorFontAble    ABLE           */
  1719. #define TC_RESERVED         0x00008000
  1720. #define TC_SCROLLBLT        0x00010000  /* Don't do text scroll with blt           */
  1721.  
  1722. #endif /* NOGDICAPMASKS */
  1723.  
  1724. /* Raster Capabilities */
  1725. #define RC_NONE
  1726. #define RC_BITBLT           1       /* Can do standard BLT.             */
  1727. #define RC_BANDING          2       /* Device requires banding support  */
  1728. #define RC_SCALING          4       /* Device requires scaling support  */
  1729. #define RC_BITMAP64         8       /* Device can support >64K bitmap   */
  1730. #define RC_GDI20_OUTPUT     0x0010      /* has 2.0 output calls         */
  1731. #define RC_GDI20_STATE      0x0020
  1732. #define RC_SAVEBITMAP       0x0040
  1733. #define RC_DI_BITMAP        0x0080      /* supports DIB to memory       */
  1734. #define RC_PALETTE          0x0100      /* supports a palette           */
  1735. #define RC_DIBTODEV         0x0200      /* supports DIBitsToDevice      */
  1736. #define RC_BIGFONT          0x0400      /* supports >64K fonts          */
  1737. #define RC_STRETCHBLT       0x0800      /* supports StretchBlt          */
  1738. #define RC_FLOODFILL        0x1000      /* supports FloodFill           */
  1739. #define RC_STRETCHDIB       0x2000      /* supports StretchDIBits       */
  1740. #define RC_OP_DX_OUTPUT     0x4000
  1741. #define RC_DEVBITS          0x8000
  1742.  
  1743. #if(WINVER >= 0x0500)
  1744.  
  1745. /* Shading and blending caps                */
  1746. #define SB_NONE             0x00000000
  1747. #define SB_CONST_ALPHA      0x00000001
  1748. #define SB_PIXEL_ALPHA      0x00000002
  1749. #define SB_PREMULT_ALPHA    0x00000004
  1750.  
  1751. #define SB_GRAD_RECT        0x00000010
  1752. #define SB_GRAD_TRI         0x00000020
  1753.  
  1754. #endif /* WINVER >= 0x0500 */
  1755.  
  1756.  
  1757. /* DIB color table identifiers */
  1758.  
  1759. #define DIB_RGB_COLORS      0 /* color table in RGBs */
  1760. #define DIB_PAL_COLORS      1 /* color table in palette indices */
  1761.  
  1762. /* constants for Get/SetSystemPaletteUse() */
  1763.  
  1764. #define SYSPAL_ERROR    0
  1765. #define SYSPAL_STATIC   1
  1766. #define SYSPAL_NOSTATIC 2
  1767. #define SYSPAL_NOSTATIC256 3
  1768.  
  1769. /* constants for CreateDIBitmap */
  1770. #define CBM_INIT        0x04L   /* initialize bitmap */
  1771.  
  1772. /* ExtFloodFill style flags */
  1773. #define  FLOODFILLBORDER   0
  1774. #define  FLOODFILLSURFACE  1
  1775.  
  1776. /* size of a device name string */
  1777. #define CCHDEVICENAME 32
  1778.  
  1779. /* size of a form name string */
  1780. #define CCHFORMNAME 32
  1781.  
  1782. typedef struct _devicemodeA {
  1783.     BYTE   dmDeviceName[CCHDEVICENAME];
  1784.     WORD dmSpecVersion;
  1785.     WORD dmDriverVersion;
  1786.     WORD dmSize;
  1787.     WORD dmDriverExtra;
  1788.     DWORD dmFields;
  1789.     union {
  1790.       struct {
  1791.         short dmOrientation;
  1792.         short dmPaperSize;
  1793.         short dmPaperLength;
  1794.         short dmPaperWidth;
  1795.       };
  1796.       POINTL dmPosition;
  1797.     };
  1798.     short dmScale;
  1799.     short dmCopies;
  1800.     short dmDefaultSource;
  1801.     short dmPrintQuality;
  1802.     short dmColor;
  1803.     short dmDuplex;
  1804.     short dmYResolution;
  1805.     short dmTTOption;
  1806.     short dmCollate;
  1807.     BYTE   dmFormName[CCHFORMNAME];
  1808.     WORD   dmLogPixels;
  1809.     DWORD  dmBitsPerPel;
  1810.     DWORD  dmPelsWidth;
  1811.     DWORD  dmPelsHeight;
  1812.     DWORD  dmDisplayFlags;
  1813.     DWORD  dmDisplayFrequency;
  1814. #if(WINVER >= 0x0400)
  1815.     DWORD  dmICMMethod;
  1816.     DWORD  dmICMIntent;
  1817.     DWORD  dmMediaType;
  1818.     DWORD  dmDitherType;
  1819.     DWORD  dmReserved1;
  1820.     DWORD  dmReserved2;
  1821. #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  1822.     DWORD  dmPanningWidth;
  1823.     DWORD  dmPanningHeight;
  1824. #endif
  1825. #endif /* WINVER >= 0x0400 */
  1826. } DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA;
  1827. typedef struct _devicemodeW {
  1828.     WCHAR  dmDeviceName[CCHDEVICENAME];
  1829.     WORD dmSpecVersion;
  1830.     WORD dmDriverVersion;
  1831.     WORD dmSize;
  1832.     WORD dmDriverExtra;
  1833.     DWORD dmFields;
  1834.     union {
  1835.       struct {
  1836.         short dmOrientation;
  1837.         short dmPaperSize;
  1838.         short dmPaperLength;
  1839.         short dmPaperWidth;
  1840.       };
  1841.       POINTL dmPosition;
  1842.     };
  1843.     short dmScale;
  1844.     short dmCopies;
  1845.     short dmDefaultSource;
  1846.     short dmPrintQuality;
  1847.     short dmColor;
  1848.     short dmDuplex;
  1849.     short dmYResolution;
  1850.     short dmTTOption;
  1851.     short dmCollate;
  1852.     WCHAR  dmFormName[CCHFORMNAME];
  1853.     WORD   dmLogPixels;
  1854.     DWORD  dmBitsPerPel;
  1855.     DWORD  dmPelsWidth;
  1856.     DWORD  dmPelsHeight;
  1857.     DWORD  dmDisplayFlags;
  1858.     DWORD  dmDisplayFrequency;
  1859. #if(WINVER >= 0x0400)
  1860.     DWORD  dmICMMethod;
  1861.     DWORD  dmICMIntent;
  1862.     DWORD  dmMediaType;
  1863.     DWORD  dmDitherType;
  1864.     DWORD  dmReserved1;
  1865.     DWORD  dmReserved2;
  1866. #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  1867.     DWORD  dmPanningWidth;
  1868.     DWORD  dmPanningHeight;
  1869. #endif
  1870. #endif /* WINVER >= 0x0400 */
  1871. } DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;
  1872. #ifdef UNICODE
  1873. typedef DEVMODEW DEVMODE;
  1874. typedef PDEVMODEW PDEVMODE;
  1875. typedef NPDEVMODEW NPDEVMODE;
  1876. typedef LPDEVMODEW LPDEVMODE;
  1877. #else
  1878. typedef DEVMODEA DEVMODE;
  1879. typedef PDEVMODEA PDEVMODE;
  1880. typedef NPDEVMODEA NPDEVMODE;
  1881. typedef LPDEVMODEA LPDEVMODE;
  1882. #endif // UNICODE
  1883.  
  1884. /* current version of specification */
  1885. #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  1886. #define DM_SPECVERSION 0x0401
  1887. #elif (WINVER >= 0x0400)
  1888. #define DM_SPECVERSION 0x0400
  1889. #else
  1890. #define DM_SPECVERSION 0x0320
  1891. #endif /* WINVER */
  1892.  
  1893. /* field selection bits */
  1894. #define DM_ORIENTATION      0x00000001L
  1895. #define DM_PAPERSIZE        0x00000002L
  1896. #define DM_PAPERLENGTH      0x00000004L
  1897. #define DM_PAPERWIDTH       0x00000008L
  1898. #define DM_SCALE            0x00000010L
  1899. #if(WINVER >= 0x0500)
  1900. #define DM_POSITION         0x00000020L
  1901. #endif /* WINVER >= 0x0500 */
  1902. #define DM_COPIES           0x00000100L
  1903. #define DM_DEFAULTSOURCE    0x00000200L
  1904. #define DM_PRINTQUALITY     0x00000400L
  1905. #define DM_COLOR            0x00000800L
  1906. #define DM_DUPLEX           0x00001000L
  1907. #define DM_YRESOLUTION      0x00002000L
  1908. #define DM_TTOPTION         0x00004000L
  1909. #define DM_COLLATE          0x00008000L
  1910. #define DM_FORMNAME         0x00010000L
  1911. #define DM_LOGPIXELS        0x00020000L
  1912. #define DM_BITSPERPEL       0x00040000L
  1913. #define DM_PELSWIDTH        0x00080000L
  1914. #define DM_PELSHEIGHT       0x00100000L
  1915. #define DM_DISPLAYFLAGS     0x00200000L
  1916. #define DM_DISPLAYFREQUENCY 0x00400000L
  1917. #if(WINVER >= 0x0400)
  1918. #define DM_ICMMETHOD        0x00800000L
  1919. #define DM_ICMINTENT        0x01000000L
  1920. #define DM_MEDIATYPE        0x02000000L
  1921. #define DM_DITHERTYPE       0x04000000L
  1922. #define DM_PANNINGWIDTH     0x08000000L
  1923. #define DM_PANNINGHEIGHT    0x10000000L
  1924. #endif /* WINVER >= 0x0400 */
  1925.  
  1926. /* orientation selections */
  1927. #define DMORIENT_PORTRAIT   1
  1928. #define DMORIENT_LANDSCAPE  2
  1929.  
  1930. /* paper selections */
  1931. #define DMPAPER_FIRST                DMPAPER_LETTER
  1932. #define DMPAPER_LETTER               1  /* Letter 8 1/2 x 11 in               */
  1933. #define DMPAPER_LETTERSMALL          2  /* Letter Small 8 1/2 x 11 in         */
  1934. #define DMPAPER_TABLOID              3  /* Tabloid 11 x 17 in                 */
  1935. #define DMPAPER_LEDGER               4  /* Ledger 17 x 11 in                  */
  1936. #define DMPAPER_LEGAL                5  /* Legal 8 1/2 x 14 in                */
  1937. #define DMPAPER_STATEMENT            6  /* Statement 5 1/2 x 8 1/2 in         */
  1938. #define DMPAPER_EXECUTIVE            7  /* Executive 7 1/4 x 10 1/2 in        */
  1939. #define DMPAPER_A3                   8  /* A3 297 x 420 mm                    */
  1940. #define DMPAPER_A4                   9  /* A4 210 x 297 mm                    */
  1941. #define DMPAPER_A4SMALL             10  /* A4 Small 210 x 297 mm              */
  1942. #define DMPAPER_A5                  11  /* A5 148 x 210 mm                    */
  1943. #define DMPAPER_B4                  12  /* B4 (JIS) 250 x 354                 */
  1944. #define DMPAPER_B5                  13  /* B5 (JIS) 182 x 257 mm              */
  1945. #define DMPAPER_FOLIO               14  /* Folio 8 1/2 x 13 in                */
  1946. #define DMPAPER_QUARTO              15  /* Quarto 215 x 275 mm                */
  1947. #define DMPAPER_10X14               16  /* 10x14 in                           */
  1948. #define DMPAPER_11X17               17  /* 11x17 in                           */
  1949. #define DMPAPER_NOTE                18  /* Note 8 1/2 x 11 in                 */
  1950. #define DMPAPER_ENV_9               19  /* Envelope #9 3 7/8 x 8 7/8          */
  1951. #define DMPAPER_ENV_10              20  /* Envelope #10 4 1/8 x 9 1/2         */
  1952. #define DMPAPER_ENV_11              21  /* Envelope #11 4 1/2 x 10 3/8        */
  1953. #define DMPAPER_ENV_12              22  /* Envelope #12 4 \276 x 11           */
  1954. #define DMPAPER_ENV_14              23  /* Envelope #14 5 x 11 1/2            */
  1955. #define DMPAPER_CSHEET              24  /* C size sheet                       */
  1956. #define DMPAPER_DSHEET              25  /* D size sheet                       */
  1957. #define DMPAPER_ESHEET              26  /* E size sheet                       */
  1958. #define DMPAPER_ENV_DL              27  /* Envelope DL 110 x 220mm            */
  1959. #define DMPAPER_ENV_C5              28  /* Envelope C5 162 x 229 mm           */
  1960. #define DMPAPER_ENV_C3              29  /* Envelope C3  324 x 458 mm          */
  1961. #define DMPAPER_ENV_C4              30  /* Envelope C4  229 x 324 mm          */
  1962. #define DMPAPER_ENV_C6              31  /* Envelope C6  114 x 162 mm          */
  1963. #define DMPAPER_ENV_C65             32  /* Envelope C65 114 x 229 mm          */
  1964. #define DMPAPER_ENV_B4              33  /* Envelope B4  250 x 353 mm          */
  1965. #define DMPAPER_ENV_B5              34  /* Envelope B5  176 x 250 mm          */
  1966. #define DMPAPER_ENV_B6              35  /* Envelope B6  176 x 125 mm          */
  1967. #define DMPAPER_ENV_ITALY           36  /* Envelope 110 x 230 mm              */
  1968. #define DMPAPER_ENV_MONARCH         37  /* Envelope Monarch 3.875 x 7.5 in    */
  1969. #define DMPAPER_ENV_PERSONAL        38  /* 6 3/4 Envelope 3 5/8 x 6 1/2 in    */
  1970. #define DMPAPER_FANFOLD_US          39  /* US Std Fanfold 14 7/8 x 11 in      */
  1971. #define DMPAPER_FANFOLD_STD_GERMAN  40  /* German Std Fanfold 8 1/2 x 12 in   */
  1972. #define DMPAPER_FANFOLD_LGL_GERMAN  41  /* German Legal Fanfold 8 1/2 x 13 in */
  1973. #if(WINVER >= 0x0400)
  1974. #define DMPAPER_ISO_B4              42  /* B4 (ISO) 250 x 353 mm              */
  1975. #define DMPAPER_JAPANESE_POSTCARD   43  /* Japanese Postcard 100 x 148 mm     */
  1976. #define DMPAPER_9X11                44  /* 9 x 11 in                          */
  1977. #define DMPAPER_10X11               45  /* 10 x 11 in                         */
  1978. #define DMPAPER_15X11               46  /* 15 x 11 in                         */
  1979. #define DMPAPER_ENV_INVITE          47  /* Envelope Invite 220 x 220 mm       */
  1980. #define DMPAPER_RESERVED_48         48  /* RESERVED--DO NOT USE               */
  1981. #define DMPAPER_RESERVED_49         49  /* RESERVED--DO NOT USE               */
  1982. #define DMPAPER_LETTER_EXTRA        50  /* Letter Extra 9 \275 x 12 in        */
  1983. #define DMPAPER_LEGAL_EXTRA         51  /* Legal Extra 9 \275 x 15 in         */
  1984. #define DMPAPER_TABLOID_EXTRA       52  /* Tabloid Extra 11.69 x 18 in        */
  1985. #define DMPAPER_A4_EXTRA            53  /* A4 Extra 9.27 x 12.69 in           */
  1986. #define DMPAPER_LETTER_TRANSVERSE   54  /* Letter Transverse 8 \275 x 11 in   */
  1987. #define DMPAPER_A4_TRANSVERSE       55  /* A4 Transverse 210 x 297 mm         */
  1988. #define DMPAPER_LETTER_EXTRA_TRANSVERSE 56 /* Letter Extra Transverse 9\275 x 12 in */
  1989. #define DMPAPER_A_PLUS              57  /* SuperA/SuperA/A4 227 x 356 mm      */
  1990. #define DMPAPER_B_PLUS              58  /* SuperB/SuperB/A3 305 x 487 mm      */
  1991. #define DMPAPER_LETTER_PLUS         59  /* Letter Plus 8.5 x 12.69 in         */
  1992. #define DMPAPER_A4_PLUS             60  /* A4 Plus 210 x 330 mm               */
  1993. #define DMPAPER_A5_TRANSVERSE       61  /* A5 Transverse 148 x 210 mm         */
  1994. #define DMPAPER_B5_TRANSVERSE       62  /* B5 (JIS) Transverse 182 x 257 mm   */
  1995. #define DMPAPER_A3_EXTRA            63  /* A3 Extra 322 x 445 mm              */
  1996. #define DMPAPER_A5_EXTRA            64  /* A5 Extra 174 x 235 mm              */
  1997. #define DMPAPER_B5_EXTRA            65  /* B5 (ISO) Extra 201 x 276 mm        */
  1998. #define DMPAPER_A2                  66  /* A2 420 x 594 mm                    */
  1999. #define DMPAPER_A3_TRANSVERSE       67  /* A3 Transverse 297 x 420 mm         */
  2000. #define DMPAPER_A3_EXTRA_TRANSVERSE 68  /* A3 Extra Transverse 322 x 445 mm   */
  2001. #endif /* WINVER >= 0x0400 */
  2002.  
  2003. #if(WINVER >= 0x0500)
  2004. #define DMPAPER_DBL_JAPANESE_POSTCARD 69 /* Japanese Double Postcard 200 x 148 mm */
  2005. #define DMPAPER_A6                  70  /* A6 105 x 148 mm                 */
  2006. #define DMPAPER_JENV_KAKU2          71  /* Japanese Envelope Kaku #2       */
  2007. #define DMPAPER_JENV_KAKU3          72  /* Japanese Envelope Kaku #3       */
  2008. #define DMPAPER_JENV_CHOU3          73  /* Japanese Envelope Chou #3       */
  2009. #define DMPAPER_JENV_CHOU4          74  /* Japanese Envelope Chou #4       */
  2010. #define DMPAPER_LETTER_ROTATED      75  /* Letter Rotated 11 x 8 1/2 11 in */
  2011. #define DMPAPER_A3_ROTATED          76  /* A3 Rotated 420 x 297 mm         */
  2012. #define DMPAPER_A4_ROTATED          77  /* A4 Rotated 297 x 210 mm         */
  2013. #define DMPAPER_A5_ROTATED          78  /* A5 Rotated 210 x 148 mm         */
  2014. #define DMPAPER_B4_JIS_ROTATED      79  /* B4 (JIS) Rotated 364 x 257 mm   */
  2015. #define DMPAPER_B5_JIS_ROTATED      80  /* B5 (JIS) Rotated 257 x 182 mm   */
  2016. #define DMPAPER_JAPANESE_POSTCARD_ROTATED 81 /* Japanese Postcard Rotated 148 x 100 mm */
  2017. #define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 /* Double Japanese Postcard Rotated 148 x 200 mm */
  2018. #define DMPAPER_A6_ROTATED          83  /* A6 Rotated 148 x 105 mm         */
  2019. #define DMPAPER_JENV_KAKU2_ROTATED  84  /* Japanese Envelope Kaku #2 Rotated */
  2020. #define DMPAPER_JENV_KAKU3_ROTATED  85  /* Japanese Envelope Kaku #3 Rotated */
  2021. #define DMPAPER_JENV_CHOU3_ROTATED  86  /* Japanese Envelope Chou #3 Rotated */
  2022. #define DMPAPER_JENV_CHOU4_ROTATED  87  /* Japanese Envelope Chou #4 Rotated */
  2023. #define DMPAPER_B6_JIS              88  /* B6 (JIS) 128 x 182 mm           */
  2024. #define DMPAPER_B6_JIS_ROTATED      89  /* B6 (JIS) Rotated 182 x 128 mm   */
  2025. #define DMPAPER_12X11               90  /* 12 x 11 in                      */
  2026. #define DMPAPER_JENV_YOU4           91  /* Japanese Envelope You #4        */
  2027. #define DMPAPER_JENV_YOU4_ROTATED   92  /* Japanese Envelope You #4 Rotated*/
  2028. #define DMPAPER_P16K                93  /* PRC 16K 146 x 215 mm            */
  2029. #define DMPAPER_P32K                94  /* PRC 32K 97 x 151 mm             */
  2030. #define DMPAPER_P32KBIG             95  /* PRC 32K(Big) 97 x 151 mm        */
  2031. #define DMPAPER_PENV_1              96  /* PRC Envelope #1 102 x 165 mm    */
  2032. #define DMPAPER_PENV_2              97  /* PRC Envelope #2 102 x 176 mm    */
  2033. #define DMPAPER_PENV_3              98  /* PRC Envelope #3 125 x 176 mm    */
  2034. #define DMPAPER_PENV_4              99  /* PRC Envelope #4 110 x 208 mm    */
  2035. #define DMPAPER_PENV_5              100 /* PRC Envelope #5 110 x 220 mm    */
  2036. #define DMPAPER_PENV_6              101 /* PRC Envelope #6 120 x 230 mm    */
  2037. #define DMPAPER_PENV_7              102 /* PRC Envelope #7 160 x 230 mm    */
  2038. #define DMPAPER_PENV_8              103 /* PRC Envelope #8 120 x 309 mm    */
  2039. #define DMPAPER_PENV_9              104 /* PRC Envelope #9 229 x 324 mm    */
  2040. #define DMPAPER_PENV_10             105 /* PRC Envelope #10 324 x 458 mm   */
  2041. #define DMPAPER_P16K_ROTATED        106 /* PRC 16K Rotated                 */
  2042. #define DMPAPER_P32K_ROTATED        107 /* PRC 32K Rotated                 */
  2043. #define DMPAPER_P32KBIG_ROTATED     108 /* PRC 32K(Big) Rotated            */
  2044. #define DMPAPER_PENV_1_ROTATED      109 /* PRC Envelope #1 Rotated 165 x 102 mm */
  2045. #define DMPAPER_PENV_2_ROTATED      110 /* PRC Envelope #2 Rotated 176 x 102 mm */
  2046. #define DMPAPER_PENV_3_ROTATED      111 /* PRC Envelope #3 Rotated 176 x 125 mm */
  2047. #define DMPAPER_PENV_4_ROTATED      112 /* PRC Envelope #4 Rotated 208 x 110 mm */
  2048. #define DMPAPER_PENV_5_ROTATED      113 /* PRC Envelope #5 Rotated 220 x 110 mm */
  2049. #define DMPAPER_PENV_6_ROTATED      114 /* PRC Envelope #6 Rotated 230 x 120 mm */
  2050. #define DMPAPER_PENV_7_ROTATED      115 /* PRC Envelope #7 Rotated 230 x 160 mm */
  2051. #define DMPAPER_PENV_8_ROTATED      116 /* PRC Envelope #8 Rotated 309 x 120 mm */
  2052. #define DMPAPER_PENV_9_ROTATED      117 /* PRC Envelope #9 Rotated 324 x 229 mm */
  2053. #define DMPAPER_PENV_10_ROTATED     118 /* PRC Envelope #10 Rotated 458 x 324 mm */
  2054. #endif /* WINVER >= 0x0500 */
  2055.  
  2056. #if (WINVER >= 0x0500)
  2057. #define DMPAPER_LAST                DMPAPER_PENV_10_ROTATED
  2058. #elif (WINVER >= 0x0400)
  2059. #define DMPAPER_LAST                DMPAPER_A3_EXTRA_TRANSVERSE
  2060. #else
  2061. #define DMPAPER_LAST                DMPAPER_FANFOLD_LGL_GERMAN
  2062. #endif
  2063.  
  2064. #define DMPAPER_USER                256
  2065.  
  2066. /* bin selections */
  2067. #define DMBIN_FIRST         DMBIN_UPPER
  2068. #define DMBIN_UPPER         1
  2069. #define DMBIN_ONLYONE       1
  2070. #define DMBIN_LOWER         2
  2071. #define DMBIN_MIDDLE        3
  2072. #define DMBIN_MANUAL        4
  2073. #define DMBIN_ENVELOPE      5
  2074. #define DMBIN_ENVMANUAL     6
  2075. #define DMBIN_AUTO          7
  2076. #define DMBIN_TRACTOR       8
  2077. #define DMBIN_SMALLFMT      9
  2078. #define DMBIN_LARGEFMT      10
  2079. #define DMBIN_LARGECAPACITY 11
  2080. #define DMBIN_CASSETTE      14
  2081. #define DMBIN_FORMSOURCE    15
  2082. #define DMBIN_LAST          DMBIN_FORMSOURCE
  2083.  
  2084. #define DMBIN_USER          256     /* device specific bins start here */
  2085.  
  2086. /* print qualities */
  2087. #define DMRES_DRAFT         (-1)
  2088. #define DMRES_LOW           (-2)
  2089. #define DMRES_MEDIUM        (-3)
  2090. #define DMRES_HIGH          (-4)
  2091.  
  2092. /* color enable/disable for color printers */
  2093. #define DMCOLOR_MONOCHROME  1
  2094. #define DMCOLOR_COLOR       2
  2095.  
  2096. /* duplex enable */
  2097. #define DMDUP_SIMPLEX    1
  2098. #define DMDUP_VERTICAL   2
  2099. #define DMDUP_HORIZONTAL 3
  2100.  
  2101. /* TrueType options */
  2102. #define DMTT_BITMAP     1       /* print TT fonts as graphics */
  2103. #define DMTT_DOWNLOAD   2       /* download TT fonts as soft fonts */
  2104. #define DMTT_SUBDEV     3       /* substitute device fonts for TT fonts */
  2105. #if(WINVER >= 0x0400)
  2106. #define DMTT_DOWNLOAD_OUTLINE 4 /* download TT fonts as outline soft fonts */
  2107. #endif /* WINVER >= 0x0400 */
  2108.  
  2109. /* Collation selections */
  2110. #define DMCOLLATE_FALSE  0
  2111. #define DMCOLLATE_TRUE   1
  2112.  
  2113. /* DEVMODE dmDisplayFlags flags */
  2114.  
  2115. // #define DM_GRAYSCALE            0x00000001 /* This flag is no longer valid */
  2116. // #define DM_INTERLACED           0x00000002 /* This flag is no longer valid */
  2117. #define DMDISPLAYFLAGS_TEXTMODE 0x00000004
  2118.  
  2119. #if(WINVER >= 0x0400)
  2120. /* ICM methods */
  2121. #define DMICMMETHOD_NONE    1   /* ICM disabled */
  2122. #define DMICMMETHOD_SYSTEM  2   /* ICM handled by system */
  2123. #define DMICMMETHOD_DRIVER  3   /* ICM handled by driver */
  2124. #define DMICMMETHOD_DEVICE  4   /* ICM handled by device */
  2125.  
  2126. #define DMICMMETHOD_USER  256   /* Device-specific methods start here */
  2127.  
  2128. /* ICM Intents */
  2129. #define DMICM_SATURATE          1   /* Maximize color saturation */
  2130. #define DMICM_CONTRAST          2   /* Maximize color contrast */
  2131. #define DMICM_COLORIMETRIC       3   /* Use specific color metric */
  2132. #define DMICM_ABS_COLORIMETRIC   4   /* Use specific color metric */
  2133.  
  2134. #define DMICM_USER        256   /* Device-specific intents start here */
  2135.  
  2136. /* Media types */
  2137.  
  2138. #define DMMEDIA_STANDARD      1   /* Standard paper */
  2139. #define DMMEDIA_TRANSPARENCY  2   /* Transparency */
  2140. #define DMMEDIA_GLOSSY        3   /* Glossy paper */
  2141.  
  2142. #define DMMEDIA_USER        256   /* Device-specific media start here */
  2143.  
  2144. /* Dither types */
  2145. #define DMDITHER_NONE       1      /* No dithering */
  2146. #define DMDITHER_COARSE     2      /* Dither with a coarse brush */
  2147. #define DMDITHER_FINE       3      /* Dither with a fine brush */
  2148. #define DMDITHER_LINEART    4      /* LineArt dithering */
  2149. #define DMDITHER_ERRORDIFFUSION 5  /* LineArt dithering */
  2150. #define DMDITHER_RESERVED6      6      /* LineArt dithering */
  2151. #define DMDITHER_RESERVED7      7      /* LineArt dithering */
  2152. #define DMDITHER_RESERVED8      8      /* LineArt dithering */
  2153. #define DMDITHER_RESERVED9      9      /* LineArt dithering */
  2154. #define DMDITHER_GRAYSCALE  10     /* Device does grayscaling */
  2155.  
  2156. #define DMDITHER_USER     256   /* Device-specific dithers start here */
  2157. #endif /* WINVER >= 0x0400 */
  2158.  
  2159. typedef struct _DISPLAY_DEVICEA {
  2160.     DWORD  cb;
  2161.     BYTE   DeviceName[32];
  2162.     BYTE   DeviceString[128];
  2163.     DWORD  StateFlags;
  2164. } DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA;
  2165. typedef struct _DISPLAY_DEVICEW {
  2166.     DWORD  cb;
  2167.     WCHAR  DeviceName[32];
  2168.     WCHAR  DeviceString[128];
  2169.     DWORD  StateFlags;
  2170. } DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW;
  2171. #ifdef UNICODE
  2172. typedef DISPLAY_DEVICEW DISPLAY_DEVICE;
  2173. typedef PDISPLAY_DEVICEW PDISPLAY_DEVICE;
  2174. typedef LPDISPLAY_DEVICEW LPDISPLAY_DEVICE;
  2175. #else
  2176. typedef DISPLAY_DEVICEA DISPLAY_DEVICE;
  2177. typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE;
  2178. typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE;
  2179. #endif // UNICODE
  2180.  
  2181. #define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
  2182. #define DISPLAY_DEVICE_MULTI_DRIVER        0x00000002
  2183. #define DISPLAY_DEVICE_PRIMARY_DEVICE      0x00000004
  2184. #define DISPLAY_DEVICE_MIRRORING_DRIVER    0x00000008
  2185. #define DISPLAY_DEVICE_VGA_COMPATIBLE      0x00000010
  2186.  
  2187. /* GetRegionData/ExtCreateRegion */
  2188.  
  2189. #define RDH_RECTANGLES  1
  2190.  
  2191. typedef struct _RGNDATAHEADER {
  2192.     DWORD   dwSize;
  2193.     DWORD   iType;
  2194.     DWORD   nCount;
  2195.     DWORD   nRgnSize;
  2196.     RECT    rcBound;
  2197. } RGNDATAHEADER, *PRGNDATAHEADER;
  2198.  
  2199. typedef struct _RGNDATA {
  2200.     RGNDATAHEADER   rdh;
  2201.     char            Buffer[1];
  2202. } RGNDATA, *PRGNDATA, NEAR *NPRGNDATA, FAR *LPRGNDATA;
  2203.  
  2204.  
  2205. typedef struct _ABC {
  2206.     int     abcA;
  2207.     UINT    abcB;
  2208.     int     abcC;
  2209. } ABC, *PABC, NEAR *NPABC, FAR *LPABC;
  2210.  
  2211. typedef struct _ABCFLOAT {
  2212.     FLOAT   abcfA;
  2213.     FLOAT   abcfB;
  2214.     FLOAT   abcfC;
  2215. } ABCFLOAT, *PABCFLOAT, NEAR *NPABCFLOAT, FAR *LPABCFLOAT;
  2216.  
  2217. #ifndef NOTEXTMETRIC
  2218.  
  2219. #ifdef _MAC
  2220. #include "pshpack4.h"
  2221. #endif
  2222. typedef struct _OUTLINETEXTMETRICA {
  2223.     UINT    otmSize;
  2224.     TEXTMETRICA otmTextMetrics;
  2225.     BYTE    otmFiller;
  2226.     PANOSE  otmPanoseNumber;
  2227.     UINT    otmfsSelection;
  2228.     UINT    otmfsType;
  2229.      int    otmsCharSlopeRise;
  2230.      int    otmsCharSlopeRun;
  2231.      int    otmItalicAngle;
  2232.     UINT    otmEMSquare;
  2233.      int    otmAscent;
  2234.      int    otmDescent;
  2235.     UINT    otmLineGap;
  2236.     UINT    otmsCapEmHeight;
  2237.     UINT    otmsXHeight;
  2238.     RECT    otmrcFontBox;
  2239.      int    otmMacAscent;
  2240.      int    otmMacDescent;
  2241.     UINT    otmMacLineGap;
  2242.     UINT    otmusMinimumPPEM;
  2243.     POINT   otmptSubscriptSize;
  2244.     POINT   otmptSubscriptOffset;
  2245.     POINT   otmptSuperscriptSize;
  2246.     POINT   otmptSuperscriptOffset;
  2247.     UINT    otmsStrikeoutSize;
  2248.      int    otmsStrikeoutPosition;
  2249.      int    otmsUnderscoreSize;
  2250.      int    otmsUnderscorePosition;
  2251.     PSTR    otmpFamilyName;
  2252.     PSTR    otmpFaceName;
  2253.     PSTR    otmpStyleName;
  2254.     PSTR    otmpFullName;
  2255. } OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, NEAR *NPOUTLINETEXTMETRICA, FAR *LPOUTLINETEXTMETRICA;
  2256. typedef struct _OUTLINETEXTMETRICW {
  2257.     UINT    otmSize;
  2258.     TEXTMETRICW otmTextMetrics;
  2259.     BYTE    otmFiller;
  2260.     PANOSE  otmPanoseNumber;
  2261.     UINT    otmfsSelection;
  2262.     UINT    otmfsType;
  2263.      int    otmsCharSlopeRise;
  2264.      int    otmsCharSlopeRun;
  2265.      int    otmItalicAngle;
  2266.     UINT    otmEMSquare;
  2267.      int    otmAscent;
  2268.      int    otmDescent;
  2269.     UINT    otmLineGap;
  2270.     UINT    otmsCapEmHeight;
  2271.     UINT    otmsXHeight;
  2272.     RECT    otmrcFontBox;
  2273.      int    otmMacAscent;
  2274.      int    otmMacDescent;
  2275.     UINT    otmMacLineGap;
  2276.     UINT    otmusMinimumPPEM;
  2277.     POINT   otmptSubscriptSize;
  2278.     POINT   otmptSubscriptOffset;
  2279.     POINT   otmptSuperscriptSize;
  2280.     POINT   otmptSuperscriptOffset;
  2281.     UINT    otmsStrikeoutSize;
  2282.      int    otmsStrikeoutPosition;
  2283.      int    otmsUnderscoreSize;
  2284.      int    otmsUnderscorePosition;
  2285.     PSTR    otmpFamilyName;
  2286.     PSTR    otmpFaceName;
  2287.     PSTR    otmpStyleName;
  2288.     PSTR    otmpFullName;
  2289. } OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, NEAR *NPOUTLINETEXTMETRICW, FAR *LPOUTLINETEXTMETRICW;
  2290. #ifdef UNICODE
  2291. typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
  2292. typedef POUTLINETEXTMETRICW POUTLINETEXTMETRIC;
  2293. typedef NPOUTLINETEXTMETRICW NPOUTLINETEXTMETRIC;
  2294. typedef LPOUTLINETEXTMETRICW LPOUTLINETEXTMETRIC;
  2295. #else
  2296. typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
  2297. typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC;
  2298. typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC;
  2299. typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
  2300. #endif // UNICODE
  2301.  
  2302. #ifdef _MAC
  2303. #include "poppack.h"
  2304. #endif
  2305.  
  2306. #endif /* NOTEXTMETRIC */
  2307.  
  2308.  
  2309. typedef struct tagPOLYTEXTA
  2310. {
  2311.     int       x;
  2312.     int       y;
  2313.     UINT      n;
  2314.     LPCSTR    lpstr;
  2315.     UINT      uiFlags;
  2316.     RECT      rcl;
  2317.     int      *pdx;
  2318. } POLYTEXTA, *PPOLYTEXTA, NEAR *NPPOLYTEXTA, FAR *LPPOLYTEXTA;
  2319. typedef struct tagPOLYTEXTW
  2320. {
  2321.     int       x;
  2322.     int       y;
  2323.     UINT      n;
  2324.     LPCWSTR   lpstr;
  2325.     UINT      uiFlags;
  2326.     RECT      rcl;
  2327.     int      *pdx;
  2328. } POLYTEXTW, *PPOLYTEXTW, NEAR *NPPOLYTEXTW, FAR *LPPOLYTEXTW;
  2329. #ifdef UNICODE
  2330. typedef POLYTEXTW POLYTEXT;
  2331. typedef PPOLYTEXTW PPOLYTEXT;
  2332. typedef NPPOLYTEXTW NPPOLYTEXT;
  2333. typedef LPPOLYTEXTW LPPOLYTEXT;
  2334. #else
  2335. typedef POLYTEXTA POLYTEXT;
  2336. typedef PPOLYTEXTA PPOLYTEXT;
  2337. typedef NPPOLYTEXTA NPPOLYTEXT;
  2338. typedef LPPOLYTEXTA LPPOLYTEXT;
  2339. #endif // UNICODE
  2340.  
  2341. typedef struct _FIXED {
  2342. #ifndef _MAC
  2343.     WORD    fract;
  2344.     short   value;
  2345. #else
  2346.     short   value;
  2347.     WORD    fract;
  2348. #endif
  2349. } FIXED;
  2350.  
  2351.  
  2352. typedef struct _MAT2 {
  2353.      FIXED  eM11;
  2354.      FIXED  eM12;
  2355.      FIXED  eM21;
  2356.      FIXED  eM22;
  2357. } MAT2, FAR *LPMAT2;
  2358.  
  2359.  
  2360.  
  2361. typedef struct _GLYPHMETRICS {
  2362.     UINT    gmBlackBoxX;
  2363.     UINT    gmBlackBoxY;
  2364.     POINT   gmptGlyphOrigin;
  2365.     short   gmCellIncX;
  2366.     short   gmCellIncY;
  2367. } GLYPHMETRICS, FAR *LPGLYPHMETRICS;
  2368.  
  2369. //  GetGlyphOutline constants
  2370.  
  2371. #define GGO_METRICS        0
  2372. #define GGO_BITMAP         1
  2373. #define GGO_NATIVE         2
  2374. #define GGO_BEZIER         3
  2375.  
  2376. #if(WINVER >= 0x0400)
  2377. #define  GGO_GRAY2_BITMAP   4
  2378. #define  GGO_GRAY4_BITMAP   5
  2379. #define  GGO_GRAY8_BITMAP   6
  2380. #define  GGO_GLYPH_INDEX    0x0080
  2381. #endif /* WINVER >= 0x0400 */
  2382.  
  2383. #define TT_POLYGON_TYPE   24
  2384.  
  2385. #define TT_PRIM_LINE       1
  2386. #define TT_PRIM_QSPLINE    2
  2387. #define TT_PRIM_CSPLINE    3
  2388.  
  2389. typedef struct tagPOINTFX
  2390. {
  2391.     FIXED x;
  2392.     FIXED y;
  2393. } POINTFX, FAR* LPPOINTFX;
  2394.  
  2395. typedef struct tagTTPOLYCURVE
  2396. {
  2397.     WORD    wType;
  2398.     WORD    cpfx;
  2399.     POINTFX apfx[1];
  2400. } TTPOLYCURVE, FAR* LPTTPOLYCURVE;
  2401.  
  2402. typedef struct tagTTPOLYGONHEADER
  2403. {
  2404.     DWORD   cb;
  2405.     DWORD   dwType;
  2406.     POINTFX pfxStart;
  2407. } TTPOLYGONHEADER, FAR* LPTTPOLYGONHEADER;
  2408.  
  2409.  
  2410. #if(WINVER >= 0x0400)
  2411. #define GCP_DBCS           0x0001
  2412. #define GCP_REORDER        0x0002
  2413. #define GCP_USEKERNING     0x0008
  2414. #define GCP_GLYPHSHAPE     0x0010
  2415. #define GCP_LIGATE         0x0020
  2416. ////#define GCP_GLYPHINDEXING  0x0080
  2417. #define GCP_DIACRITIC      0x0100
  2418. #define GCP_KASHIDA        0x0400
  2419. #define GCP_ERROR          0x8000
  2420. #define FLI_MASK           0x103B
  2421.  
  2422. #define GCP_JUSTIFY        0x00010000L
  2423. ////#define GCP_NODIACRITICS   0x00020000L
  2424. #define FLI_GLYPHS         0x00040000L
  2425. #define GCP_CLASSIN        0x00080000L
  2426. #define GCP_MAXEXTENT      0x00100000L
  2427. #define GCP_JUSTIFYIN      0x00200000L
  2428. #define GCP_DISPLAYZWG      0x00400000L
  2429. #define GCP_SYMSWAPOFF      0x00800000L
  2430. #define GCP_NUMERICOVERRIDE 0x01000000L
  2431. #define GCP_NEUTRALOVERRIDE 0x02000000L
  2432. #define GCP_NUMERICSLATIN   0x04000000L
  2433. #define GCP_NUMERICSLOCAL   0x08000000L
  2434.  
  2435. #define GCPCLASS_LATIN                  1
  2436. #define GCPCLASS_HEBREW                 2
  2437. #define GCPCLASS_ARABIC                 2
  2438. #define GCPCLASS_NEUTRAL                3
  2439. #define GCPCLASS_LOCALNUMBER            4
  2440. #define GCPCLASS_LATINNUMBER            5
  2441. #define GCPCLASS_LATINNUMERICTERMINATOR 6
  2442. #define GCPCLASS_LATINNUMERICSEPARATOR  7
  2443. #define GCPCLASS_NUMERICSEPARATOR       8
  2444. #define GCPCLASS_PREBOUNDLTR         0x80
  2445. #define GCPCLASS_PREBOUNDRTL         0x40
  2446. #define GCPCLASS_POSTBOUNDLTR        0x20
  2447. #define GCPCLASS_POSTBOUNDRTL        0x10
  2448.  
  2449. #define GCPGLYPH_LINKBEFORE          0x8000
  2450. #define GCPGLYPH_LINKAFTER           0x4000
  2451.  
  2452.  
  2453. typedef struct tagGCP_RESULTSA
  2454.     {
  2455.     DWORD   lStructSize;
  2456.     LPSTR     lpOutString;
  2457.     UINT FAR *lpOrder;
  2458.     int FAR  *lpDx;
  2459.     int FAR  *lpCaretPos;
  2460.     LPSTR   lpClass;
  2461.     LPWSTR  lpGlyphs;
  2462.     UINT    nGlyphs;
  2463.     int     nMaxFit;
  2464.     } GCP_RESULTSA, FAR* LPGCP_RESULTSA;
  2465. typedef struct tagGCP_RESULTSW
  2466.     {
  2467.     DWORD   lStructSize;
  2468.     LPWSTR    lpOutString;
  2469.     UINT FAR *lpOrder;
  2470.     int FAR  *lpDx;
  2471.     int FAR  *lpCaretPos;
  2472.     LPSTR   lpClass;
  2473.     LPWSTR  lpGlyphs;
  2474.     UINT    nGlyphs;
  2475.     int     nMaxFit;
  2476.     } GCP_RESULTSW, FAR* LPGCP_RESULTSW;
  2477. #ifdef UNICODE
  2478. typedef GCP_RESULTSW GCP_RESULTS;
  2479. typedef LPGCP_RESULTSW LPGCP_RESULTS;
  2480. #else
  2481. typedef GCP_RESULTSA GCP_RESULTS;
  2482. typedef LPGCP_RESULTSA LPGCP_RESULTS;
  2483. #endif // UNICODE
  2484. #endif /* WINVER >= 0x0400 */
  2485.  
  2486. typedef struct _RASTERIZER_STATUS {
  2487.     short   nSize;
  2488.     short   wFlags;
  2489.     short   nLanguageID;
  2490. } RASTERIZER_STATUS, FAR *LPRASTERIZER_STATUS;
  2491.  
  2492. /* bits defined in wFlags of RASTERIZER_STATUS */
  2493. #define TT_AVAILABLE    0x0001
  2494. #define TT_ENABLED      0x0002
  2495.  
  2496. /* Pixel format descriptor */
  2497. typedef struct tagPIXELFORMATDESCRIPTOR
  2498. {
  2499.     WORD  nSize;
  2500.     WORD  nVersion;
  2501.     DWORD dwFlags;
  2502.     BYTE  iPixelType;
  2503.     BYTE  cColorBits;
  2504.     BYTE  cRedBits;
  2505.     BYTE  cRedShift;
  2506.     BYTE  cGreenBits;
  2507.     BYTE  cGreenShift;
  2508.     BYTE  cBlueBits;
  2509.     BYTE  cBlueShift;
  2510.     BYTE  cAlphaBits;
  2511.     BYTE  cAlphaShift;
  2512.     BYTE  cAccumBits;
  2513.     BYTE  cAccumRedBits;
  2514.     BYTE  cAccumGreenBits;
  2515.     BYTE  cAccumBlueBits;
  2516.     BYTE  cAccumAlphaBits;
  2517.     BYTE  cDepthBits;
  2518.     BYTE  cStencilBits;
  2519.     BYTE  cAuxBuffers;
  2520.     BYTE  iLayerType;
  2521.     BYTE  bReserved;
  2522.     DWORD dwLayerMask;
  2523.     DWORD dwVisibleMask;
  2524.     DWORD dwDamageMask;
  2525. } PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, FAR *LPPIXELFORMATDESCRIPTOR;
  2526.  
  2527. /* pixel types */
  2528. #define PFD_TYPE_RGBA        0
  2529. #define PFD_TYPE_COLORINDEX  1
  2530.  
  2531. /* layer types */
  2532. #define PFD_MAIN_PLANE       0
  2533. #define PFD_OVERLAY_PLANE    1
  2534. #define PFD_UNDERLAY_PLANE   (-1)
  2535.  
  2536. /* PIXELFORMATDESCRIPTOR flags */
  2537. #define PFD_DOUBLEBUFFER            0x00000001
  2538. #define PFD_STEREO                  0x00000002
  2539. #define PFD_DRAW_TO_WINDOW          0x00000004
  2540. #define PFD_DRAW_TO_BITMAP          0x00000008
  2541. #define PFD_SUPPORT_GDI             0x00000010
  2542. #define PFD_SUPPORT_OPENGL          0x00000020
  2543. #define PFD_GENERIC_FORMAT          0x00000040
  2544. #define PFD_NEED_PALETTE            0x00000080
  2545. #define PFD_NEED_SYSTEM_PALETTE     0x00000100
  2546. #define PFD_SWAP_EXCHANGE           0x00000200
  2547. #define PFD_SWAP_COPY               0x00000400
  2548. #define PFD_SWAP_LAYER_BUFFERS      0x00000800
  2549. #define PFD_GENERIC_ACCELERATED     0x00001000
  2550. #define PFD_SUPPORT_DIRECTDRAW      0x00002000
  2551.  
  2552. /* PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only */
  2553. #define PFD_DEPTH_DONTCARE          0x20000000
  2554. #define PFD_DOUBLEBUFFER_DONTCARE   0x40000000
  2555. #define PFD_STEREO_DONTCARE         0x80000000
  2556.  
  2557. #ifdef STRICT
  2558. #if !defined(NOTEXTMETRIC)
  2559. typedef int (CALLBACK* OLDFONTENUMPROCA)(CONST LOGFONTA *, CONST TEXTMETRICA *, DWORD, LPARAM);
  2560. typedef int (CALLBACK* OLDFONTENUMPROCW)(CONST LOGFONTW *, CONST TEXTMETRICW *, DWORD, LPARAM);
  2561. #ifdef UNICODE
  2562. #define OLDFONTENUMPROC  OLDFONTENUMPROCW
  2563. #else
  2564. #define OLDFONTENUMPROC  OLDFONTENUMPROCA
  2565. #endif // !UNICODE
  2566. #else
  2567. typedef int (CALLBACK* OLDFONTENUMPROCA)(CONST LOGFONTA * ,CONST VOID *, DWORD, LPARAM);
  2568. typedef int (CALLBACK* OLDFONTENUMPROCW)(CONST LOGFONTW * ,CONST VOID *, DWORD, LPARAM);
  2569. #ifdef UNICODE
  2570. #define OLDFONTENUMPROC  OLDFONTENUMPROCW
  2571. #else
  2572. #define OLDFONTENUMPROC  OLDFONTENUMPROCA
  2573. #endif // !UNICODE
  2574. #endif
  2575.  
  2576. typedef OLDFONTENUMPROCA    FONTENUMPROCA;
  2577. typedef OLDFONTENUMPROCW    FONTENUMPROCW;
  2578. #ifdef UNICODE
  2579. typedef FONTENUMPROCW FONTENUMPROC;
  2580. #else
  2581. typedef FONTENUMPROCA FONTENUMPROC;
  2582. #endif // UNICODE
  2583.  
  2584. typedef int (CALLBACK* GOBJENUMPROC)(LPVOID, LPARAM);
  2585. typedef VOID (CALLBACK* LINEDDAPROC)(int, int, LPARAM);
  2586. #else
  2587. typedef FARPROC OLDFONTENUMPROC;
  2588. typedef FARPROC FONTENUMPROCA;
  2589. typedef FARPROC FONTENUMPROCW;
  2590. #ifdef UNICODE
  2591. typedef FONTENUMPROCW FONTENUMPROC;
  2592. #else
  2593. typedef FONTENUMPROCA FONTENUMPROC;
  2594. #endif // UNICODE
  2595. typedef FARPROC GOBJENUMPROC;
  2596. typedef FARPROC LINEDDAPROC;
  2597. #endif
  2598.  
  2599. WINGDIAPI int WINAPI AddFontResourceA(LPCSTR);
  2600. WINGDIAPI int WINAPI AddFontResourceW(LPCWSTR);
  2601. #ifdef UNICODE
  2602. #define AddFontResource  AddFontResourceW
  2603. #else
  2604. #define AddFontResource  AddFontResourceA
  2605. #endif // !UNICODE
  2606.  
  2607.  
  2608. WINGDIAPI BOOL  WINAPI AnimatePalette(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);
  2609. WINGDIAPI BOOL  WINAPI Arc(HDC, int, int, int, int, int, int, int, int);
  2610. WINGDIAPI BOOL  WINAPI BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);
  2611. WINGDIAPI BOOL  WINAPI CancelDC(HDC);
  2612. WINGDIAPI BOOL  WINAPI Chord(HDC, int, int, int, int, int, int, int, int);
  2613. WINGDIAPI int   WINAPI ChoosePixelFormat(HDC, CONST PIXELFORMATDESCRIPTOR *);
  2614. WINGDIAPI HMETAFILE  WINAPI CloseMetaFile(HDC);
  2615. WINGDIAPI int     WINAPI CombineRgn(HRGN, HRGN, HRGN, int);
  2616. WINGDIAPI HMETAFILE WINAPI CopyMetaFileA(HMETAFILE, LPCSTR);
  2617. WINGDIAPI HMETAFILE WINAPI CopyMetaFileW(HMETAFILE, LPCWSTR);
  2618. #ifdef UNICODE
  2619. #define CopyMetaFile  CopyMetaFileW
  2620. #else
  2621. #define CopyMetaFile  CopyMetaFileA
  2622. #endif // !UNICODE
  2623. WINGDIAPI HBITMAP WINAPI CreateBitmap(int, int, UINT, UINT, CONST VOID *);
  2624. WINGDIAPI HBITMAP WINAPI CreateBitmapIndirect(CONST BITMAP *);
  2625. WINGDIAPI HBRUSH  WINAPI CreateBrushIndirect(CONST LOGBRUSH *);
  2626. WINGDIAPI HBITMAP WINAPI CreateCompatibleBitmap(HDC, int, int);
  2627. WINGDIAPI HBITMAP WINAPI CreateDiscardableBitmap(HDC, int, int);
  2628. WINGDIAPI HDC     WINAPI CreateCompatibleDC(HDC);
  2629. WINGDIAPI HDC     WINAPI CreateDCA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODEA *);
  2630. WINGDIAPI HDC     WINAPI CreateDCW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODEW *);
  2631. #ifdef UNICODE
  2632. #define CreateDC  CreateDCW
  2633. #else
  2634. #define CreateDC  CreateDCA
  2635. #endif // !UNICODE
  2636. WINGDIAPI HBITMAP WINAPI CreateDIBitmap(HDC, CONST BITMAPINFOHEADER *, DWORD, CONST VOID *, CONST BITMAPINFO *, UINT);
  2637. WINGDIAPI HBRUSH  WINAPI CreateDIBPatternBrush(HGLOBAL, UINT);
  2638. WINGDIAPI HBRUSH  WINAPI CreateDIBPatternBrushPt(CONST VOID *, UINT);
  2639. WINGDIAPI HRGN    WINAPI CreateEllipticRgn(int, int, int, int);
  2640. WINGDIAPI HRGN    WINAPI CreateEllipticRgnIndirect(CONST RECT *);
  2641. WINGDIAPI HFONT   WINAPI CreateFontIndirectA(CONST LOGFONTA *);
  2642. WINGDIAPI HFONT   WINAPI CreateFontIndirectW(CONST LOGFONTW *);
  2643. #ifdef UNICODE
  2644. #define CreateFontIndirect  CreateFontIndirectW
  2645. #else
  2646. #define CreateFontIndirect  CreateFontIndirectA
  2647. #endif // !UNICODE
  2648. WINGDIAPI HFONT   WINAPI CreateFontA(int, int, int, int, int, DWORD,
  2649.                              DWORD, DWORD, DWORD, DWORD, DWORD,
  2650.                              DWORD, DWORD, LPCSTR);
  2651. WINGDIAPI HFONT   WINAPI CreateFontW(int, int, int, int, int, DWORD,
  2652.                              DWORD, DWORD, DWORD, DWORD, DWORD,
  2653.                              DWORD, DWORD, LPCWSTR);
  2654. #ifdef UNICODE
  2655. #define CreateFont  CreateFontW
  2656. #else
  2657. #define CreateFont  CreateFontA
  2658. #endif // !UNICODE
  2659.  
  2660. WINGDIAPI HBRUSH  WINAPI CreateHatchBrush(int, COLORREF);
  2661. WINGDIAPI HDC     WINAPI CreateICA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODEA *);
  2662. WINGDIAPI HDC     WINAPI CreateICW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODEW *);
  2663. #ifdef UNICODE
  2664. #define CreateIC  CreateICW
  2665. #else
  2666. #define CreateIC  CreateICA
  2667. #endif // !UNICODE
  2668. WINGDIAPI HDC     WINAPI CreateMetaFileA(LPCSTR);
  2669. WINGDIAPI HDC     WINAPI CreateMetaFileW(LPCWSTR);
  2670. #ifdef UNICODE
  2671. #define CreateMetaFile  CreateMetaFileW
  2672. #else
  2673. #define CreateMetaFile  CreateMetaFileA
  2674. #endif // !UNICODE
  2675. WINGDIAPI HPALETTE WINAPI CreatePalette(CONST LOGPALETTE *);
  2676. WINGDIAPI HPEN    WINAPI CreatePen(int, int, COLORREF);
  2677. WINGDIAPI HPEN    WINAPI CreatePenIndirect(CONST LOGPEN *);
  2678. WINGDIAPI HRGN    WINAPI CreatePolyPolygonRgn(CONST POINT *, CONST INT *, int, int);
  2679. WINGDIAPI HBRUSH  WINAPI CreatePatternBrush(HBITMAP);
  2680. WINGDIAPI HRGN    WINAPI CreateRectRgn(int, int, int, int);
  2681. WINGDIAPI HRGN    WINAPI CreateRectRgnIndirect(CONST RECT *);
  2682. WINGDIAPI HRGN    WINAPI CreateRoundRectRgn(int, int, int, int, int, int);
  2683. WINGDIAPI BOOL    WINAPI CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR);
  2684. WINGDIAPI BOOL    WINAPI CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);
  2685. #ifdef UNICODE
  2686. #define CreateScalableFontResource  CreateScalableFontResourceW
  2687. #else
  2688. #define CreateScalableFontResource  CreateScalableFontResourceA
  2689. #endif // !UNICODE
  2690. WINGDIAPI HBRUSH  WINAPI CreateSolidBrush(COLORREF);
  2691.  
  2692. WINGDIAPI BOOL WINAPI DeleteDC(HDC);
  2693. WINGDIAPI BOOL WINAPI DeleteMetaFile(HMETAFILE);
  2694. WINGDIAPI BOOL WINAPI DeleteObject(HGDIOBJ);
  2695. WINGDIAPI int  WINAPI DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);
  2696.  
  2697. /* define types of pointers to ExtDeviceMode() and DeviceCapabilities()
  2698.  * functions for Win 3.1 compatibility
  2699.  */
  2700.  
  2701. typedef UINT   (CALLBACK* LPFNDEVMODE)(HWND, HMODULE, LPDEVMODE, LPSTR, LPSTR, LPDEVMODE, LPSTR, UINT);
  2702.  
  2703. typedef DWORD  (CALLBACK* LPFNDEVCAPS)(LPSTR, LPSTR, UINT, LPSTR, LPDEVMODE);
  2704.  
  2705. /* mode selections for the device mode function */
  2706. #define DM_UPDATE           1
  2707. #define DM_COPY             2
  2708. #define DM_PROMPT           4
  2709. #define DM_MODIFY           8
  2710.  
  2711. #define DM_IN_BUFFER        DM_MODIFY
  2712. #define DM_IN_PROMPT        DM_PROMPT
  2713. #define DM_OUT_BUFFER       DM_COPY
  2714. #define DM_OUT_DEFAULT      DM_UPDATE
  2715.  
  2716. /* device capabilities indices */
  2717. #define DC_FIELDS           1
  2718. #define DC_PAPERS           2
  2719. #define DC_PAPERSIZE        3
  2720. #define DC_MINEXTENT        4
  2721. #define DC_MAXEXTENT        5
  2722. #define DC_BINS             6
  2723. #define DC_DUPLEX           7
  2724. #define DC_SIZE             8
  2725. #define DC_EXTRA            9
  2726. #define DC_VERSION          10
  2727. #define DC_DRIVER           11
  2728. #define DC_BINNAMES         12
  2729. #define DC_ENUMRESOLUTIONS  13
  2730. #define DC_FILEDEPENDENCIES 14
  2731. #define DC_TRUETYPE         15
  2732. #define DC_PAPERNAMES       16
  2733. #define DC_ORIENTATION      17
  2734. #define DC_COPIES           18
  2735. #if(WINVER >= 0x0400)
  2736. #define DC_BINADJUST            19
  2737. #define DC_EMF_COMPLIANT        20
  2738. #define DC_DATATYPE_PRODUCED    21
  2739. #define DC_COLLATE              22
  2740. #define DC_MANUFACTURER         23
  2741. #define DC_MODEL                24
  2742. #endif /* WINVER >= 0x0400 */
  2743.  
  2744.  
  2745. #if (WINVER >= 0x0500)
  2746. #define DC_COLORDEVICE          23
  2747. #define DC_NUP                  24
  2748. #define DC_PERSONALITY          25
  2749. #define DC_PRINTRATE            26
  2750. #define DC_PRINTRATEUNIT        27
  2751. #define   PRINTRATEUNIT_PPM     1
  2752. #define   PRINTRATEUNIT_CPS     2
  2753. #define   PRINTRATEUNIT_LPM     3
  2754. #define   PRINTRATEUNIT_IPM     4
  2755. #define DC_PRINTERMEM           28
  2756. #define DC_MEDIAREADY           29
  2757. #endif
  2758.  
  2759. /* bit fields of the return value (DWORD) for DC_TRUETYPE */
  2760. #define DCTT_BITMAP             0x0000001L
  2761. #define DCTT_DOWNLOAD           0x0000002L
  2762. #define DCTT_SUBDEV             0x0000004L
  2763. #if(WINVER >= 0x0400)
  2764. #define DCTT_DOWNLOAD_OUTLINE   0x0000008L
  2765.  
  2766. /* return values for DC_BINADJUST */
  2767. #define DCBA_FACEUPNONE       0x0000
  2768. #define DCBA_FACEUPCENTER     0x0001
  2769. #define DCBA_FACEUPLEFT       0x0002
  2770. #define DCBA_FACEUPRIGHT      0x0003
  2771. #define DCBA_FACEDOWNNONE     0x0100
  2772. #define DCBA_FACEDOWNCENTER   0x0101
  2773. #define DCBA_FACEDOWNLEFT     0x0102
  2774. #define DCBA_FACEDOWNRIGHT    0x0103
  2775. #endif /* WINVER >= 0x0400 */
  2776.  
  2777. WINSPOOLAPI int  WINAPI DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD,
  2778.                                 LPSTR, CONST DEVMODEA *);
  2779. WINSPOOLAPI int  WINAPI DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD,
  2780.                                 LPWSTR, CONST DEVMODEW *);
  2781. #ifdef UNICODE
  2782. #define DeviceCapabilities  DeviceCapabilitiesW
  2783. #else
  2784. #define DeviceCapabilities  DeviceCapabilitiesA
  2785. #endif // !UNICODE
  2786.  
  2787. WINGDIAPI int  WINAPI DrawEscape(HDC, int, int, LPCSTR);
  2788. WINGDIAPI BOOL WINAPI Ellipse(HDC, int, int, int, int);
  2789.  
  2790. #if(WINVER >= 0x0400)
  2791. WINGDIAPI int  WINAPI EnumFontFamiliesExA(HDC, LPLOGFONTA,FONTENUMPROCA, LPARAM,DWORD);
  2792. WINGDIAPI int  WINAPI EnumFontFamiliesExW(HDC, LPLOGFONTW,FONTENUMPROCW, LPARAM,DWORD);
  2793. #ifdef UNICODE
  2794. #define EnumFontFamiliesEx  EnumFontFamiliesExW
  2795. #else
  2796. #define EnumFontFamiliesEx  EnumFontFamiliesExA
  2797. #endif // !UNICODE
  2798. #endif /* WINVER >= 0x0400 */
  2799.  
  2800. WINGDIAPI int  WINAPI EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROCA, LPARAM);
  2801. WINGDIAPI int  WINAPI EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM);
  2802. #ifdef UNICODE
  2803. #define EnumFontFamilies  EnumFontFamiliesW
  2804. #else
  2805. #define EnumFontFamilies  EnumFontFamiliesA
  2806. #endif // !UNICODE
  2807. WINGDIAPI int  WINAPI EnumFontsA(HDC, LPCSTR,  FONTENUMPROCA, LPARAM);
  2808. WINGDIAPI int  WINAPI EnumFontsW(HDC, LPCWSTR,  FONTENUMPROCW, LPARAM);
  2809. #ifdef UNICODE
  2810. #define EnumFonts  EnumFontsW
  2811. #else
  2812. #define EnumFonts  EnumFontsA
  2813. #endif // !UNICODE
  2814.  
  2815. #ifdef STRICT
  2816. WINGDIAPI int  WINAPI EnumObjects(HDC, int, GOBJENUMPROC, LPARAM);
  2817. #else
  2818. WINGDIAPI int  WINAPI EnumObjects(HDC, int, GOBJENUMPROC, LPVOID);
  2819. #endif
  2820.  
  2821.  
  2822. WINGDIAPI BOOL WINAPI EqualRgn(HRGN, HRGN);
  2823. WINGDIAPI int  WINAPI Escape(HDC, int, int, LPCSTR, LPVOID);
  2824. WINGDIAPI int  WINAPI ExtEscape(HDC, int, int, LPCSTR, int, LPSTR);
  2825. WINGDIAPI int  WINAPI ExcludeClipRect(HDC, int, int, int, int);
  2826. WINGDIAPI HRGN WINAPI ExtCreateRegion(CONST XFORM *, DWORD, CONST RGNDATA *);
  2827. WINGDIAPI BOOL  WINAPI ExtFloodFill(HDC, int, int, COLORREF, UINT);
  2828. WINGDIAPI BOOL   WINAPI FillRgn(HDC, HRGN, HBRUSH);
  2829. WINGDIAPI BOOL   WINAPI FloodFill(HDC, int, int, COLORREF);
  2830. WINGDIAPI BOOL   WINAPI FrameRgn(HDC, HRGN, HBRUSH, int, int);
  2831. WINGDIAPI int   WINAPI GetROP2(HDC);
  2832. WINGDIAPI BOOL  WINAPI GetAspectRatioFilterEx(HDC, LPSIZE);
  2833. WINGDIAPI COLORREF WINAPI GetBkColor(HDC);
  2834.  
  2835. #if (_WIN32_WINNT >= 0x0500)
  2836. WINGDIAPI COLORREF WINAPI GetDCBrushColor(HDC);
  2837. WINGDIAPI COLORREF WINAPI GetDCPenColor(HDC);
  2838. #endif
  2839.  
  2840. WINGDIAPI int   WINAPI GetBkMode(HDC);
  2841. WINGDIAPI LONG  WINAPI GetBitmapBits(HBITMAP, LONG, LPVOID);
  2842. WINGDIAPI BOOL  WINAPI GetBitmapDimensionEx(HBITMAP, LPSIZE);
  2843. WINGDIAPI UINT  WINAPI GetBoundsRect(HDC, LPRECT, UINT);
  2844.  
  2845. WINGDIAPI BOOL  WINAPI GetBrushOrgEx(HDC, LPPOINT);
  2846.  
  2847. WINGDIAPI BOOL  WINAPI GetCharWidthA(HDC, UINT, UINT, LPINT);
  2848. WINGDIAPI BOOL  WINAPI GetCharWidthW(HDC, UINT, UINT, LPINT);
  2849. #ifdef UNICODE
  2850. #define GetCharWidth  GetCharWidthW
  2851. #else
  2852. #define GetCharWidth  GetCharWidthA
  2853. #endif // !UNICODE
  2854. WINGDIAPI BOOL  WINAPI GetCharWidth32A(HDC, UINT, UINT, LPINT);
  2855. WINGDIAPI BOOL  WINAPI GetCharWidth32W(HDC, UINT, UINT, LPINT);
  2856. #ifdef UNICODE
  2857. #define GetCharWidth32  GetCharWidth32W
  2858. #else
  2859. #define GetCharWidth32  GetCharWidth32A
  2860. #endif // !UNICODE
  2861. WINGDIAPI BOOL  APIENTRY GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT);
  2862. WINGDIAPI BOOL  APIENTRY GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT);
  2863. #ifdef UNICODE
  2864. #define GetCharWidthFloat  GetCharWidthFloatW
  2865. #else
  2866. #define GetCharWidthFloat  GetCharWidthFloatA
  2867. #endif // !UNICODE
  2868. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsA(HDC, UINT, UINT, LPABC);
  2869. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsW(HDC, UINT, UINT, LPABC);
  2870. #ifdef UNICODE
  2871. #define GetCharABCWidths  GetCharABCWidthsW
  2872. #else
  2873. #define GetCharABCWidths  GetCharABCWidthsA
  2874. #endif // !UNICODE
  2875. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT);
  2876. WINGDIAPI BOOL  APIENTRY GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT);
  2877. #ifdef UNICODE
  2878. #define GetCharABCWidthsFloat  GetCharABCWidthsFloatW
  2879. #else
  2880. #define GetCharABCWidthsFloat  GetCharABCWidthsFloatA
  2881. #endif // !UNICODE
  2882. WINGDIAPI int   WINAPI GetClipBox(HDC, LPRECT);
  2883. WINGDIAPI int   WINAPI GetClipRgn(HDC, HRGN);
  2884. WINGDIAPI int   WINAPI GetMetaRgn(HDC, HRGN);
  2885. WINGDIAPI HGDIOBJ WINAPI GetCurrentObject(HDC, UINT);
  2886. WINGDIAPI BOOL  WINAPI GetCurrentPositionEx(HDC, LPPOINT);
  2887. WINGDIAPI int   WINAPI GetDeviceCaps(HDC, int);
  2888. WINGDIAPI int   WINAPI GetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);
  2889. WINGDIAPI DWORD WINAPI GetFontData(HDC, DWORD, DWORD, LPVOID, DWORD);
  2890. WINGDIAPI DWORD WINAPI GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
  2891. WINGDIAPI DWORD WINAPI GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
  2892. #ifdef UNICODE
  2893. #define GetGlyphOutline  GetGlyphOutlineW
  2894. #else
  2895. #define GetGlyphOutline  GetGlyphOutlineA
  2896. #endif // !UNICODE
  2897. WINGDIAPI int   WINAPI GetGraphicsMode(HDC);
  2898. WINGDIAPI int   WINAPI GetMapMode(HDC);
  2899. WINGDIAPI UINT  WINAPI GetMetaFileBitsEx(HMETAFILE, UINT, LPVOID);
  2900. WINGDIAPI HMETAFILE   WINAPI GetMetaFileA(LPCSTR);
  2901. WINGDIAPI HMETAFILE   WINAPI GetMetaFileW(LPCWSTR);
  2902. #ifdef UNICODE
  2903. #define GetMetaFile  GetMetaFileW
  2904. #else
  2905. #define GetMetaFile  GetMetaFileA
  2906. #endif // !UNICODE
  2907. WINGDIAPI COLORREF WINAPI GetNearestColor(HDC, COLORREF);
  2908. WINGDIAPI UINT  WINAPI GetNearestPaletteIndex(HPALETTE, COLORREF);
  2909. WINGDIAPI DWORD WINAPI GetObjectType(HGDIOBJ h);
  2910.  
  2911. #ifndef NOTEXTMETRIC
  2912.  
  2913. WINGDIAPI UINT APIENTRY GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRICA);
  2914. WINGDIAPI UINT APIENTRY GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRICW);
  2915. #ifdef UNICODE
  2916. #define GetOutlineTextMetrics  GetOutlineTextMetricsW
  2917. #else
  2918. #define GetOutlineTextMetrics  GetOutlineTextMetricsA
  2919. #endif // !UNICODE
  2920.  
  2921. #endif /* NOTEXTMETRIC */
  2922.  
  2923. WINGDIAPI UINT  WINAPI GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY);
  2924. WINGDIAPI COLORREF WINAPI GetPixel(HDC, int, int);
  2925. WINGDIAPI int   WINAPI GetPixelFormat(HDC);
  2926. WINGDIAPI int   WINAPI GetPolyFillMode(HDC);
  2927. WINGDIAPI BOOL  WINAPI GetRasterizerCaps(LPRASTERIZER_STATUS, UINT);
  2928. WINGDIAPI DWORD WINAPI GetRegionData(HRGN, DWORD, LPRGNDATA);
  2929. WINGDIAPI int   WINAPI GetRgnBox(HRGN, LPRECT);
  2930. WINGDIAPI HGDIOBJ WINAPI GetStockObject(int);
  2931. WINGDIAPI int   WINAPI GetStretchBltMode(HDC);
  2932. WINGDIAPI UINT  WINAPI GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
  2933. WINGDIAPI UINT  WINAPI GetSystemPaletteUse(HDC);
  2934. WINGDIAPI int   WINAPI GetTextCharacterExtra(HDC);
  2935. WINGDIAPI UINT  WINAPI GetTextAlign(HDC);
  2936. WINGDIAPI COLORREF WINAPI GetTextColor(HDC);
  2937.  
  2938. WINGDIAPI BOOL  APIENTRY GetTextExtentPointA(
  2939.                     HDC,
  2940.                     LPCSTR,
  2941.                     int,
  2942.                     LPSIZE
  2943.                     );
  2944. WINGDIAPI BOOL  APIENTRY GetTextExtentPointW(
  2945.                     HDC,
  2946.                     LPCWSTR,
  2947.                     int,
  2948.                     LPSIZE
  2949.                     );
  2950. #ifdef UNICODE
  2951. #define GetTextExtentPoint  GetTextExtentPointW
  2952. #else
  2953. #define GetTextExtentPoint  GetTextExtentPointA
  2954. #endif // !UNICODE
  2955.  
  2956. WINGDIAPI BOOL  APIENTRY GetTextExtentPoint32A(
  2957.                     HDC,
  2958.                     LPCSTR,
  2959.                     int,
  2960.                     LPSIZE
  2961.                     );
  2962. WINGDIAPI BOOL  APIENTRY GetTextExtentPoint32W(
  2963.                     HDC,
  2964.                     LPCWSTR,
  2965.                     int,
  2966.                     LPSIZE
  2967.                     );
  2968. #ifdef UNICODE
  2969. #define GetTextExtentPoint32  GetTextExtentPoint32W
  2970. #else
  2971. #define GetTextExtentPoint32  GetTextExtentPoint32A
  2972. #endif // !UNICODE
  2973.  
  2974. WINGDIAPI BOOL  APIENTRY GetTextExtentExPointA(
  2975.                     HDC,
  2976.                     LPCSTR,
  2977.                     int,
  2978.                     int,
  2979.                     LPINT,
  2980.                     LPINT,
  2981.                     LPSIZE
  2982.                     );
  2983. WINGDIAPI BOOL  APIENTRY GetTextExtentExPointW(
  2984.                     HDC,
  2985.                     LPCWSTR,
  2986.                     int,
  2987.                     int,
  2988.                     LPINT,
  2989.                     LPINT,
  2990.                     LPSIZE
  2991.                     );
  2992. #ifdef UNICODE
  2993. #define GetTextExtentExPoint  GetTextExtentExPointW
  2994. #else
  2995. #define GetTextExtentExPoint  GetTextExtentExPointA
  2996. #endif // !UNICODE
  2997. #if(WINVER >= 0x0400)
  2998. WINGDIAPI int WINAPI GetTextCharset(HDC hdc);
  2999. WINGDIAPI int WINAPI GetTextCharsetInfo(HDC hdc, LPFONTSIGNATURE lpSig, DWORD dwFlags);
  3000. WINGDIAPI BOOL WINAPI TranslateCharsetInfo( DWORD FAR *lpSrc, LPCHARSETINFO lpCs, DWORD dwFlags);
  3001. WINGDIAPI DWORD WINAPI GetFontLanguageInfo( HDC );
  3002. WINGDIAPI DWORD WINAPI GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTSA, DWORD);
  3003. WINGDIAPI DWORD WINAPI GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTSW, DWORD);
  3004. #ifdef UNICODE
  3005. #define GetCharacterPlacement  GetCharacterPlacementW
  3006. #else
  3007. #define GetCharacterPlacement  GetCharacterPlacementA
  3008. #endif // !UNICODE
  3009. #endif /* WINVER >= 0x0400 */
  3010.  
  3011. #if (_WIN32_WINNT >= 0x0500)
  3012.  
  3013. typedef struct tagWCRANGE
  3014. {
  3015.     WCHAR  wcLow;
  3016.     USHORT cGlyphs;
  3017. } WCRANGE, *PWCRANGE,FAR *LPWCRANGE;
  3018.  
  3019.  
  3020. typedef struct tagGLYPHSET
  3021. {
  3022.     DWORD    cbThis;
  3023.     DWORD    flAccel;
  3024.     DWORD    cGlyphsSupported;
  3025.     DWORD    cRanges;
  3026.     WCRANGE  ranges[1];
  3027. } GLYPHSET, *PGLYPHSET, FAR *LPGLYPHSET;
  3028.  
  3029. /* flAccel flags for the GLYPHSET structure above */
  3030.  
  3031. #define GS_8BIT_INDICES     0x00000001
  3032.  
  3033. /* flags for GetGlyphIndices */
  3034.  
  3035. #define GGI_MARK_NONEXISTING_GLYPHS  0X0001
  3036.  
  3037. WINGDIAPI DWORD WINAPI GetFontUnicodeRanges(HDC, LPGLYPHSET);
  3038. WINGDIAPI DWORD WINAPI GetGlyphIndicesA(HDC, LPCSTR, int, LPWORD, DWORD);
  3039. WINGDIAPI DWORD WINAPI GetGlyphIndicesW(HDC, LPCWSTR, int, LPWORD, DWORD);
  3040. #ifdef UNICODE
  3041. #define GetGlyphIndices  GetGlyphIndicesW
  3042. #else
  3043. #define GetGlyphIndices  GetGlyphIndicesA
  3044. #endif // !UNICODE
  3045. WINGDIAPI BOOL  WINAPI GetTextExtentPointI(HDC,LPWORD,int,LPSIZE);
  3046. WINGDIAPI BOOL  WINAPI GetTextExtentExPointI(HDC,LPWORD,int,int,LPINT,LPINT,LPSIZE);
  3047. WINGDIAPI BOOL  WINAPI GetCharWidthI(HDC, UINT, UINT, LPWORD, LPINT);
  3048. WINGDIAPI BOOL  WINAPI GetCharABCWidthsI(HDC, UINT , UINT , LPWORD, LPABC);
  3049.  
  3050. #define STAMP_DESIGNVECTOR  (0x8000000 + 'd' + ('v' << 8))
  3051. #define STAMP_AXESLIST      (0x8000000 + 'a' + ('l' << 8))
  3052. #define MM_MAX_NUMAXES      16
  3053.  
  3054.  
  3055.  
  3056. typedef struct tagDESIGNVECTOR
  3057. {
  3058.     DWORD  dvReserved;
  3059.     DWORD  dvNumAxes;
  3060.     LONG   dvValues[MM_MAX_NUMAXES];
  3061. } DESIGNVECTOR, *PDESIGNVECTOR, FAR *LPDESIGNVECTOR;
  3062.  
  3063. WINGDIAPI int  WINAPI AddFontResourceExA(LPCSTR,DWORD, DESIGNVECTOR *);
  3064. WINGDIAPI int  WINAPI AddFontResourceExW(LPCWSTR,DWORD, DESIGNVECTOR *);
  3065. #ifdef UNICODE
  3066. #define AddFontResourceEx  AddFontResourceExW
  3067. #else
  3068. #define AddFontResourceEx  AddFontResourceExA
  3069. #endif // !UNICODE
  3070. WINGDIAPI BOOL WINAPI RemoveFontResourceExA(LPCSTR,DWORD, DESIGNVECTOR *);
  3071. WINGDIAPI BOOL WINAPI RemoveFontResourceExW(LPCWSTR,DWORD, DESIGNVECTOR *);
  3072. #ifdef UNICODE
  3073. #define RemoveFontResourceEx  RemoveFontResourceExW
  3074. #else
  3075. #define RemoveFontResourceEx  RemoveFontResourceExA
  3076. #endif // !UNICODE
  3077. WINGDIAPI HANDLE WINAPI AddFontMemResourceEx(PVOID, DWORD, DESIGNVECTOR *, DWORD*);
  3078. WINGDIAPI BOOL WINAPI RemoveFontMemResourceEx(HANDLE);
  3079. #define FR_PRIVATE     0x10
  3080. #define FR_NOT_ENUM    0x20
  3081.  
  3082. // The actual size of the DESIGNVECTOR and ENUMLOGFONTEXDV structures
  3083. // is determined by dvNumAxes,
  3084. // MM_MAX_NUMAXES only detemines the maximal size allowed
  3085.  
  3086. #define MM_MAX_AXES_NAMELEN 16
  3087.  
  3088. typedef struct tagAXISINFOA
  3089. {
  3090.     LONG   axMinValue;
  3091.     LONG   axMaxValue;
  3092.     BYTE   axAxisName[MM_MAX_AXES_NAMELEN];
  3093. } AXISINFOA, *PAXISINFOA, FAR *LPAXISINFOA;
  3094. typedef struct tagAXISINFOW
  3095. {
  3096.     LONG   axMinValue;
  3097.     LONG   axMaxValue;
  3098.     WCHAR  axAxisName[MM_MAX_AXES_NAMELEN];
  3099. } AXISINFOW, *PAXISINFOW, FAR *LPAXISINFOW;
  3100. #ifdef UNICODE
  3101. typedef AXISINFOW AXISINFO;
  3102. typedef PAXISINFOW PAXISINFO;
  3103. typedef LPAXISINFOW LPAXISINFO;
  3104. #else
  3105. typedef AXISINFOA AXISINFO;
  3106. typedef PAXISINFOA PAXISINFO;
  3107. typedef LPAXISINFOA LPAXISINFO;
  3108. #endif // UNICODE
  3109.  
  3110. typedef struct tagAXESLISTA
  3111. {
  3112.     DWORD     axlReserved;
  3113.     DWORD     axlNumAxes;
  3114.     AXISINFOA axlAxisInfo[MM_MAX_NUMAXES];
  3115. } AXESLISTA, *PAXESLISTA, FAR *LPAXESLISTA;
  3116. typedef struct tagAXESLISTW
  3117. {
  3118.     DWORD     axlReserved;
  3119.     DWORD     axlNumAxes;
  3120.     AXISINFOW axlAxisInfo[MM_MAX_NUMAXES];
  3121. } AXESLISTW, *PAXESLISTW, FAR *LPAXESLISTW;
  3122. #ifdef UNICODE
  3123. typedef AXESLISTW AXESLIST;
  3124. typedef PAXESLISTW PAXESLIST;
  3125. typedef LPAXESLISTW LPAXESLIST;
  3126. #else
  3127. typedef AXESLISTA AXESLIST;
  3128. typedef PAXESLISTA PAXESLIST;
  3129. typedef LPAXESLISTA LPAXESLIST;
  3130. #endif // UNICODE
  3131.  
  3132. // The actual size of the AXESLIST and ENUMTEXTMETRIC structure is
  3133. // determined by axlNumAxes,
  3134. // MM_MAX_NUMAXES only detemines the maximal size allowed
  3135.  
  3136. typedef struct tagENUMLOGFONTEXDVA
  3137. {
  3138.     ENUMLOGFONTEXA elfEnumLogfontEx;
  3139.     DESIGNVECTOR   elfDesignVector;
  3140. } ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA, FAR *LPENUMLOGFONTEXDVA;
  3141. typedef struct tagENUMLOGFONTEXDVW
  3142. {
  3143.     ENUMLOGFONTEXW elfEnumLogfontEx;
  3144.     DESIGNVECTOR   elfDesignVector;
  3145. } ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW, FAR *LPENUMLOGFONTEXDVW;
  3146. #ifdef UNICODE
  3147. typedef ENUMLOGFONTEXDVW ENUMLOGFONTEXDV;
  3148. typedef PENUMLOGFONTEXDVW PENUMLOGFONTEXDV;
  3149. typedef LPENUMLOGFONTEXDVW LPENUMLOGFONTEXDV;
  3150. #else
  3151. typedef ENUMLOGFONTEXDVA ENUMLOGFONTEXDV;
  3152. typedef PENUMLOGFONTEXDVA PENUMLOGFONTEXDV;
  3153. typedef LPENUMLOGFONTEXDVA LPENUMLOGFONTEXDV;
  3154. #endif // UNICODE
  3155.  
  3156.  
  3157. WINGDIAPI HFONT  WINAPI CreateFontIndirectExA(CONST ENUMLOGFONTEXDVA *);
  3158. WINGDIAPI HFONT  WINAPI CreateFontIndirectExW(CONST ENUMLOGFONTEXDVW *);
  3159. #ifdef UNICODE
  3160. #define CreateFontIndirectEx  CreateFontIndirectExW
  3161. #else
  3162. #define CreateFontIndirectEx  CreateFontIndirectExA
  3163. #endif // !UNICODE
  3164.  
  3165.  
  3166. #ifndef NOTEXTMETRIC
  3167. typedef struct tagENUMTEXTMETRICA
  3168. {
  3169.     NEWTEXTMETRICEXA etmNewTextMetricEx;
  3170.     AXESLISTA        etmAxesList;
  3171. } ENUMTEXTMETRICA, *PENUMTEXTMETRICA, FAR *LPENUMTEXTMETRICA;
  3172. typedef struct tagENUMTEXTMETRICW
  3173. {
  3174.     NEWTEXTMETRICEXW etmNewTextMetricEx;
  3175.     AXESLISTW        etmAxesList;
  3176. } ENUMTEXTMETRICW, *PENUMTEXTMETRICW, FAR *LPENUMTEXTMETRICW;
  3177. #ifdef UNICODE
  3178. typedef ENUMTEXTMETRICW ENUMTEXTMETRIC;
  3179. typedef PENUMTEXTMETRICW PENUMTEXTMETRIC;
  3180. typedef LPENUMTEXTMETRICW LPENUMTEXTMETRIC;
  3181. #else
  3182. typedef ENUMTEXTMETRICA ENUMTEXTMETRIC;
  3183. typedef PENUMTEXTMETRICA PENUMTEXTMETRIC;
  3184. typedef LPENUMTEXTMETRICA LPENUMTEXTMETRIC;
  3185. #endif // UNICODE
  3186. #endif /* NOTEXTMETRIC */
  3187.  
  3188. #endif // (_WIN32_WINNT >= 0x0500)
  3189.  
  3190.  
  3191. WINGDIAPI BOOL  WINAPI GetViewportExtEx(HDC, LPSIZE);
  3192. WINGDIAPI BOOL  WINAPI GetViewportOrgEx(HDC, LPPOINT);
  3193. WINGDIAPI BOOL  WINAPI GetWindowExtEx(HDC, LPSIZE);
  3194. WINGDIAPI BOOL  WINAPI GetWindowOrgEx(HDC, LPPOINT);
  3195.  
  3196. WINGDIAPI int  WINAPI IntersectClipRect(HDC, int, int, int, int);
  3197. WINGDIAPI BOOL WINAPI InvertRgn(HDC, HRGN);
  3198. WINGDIAPI BOOL WINAPI LineDDA(int, int, int, int, LINEDDAPROC, LPARAM);
  3199. WINGDIAPI BOOL WINAPI LineTo(HDC, int, int);
  3200. WINGDIAPI BOOL WINAPI MaskBlt(HDC, int, int, int, int,
  3201.               HDC, int, int, HBITMAP, int, int, DWORD);
  3202. WINGDIAPI BOOL WINAPI PlgBlt(HDC, CONST POINT *, HDC, int, int, int,
  3203.                      int, HBITMAP, int, int);
  3204.  
  3205. WINGDIAPI int  WINAPI OffsetClipRgn(HDC, int, int);
  3206. WINGDIAPI int  WINAPI OffsetRgn(HRGN, int, int);
  3207. WINGDIAPI BOOL WINAPI PatBlt(HDC, int, int, int, int, DWORD);
  3208. WINGDIAPI BOOL WINAPI Pie(HDC, int, int, int, int, int, int, int, int);
  3209. WINGDIAPI BOOL WINAPI PlayMetaFile(HDC, HMETAFILE);
  3210. WINGDIAPI BOOL WINAPI PaintRgn(HDC, HRGN);
  3211. WINGDIAPI BOOL WINAPI PolyPolygon(HDC, CONST POINT *, CONST INT *, int);
  3212. WINGDIAPI BOOL WINAPI PtInRegion(HRGN, int, int);
  3213. WINGDIAPI BOOL WINAPI PtVisible(HDC, int, int);
  3214. WINGDIAPI BOOL WINAPI RectInRegion(HRGN, CONST RECT *);
  3215. WINGDIAPI BOOL WINAPI RectVisible(HDC, CONST RECT *);
  3216. WINGDIAPI BOOL WINAPI Rectangle(HDC, int, int, int, int);
  3217. WINGDIAPI BOOL WINAPI RestoreDC(HDC, int);
  3218. WINGDIAPI HDC  WINAPI ResetDCA(HDC, CONST DEVMODEA *);
  3219. WINGDIAPI HDC  WINAPI ResetDCW(HDC, CONST DEVMODEW *);
  3220. #ifdef UNICODE
  3221. #define ResetDC  ResetDCW
  3222. #else
  3223. #define ResetDC  ResetDCA
  3224. #endif // !UNICODE
  3225. WINGDIAPI UINT WINAPI RealizePalette(HDC);
  3226. WINGDIAPI BOOL WINAPI RemoveFontResourceA(LPCSTR);
  3227. WINGDIAPI BOOL WINAPI RemoveFontResourceW(LPCWSTR);
  3228. #ifdef UNICODE
  3229. #define RemoveFontResource  RemoveFontResourceW
  3230. #else
  3231. #define RemoveFontResource  RemoveFontResourceA
  3232. #endif // !UNICODE
  3233. WINGDIAPI BOOL  WINAPI RoundRect(HDC, int, int, int, int, int, int);
  3234. WINGDIAPI BOOL WINAPI ResizePalette(HPALETTE, UINT);
  3235.  
  3236. WINGDIAPI int  WINAPI SaveDC(HDC);
  3237. WINGDIAPI int  WINAPI SelectClipRgn(HDC, HRGN);
  3238. WINGDIAPI int  WINAPI ExtSelectClipRgn(HDC, HRGN, int);
  3239. WINGDIAPI int  WINAPI SetMetaRgn(HDC);
  3240. WINGDIAPI HGDIOBJ WINAPI SelectObject(HDC, HGDIOBJ);
  3241. WINGDIAPI HPALETTE WINAPI SelectPalette(HDC, HPALETTE, BOOL);
  3242. WINGDIAPI COLORREF WINAPI SetBkColor(HDC, COLORREF);
  3243.  
  3244. #if (_WIN32_WINNT >= 0x0500)
  3245. WINGDIAPI COLORREF WINAPI SetDCBrushColor(HDC, COLORREF);
  3246. WINGDIAPI COLORREF WINAPI SetDCPenColor(HDC, COLORREF);
  3247. #endif
  3248.  
  3249. WINGDIAPI int   WINAPI SetBkMode(HDC, int);
  3250. WINGDIAPI LONG  WINAPI SetBitmapBits(HBITMAP, DWORD, CONST VOID *);
  3251.  
  3252. WINGDIAPI UINT  WINAPI SetBoundsRect(HDC, CONST RECT *, UINT);
  3253. WINGDIAPI int   WINAPI SetDIBits(HDC, HBITMAP, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);
  3254. WINGDIAPI int   WINAPI SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int,
  3255.         int, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);
  3256. WINGDIAPI DWORD WINAPI SetMapperFlags(HDC, DWORD);
  3257. WINGDIAPI int   WINAPI SetGraphicsMode(HDC hdc, int iMode);
  3258. WINGDIAPI int   WINAPI SetMapMode(HDC, int);
  3259. WINGDIAPI HMETAFILE   WINAPI SetMetaFileBitsEx(UINT, CONST BYTE *);
  3260. WINGDIAPI UINT  WINAPI SetPaletteEntries(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);
  3261. WINGDIAPI COLORREF WINAPI SetPixel(HDC, int, int, COLORREF);
  3262. WINGDIAPI BOOL   WINAPI SetPixelV(HDC, int, int, COLORREF);
  3263. WINGDIAPI BOOL  WINAPI SetPixelFormat(HDC, int, CONST PIXELFORMATDESCRIPTOR *);
  3264. WINGDIAPI int   WINAPI SetPolyFillMode(HDC, int);
  3265. WINGDIAPI BOOL   WINAPI StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
  3266. WINGDIAPI BOOL   WINAPI SetRectRgn(HRGN, int, int, int, int);
  3267. WINGDIAPI int   WINAPI StretchDIBits(HDC, int, int, int, int, int, int, int, int, CONST
  3268.         VOID *, CONST BITMAPINFO *, UINT, DWORD);
  3269. WINGDIAPI int   WINAPI SetROP2(HDC, int);
  3270. WINGDIAPI int   WINAPI SetStretchBltMode(HDC, int);
  3271. WINGDIAPI UINT  WINAPI SetSystemPaletteUse(HDC, UINT);
  3272. WINGDIAPI int   WINAPI SetTextCharacterExtra(HDC, int);
  3273. WINGDIAPI COLORREF WINAPI SetTextColor(HDC, COLORREF);
  3274. WINGDIAPI UINT  WINAPI SetTextAlign(HDC, UINT);
  3275. WINGDIAPI BOOL  WINAPI SetTextJustification(HDC, int, int);
  3276. WINGDIAPI BOOL  WINAPI UpdateColors(HDC);
  3277.  
  3278.  
  3279. #if (WINVER >= 0x0400)
  3280.  
  3281. //
  3282. // image blt
  3283. //
  3284.  
  3285. typedef USHORT COLOR16;
  3286.  
  3287. typedef struct _TRIVERTEX
  3288. {
  3289.     LONG    x;
  3290.     LONG    y;
  3291.     COLOR16 Red;
  3292.     COLOR16 Green;
  3293.     COLOR16 Blue;
  3294.     COLOR16 Alpha;
  3295. }TRIVERTEX,*PTRIVERTEX,*LPTRIVERTEX;
  3296.  
  3297. typedef struct _GRADIENT_TRIANGLE
  3298. {
  3299.     ULONG Vertex1;
  3300.     ULONG Vertex2;
  3301.     ULONG Vertex3;
  3302. } GRADIENT_TRIANGLE,*PGRADIENT_TRIANGLE,*LPGRADIENT_TRIANGLE;
  3303.  
  3304. typedef struct _GRADIENT_RECT
  3305. {
  3306.     ULONG UpperLeft;
  3307.     ULONG LowerRight;
  3308. }GRADIENT_RECT,*PGRADIENT_RECT,*LPGRADIENT_RECT;
  3309.  
  3310. typedef struct _BLENDFUNCTION
  3311. {
  3312.     BYTE   BlendOp;
  3313.     BYTE   BlendFlags;
  3314.     BYTE   SourceConstantAlpha;
  3315.     BYTE   AlphaFormat;
  3316. }BLENDFUNCTION,*PBLENDFUNCTION;
  3317.  
  3318.  
  3319. //
  3320. // currentlly defined blend function
  3321. //
  3322.  
  3323. #define AC_SRC_OVER                 0x00
  3324.  
  3325. //
  3326. // alpha format flags
  3327. //
  3328.  
  3329. #define AC_SRC_NO_PREMULT_ALPHA     0x01
  3330. #define AC_SRC_NO_ALPHA             0x02
  3331. #define AC_DST_NO_PREMULT_ALPHA     0x10
  3332. #define AC_DST_NO_ALPHA             0x20
  3333.  
  3334. WINGDIAPI BOOL  WINAPI AlphaBlend(HDC,int,int,int,int,HDC,int,int,int,int,BLENDFUNCTION);
  3335.  
  3336. WINGDIAPI BOOL  WINAPI AlphaDIBBlend(HDC,int,int,int,int,CONST VOID *,
  3337.         CONST BITMAPINFO *,UINT,int,int,int,int,BLENDFUNCTION);
  3338.  
  3339. WINGDIAPI BOOL  WINAPI TransparentBlt(HDC,int,int,int,int,HDC,int,int,int,int,UINT);
  3340.  
  3341. WINGDIAPI BOOL  WINAPI TransparentDIBits(HDC,int,int,int,int,CONST VOID *,
  3342.         CONST BITMAPINFO *,UINT,int,int,int,int,UINT);
  3343.  
  3344. //
  3345. // gradient drawing modes
  3346. //
  3347.  
  3348. #define GRADIENT_FILL_RECT_H    0x00000000
  3349. #define GRADIENT_FILL_RECT_V    0x00000001
  3350. #define GRADIENT_FILL_TRIANGLE  0x00000002
  3351. #define GRADIENT_FILL_OP_FLAG   0x000000ff
  3352.  
  3353. WINGDIAPI BOOL  WINAPI GradientFill(HDC,PTRIVERTEX,ULONG,PVOID,ULONG,ULONG);
  3354.  
  3355. #endif
  3356.  
  3357.  
  3358. #ifndef NOMETAFILE
  3359.  
  3360. WINGDIAPI BOOL  WINAPI PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT);
  3361. typedef int (CALLBACK* MFENUMPROC)(HDC, HANDLETABLE FAR*, METARECORD FAR*, int, LPARAM);
  3362. WINGDIAPI BOOL  WINAPI EnumMetaFile(HDC, HMETAFILE, MFENUMPROC, LPARAM);
  3363.  
  3364. typedef int (CALLBACK* ENHMFENUMPROC)(HDC, HANDLETABLE FAR*, CONST ENHMETARECORD *, int, LPARAM);
  3365.  
  3366. // Enhanced Metafile Function Declarations
  3367.  
  3368. WINGDIAPI HENHMETAFILE WINAPI CloseEnhMetaFile(HDC);
  3369. WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileA(HENHMETAFILE, LPCSTR);
  3370. WINGDIAPI HENHMETAFILE WINAPI CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR);
  3371. #ifdef UNICODE
  3372. #define CopyEnhMetaFile  CopyEnhMetaFileW
  3373. #else
  3374. #define CopyEnhMetaFile  CopyEnhMetaFileA
  3375. #endif // !UNICODE
  3376. WINGDIAPI HDC   WINAPI CreateEnhMetaFileA(HDC, LPCSTR, CONST RECT *, LPCSTR);
  3377. WINGDIAPI HDC   WINAPI CreateEnhMetaFileW(HDC, LPCWSTR, CONST RECT *, LPCWSTR);
  3378. #ifdef UNICODE
  3379. #define CreateEnhMetaFile  CreateEnhMetaFileW
  3380. #else
  3381. #define CreateEnhMetaFile  CreateEnhMetaFileA
  3382. #endif // !UNICODE
  3383. WINGDIAPI BOOL  WINAPI DeleteEnhMetaFile(HENHMETAFILE);
  3384. WINGDIAPI BOOL  WINAPI EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMFENUMPROC,
  3385.         LPVOID, CONST RECT *);
  3386. WINGDIAPI HENHMETAFILE  WINAPI GetEnhMetaFileA(LPCSTR);
  3387. WINGDIAPI HENHMETAFILE  WINAPI GetEnhMetaFileW(LPCWSTR);
  3388. #ifdef UNICODE
  3389. #define GetEnhMetaFile  GetEnhMetaFileW
  3390. #else
  3391. #define GetEnhMetaFile  GetEnhMetaFileA
  3392. #endif // !UNICODE
  3393. WINGDIAPI UINT  WINAPI GetEnhMetaFileBits(HENHMETAFILE, UINT, LPBYTE);
  3394. WINGDIAPI UINT  WINAPI GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR );
  3395. WINGDIAPI UINT  WINAPI GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR );
  3396. #ifdef UNICODE
  3397. #define GetEnhMetaFileDescription  GetEnhMetaFileDescriptionW
  3398. #else
  3399. #define GetEnhMetaFileDescription  GetEnhMetaFileDescriptionA
  3400. #endif // !UNICODE
  3401. WINGDIAPI UINT  WINAPI GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER );
  3402. WINGDIAPI UINT  WINAPI GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY );
  3403. WINGDIAPI UINT  WINAPI GetEnhMetaFilePixelFormat(HENHMETAFILE, UINT,
  3404.                                                  PIXELFORMATDESCRIPTOR *);
  3405. WINGDIAPI UINT  WINAPI GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, INT, HDC);
  3406. WINGDIAPI BOOL  WINAPI PlayEnhMetaFile(HDC, HENHMETAFILE, CONST RECT *);
  3407. WINGDIAPI BOOL  WINAPI PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, CONST ENHMETARECORD *, UINT);
  3408. WINGDIAPI HENHMETAFILE  WINAPI SetEnhMetaFileBits(UINT, CONST BYTE *);
  3409. WINGDIAPI HENHMETAFILE  WINAPI SetWinMetaFileBits(UINT, CONST BYTE *, HDC, CONST METAFILEPICT *);
  3410. WINGDIAPI BOOL  WINAPI GdiComment(HDC, UINT, CONST BYTE *);
  3411.  
  3412. #endif  /* NOMETAFILE */
  3413.  
  3414. #ifndef NOTEXTMETRIC
  3415.  
  3416. WINGDIAPI BOOL WINAPI GetTextMetricsA(HDC, LPTEXTMETRICA);
  3417. WINGDIAPI BOOL WINAPI GetTextMetricsW(HDC, LPTEXTMETRICW);
  3418. #ifdef UNICODE
  3419. #define GetTextMetrics  GetTextMetricsW
  3420. #else
  3421. #define GetTextMetrics  GetTextMetricsA
  3422. #endif // !UNICODE
  3423.  
  3424. #endif
  3425.  
  3426. /* new GDI */
  3427.  
  3428. typedef struct tagDIBSECTION {
  3429.     BITMAP              dsBm;
  3430.     BITMAPINFOHEADER    dsBmih;
  3431.     DWORD               dsBitfields[3];
  3432.     HANDLE              dshSection;
  3433.     DWORD               dsOffset;
  3434. } DIBSECTION, FAR *LPDIBSECTION, *PDIBSECTION;
  3435.  
  3436. WINGDIAPI BOOL WINAPI AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT);
  3437. WINGDIAPI BOOL WINAPI PolyPolyline(HDC, CONST POINT *, CONST DWORD *, DWORD);
  3438. WINGDIAPI BOOL WINAPI GetWorldTransform(HDC, LPXFORM);
  3439. WINGDIAPI BOOL WINAPI SetWorldTransform(HDC, CONST XFORM *);
  3440. WINGDIAPI BOOL WINAPI ModifyWorldTransform(HDC, CONST XFORM *, DWORD);
  3441. WINGDIAPI BOOL WINAPI CombineTransform(LPXFORM, CONST XFORM *, CONST XFORM *);
  3442. WINGDIAPI HBITMAP WINAPI CreateDIBSection(HDC, CONST BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);
  3443. WINGDIAPI UINT WINAPI GetDIBColorTable(HDC, UINT, UINT, RGBQUAD *);
  3444. WINGDIAPI UINT WINAPI SetDIBColorTable(HDC, UINT, UINT, CONST RGBQUAD *);
  3445.  
  3446. /* Flags value for COLORADJUSTMENT */
  3447. #define CA_NEGATIVE                 0x0001
  3448. #define CA_LOG_FILTER               0x0002
  3449.  
  3450. /* IlluminantIndex values */
  3451. #define ILLUMINANT_DEVICE_DEFAULT   0
  3452. #define ILLUMINANT_A                1
  3453. #define ILLUMINANT_B                2
  3454. #define ILLUMINANT_C                3
  3455. #define ILLUMINANT_D50              4
  3456. #define ILLUMINANT_D55              5
  3457. #define ILLUMINANT_D65              6
  3458. #define ILLUMINANT_D75              7
  3459. #define ILLUMINANT_F2               8
  3460. #define ILLUMINANT_MAX_INDEX        ILLUMINANT_F2
  3461.  
  3462. #define ILLUMINANT_TUNGSTEN         ILLUMINANT_A
  3463. #define ILLUMINANT_DAYLIGHT         ILLUMINANT_C
  3464. #define ILLUMINANT_FLUORESCENT      ILLUMINANT_F2
  3465. #define ILLUMINANT_NTSC             ILLUMINANT_C
  3466.  
  3467. /* Min and max for RedGamma, GreenGamma, BlueGamma */
  3468. #define RGB_GAMMA_MIN               (WORD)02500
  3469. #define RGB_GAMMA_MAX               (WORD)65000
  3470.  
  3471. /* Min and max for ReferenceBlack and ReferenceWhite */
  3472. #define REFERENCE_WHITE_MIN         (WORD)6000
  3473. #define REFERENCE_WHITE_MAX         (WORD)10000
  3474. #define REFERENCE_BLACK_MIN         (WORD)0
  3475. #define REFERENCE_BLACK_MAX         (WORD)4000
  3476.  
  3477. /* Min and max for Contrast, Brightness, Colorfulness, RedGreenTint */
  3478. #define COLOR_ADJ_MIN               (SHORT)-100
  3479. #define COLOR_ADJ_MAX               (SHORT)100
  3480.  
  3481. typedef struct  tagCOLORADJUSTMENT {
  3482.     WORD   caSize;
  3483.     WORD   caFlags;
  3484.     WORD   caIlluminantIndex;
  3485.     WORD   caRedGamma;
  3486.     WORD   caGreenGamma;
  3487.     WORD   caBlueGamma;
  3488.     WORD   caReferenceBlack;
  3489.     WORD   caReferenceWhite;
  3490.     SHORT  caContrast;
  3491.     SHORT  caBrightness;
  3492.     SHORT  caColorfulness;
  3493.     SHORT  caRedGreenTint;
  3494. } COLORADJUSTMENT, *PCOLORADJUSTMENT, FAR *LPCOLORADJUSTMENT;
  3495.  
  3496. WINGDIAPI BOOL WINAPI SetColorAdjustment(HDC, CONST COLORADJUSTMENT *);
  3497. WINGDIAPI BOOL WINAPI GetColorAdjustment(HDC, LPCOLORADJUSTMENT);
  3498. WINGDIAPI HPALETTE WINAPI CreateHalftonePalette(HDC);
  3499.  
  3500. #ifdef STRICT
  3501. typedef BOOL (CALLBACK* ABORTPROC)(HDC, int);
  3502. #else
  3503. typedef FARPROC ABORTPROC;
  3504. #endif
  3505.  
  3506. typedef struct _DOCINFOA {
  3507.     int     cbSize;
  3508.     LPCSTR   lpszDocName;
  3509.     LPCSTR   lpszOutput;
  3510. #if (WINVER >= 0x0400)
  3511.     LPCSTR   lpszDatatype;
  3512.     DWORD    fwType;
  3513. #endif /* WINVER */
  3514. } DOCINFOA, *LPDOCINFOA;
  3515. typedef struct _DOCINFOW {
  3516.     int     cbSize;
  3517.     LPCWSTR  lpszDocName;
  3518.     LPCWSTR  lpszOutput;
  3519. #if (WINVER >= 0x0400)
  3520.     LPCWSTR  lpszDatatype;
  3521.     DWORD    fwType;
  3522. #endif /* WINVER */
  3523. } DOCINFOW, *LPDOCINFOW;
  3524. #ifdef UNICODE
  3525. typedef DOCINFOW DOCINFO;
  3526. typedef LPDOCINFOW LPDOCINFO;
  3527. #else
  3528. typedef DOCINFOA DOCINFO;
  3529. typedef LPDOCINFOA LPDOCINFO;
  3530. #endif // UNICODE
  3531.  
  3532. #if(WINVER >= 0x0400)
  3533. #define DI_APPBANDING               0x00000001
  3534. #define DI_ROPS_READ_DESTINATION    0x00000002
  3535. #endif /* WINVER >= 0x0400 */
  3536.  
  3537. WINGDIAPI int WINAPI StartDocA(HDC, CONST DOCINFOA *);
  3538. WINGDIAPI int WINAPI StartDocW(HDC, CONST DOCINFOW *);
  3539. #ifdef UNICODE
  3540. #define StartDoc  StartDocW
  3541. #else
  3542. #define StartDoc  StartDocA
  3543. #endif // !UNICODE
  3544. WINGDIAPI int WINAPI EndDoc(HDC);
  3545. WINGDIAPI int WINAPI StartPage(HDC);
  3546. WINGDIAPI int WINAPI EndPage(HDC);
  3547. WINGDIAPI int WINAPI AbortDoc(HDC);
  3548. WINGDIAPI int WINAPI SetAbortProc(HDC, ABORTPROC);
  3549.  
  3550. WINGDIAPI BOOL WINAPI AbortPath(HDC);
  3551. WINGDIAPI BOOL WINAPI ArcTo(HDC, int, int, int, int, int, int,int, int);
  3552. WINGDIAPI BOOL WINAPI BeginPath(HDC);
  3553. WINGDIAPI BOOL WINAPI CloseFigure(HDC);
  3554. WINGDIAPI BOOL WINAPI EndPath(HDC);
  3555. WINGDIAPI BOOL WINAPI FillPath(HDC);
  3556. WINGDIAPI BOOL WINAPI FlattenPath(HDC);
  3557. WINGDIAPI int  WINAPI GetPath(HDC, LPPOINT, LPBYTE, int);
  3558. WINGDIAPI HRGN WINAPI PathToRegion(HDC);
  3559. WINGDIAPI BOOL WINAPI PolyDraw(HDC, CONST POINT *, CONST BYTE *, int);
  3560. WINGDIAPI BOOL WINAPI SelectClipPath(HDC, int);
  3561. WINGDIAPI int  WINAPI SetArcDirection(HDC, int);
  3562. WINGDIAPI BOOL WINAPI SetMiterLimit(HDC, FLOAT, PFLOAT);
  3563. WINGDIAPI BOOL WINAPI StrokeAndFillPath(HDC);
  3564. WINGDIAPI BOOL WINAPI StrokePath(HDC);
  3565. WINGDIAPI BOOL WINAPI WidenPath(HDC);
  3566. WINGDIAPI HPEN WINAPI ExtCreatePen(DWORD, DWORD, CONST LOGBRUSH *, DWORD, CONST DWORD *);
  3567. WINGDIAPI BOOL WINAPI GetMiterLimit(HDC, PFLOAT);
  3568. WINGDIAPI int  WINAPI GetArcDirection(HDC);
  3569.  
  3570. WINGDIAPI int   WINAPI GetObjectA(HGDIOBJ, int, LPVOID);
  3571. WINGDIAPI int   WINAPI GetObjectW(HGDIOBJ, int, LPVOID);
  3572. #ifdef UNICODE
  3573. #define GetObject  GetObjectW
  3574. #else
  3575. #define GetObject  GetObjectA
  3576. #endif // !UNICODE
  3577. WINGDIAPI BOOL  WINAPI MoveToEx(HDC, int, int, LPPOINT);
  3578. WINGDIAPI BOOL  WINAPI TextOutA(HDC, int, int, LPCSTR, int);
  3579. WINGDIAPI BOOL  WINAPI TextOutW(HDC, int, int, LPCWSTR, int);
  3580. #ifdef UNICODE
  3581. #define TextOut  TextOutW
  3582. #else
  3583. #define TextOut  TextOutA
  3584. #endif // !UNICODE
  3585. WINGDIAPI BOOL  WINAPI ExtTextOutA(HDC, int, int, UINT, CONST RECT *,LPCSTR, UINT, CONST INT *);
  3586. WINGDIAPI BOOL  WINAPI ExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *);
  3587. #ifdef UNICODE
  3588. #define ExtTextOut  ExtTextOutW
  3589. #else
  3590. #define ExtTextOut  ExtTextOutA
  3591. #endif // !UNICODE
  3592. WINGDIAPI BOOL  WINAPI PolyTextOutA(HDC, CONST POLYTEXTA *, int);
  3593. WINGDIAPI BOOL  WINAPI PolyTextOutW(HDC, CONST POLYTEXTW *, int);
  3594. #ifdef UNICODE
  3595. #define PolyTextOut  PolyTextOutW
  3596. #else
  3597. #define PolyTextOut  PolyTextOutA
  3598. #endif // !UNICODE
  3599.  
  3600. WINGDIAPI HRGN  WINAPI CreatePolygonRgn(CONST POINT *, int, int);
  3601. WINGDIAPI BOOL  WINAPI DPtoLP(HDC, LPPOINT, int);
  3602. WINGDIAPI BOOL  WINAPI LPtoDP(HDC, LPPOINT, int);
  3603. WINGDIAPI BOOL  WINAPI Polygon(HDC, CONST POINT *, int);
  3604. WINGDIAPI BOOL  WINAPI Polyline(HDC, CONST POINT *, int);
  3605.  
  3606. WINGDIAPI BOOL  WINAPI PolyBezier(HDC, CONST POINT *, DWORD);
  3607. WINGDIAPI BOOL  WINAPI PolyBezierTo(HDC, CONST POINT *, DWORD);
  3608. WINGDIAPI BOOL  WINAPI PolylineTo(HDC, CONST POINT *, DWORD);
  3609.  
  3610. WINGDIAPI BOOL  WINAPI SetViewportExtEx(HDC, int, int, LPSIZE);
  3611. WINGDIAPI BOOL  WINAPI SetViewportOrgEx(HDC, int, int, LPPOINT);
  3612. WINGDIAPI BOOL  WINAPI SetWindowExtEx(HDC, int, int, LPSIZE);
  3613. WINGDIAPI BOOL  WINAPI SetWindowOrgEx(HDC, int, int, LPPOINT);
  3614.  
  3615. WINGDIAPI BOOL  WINAPI OffsetViewportOrgEx(HDC, int, int, LPPOINT);
  3616. WINGDIAPI BOOL  WINAPI OffsetWindowOrgEx(HDC, int, int, LPPOINT);
  3617. WINGDIAPI BOOL  WINAPI ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE);
  3618. WINGDIAPI BOOL  WINAPI ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE);
  3619. WINGDIAPI BOOL  WINAPI SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE);
  3620. WINGDIAPI BOOL  WINAPI SetBrushOrgEx(HDC, int, int, LPPOINT);
  3621.  
  3622. WINGDIAPI int   WINAPI GetTextFaceA(HDC, int, LPSTR);
  3623. WINGDIAPI int   WINAPI GetTextFaceW(HDC, int, LPWSTR);
  3624. #ifdef UNICODE
  3625. #define GetTextFace  GetTextFaceW
  3626. #else
  3627. #define GetTextFace  GetTextFaceA
  3628. #endif // !UNICODE
  3629.  
  3630. #define FONTMAPPER_MAX 10
  3631.  
  3632. typedef struct tagKERNINGPAIR {
  3633.    WORD wFirst;
  3634.    WORD wSecond;
  3635.    int  iKernAmount;
  3636. } KERNINGPAIR, *LPKERNINGPAIR;
  3637.  
  3638. WINGDIAPI DWORD WINAPI GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR);
  3639. WINGDIAPI DWORD WINAPI GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR);
  3640. #ifdef UNICODE
  3641. #define GetKerningPairs  GetKerningPairsW
  3642. #else
  3643. #define GetKerningPairs  GetKerningPairsA
  3644. #endif // !UNICODE
  3645.  
  3646. WINGDIAPI BOOL  WINAPI GetDCOrgEx(HDC,LPPOINT);
  3647. WINGDIAPI BOOL  WINAPI FixBrushOrgEx(HDC,int,int,LPPOINT);
  3648. WINGDIAPI BOOL  WINAPI UnrealizeObject(HGDIOBJ);
  3649.  
  3650. WINGDIAPI BOOL  WINAPI GdiFlush();
  3651. WINGDIAPI DWORD WINAPI GdiSetBatchLimit(DWORD);
  3652. WINGDIAPI DWORD WINAPI GdiGetBatchLimit();
  3653.  
  3654.  
  3655. #if(WINVER >= 0x0400)
  3656.  
  3657. #define ICM_OFF               1
  3658. #define ICM_ON                2
  3659. #define ICM_QUERY             3
  3660. #define ICM_DONE_OUTSIDEDC    4
  3661.  
  3662. typedef int (CALLBACK* ICMENUMPROCA)(LPSTR, LPARAM);
  3663. typedef int (CALLBACK* ICMENUMPROCW)(LPWSTR, LPARAM);
  3664. #ifdef UNICODE
  3665. #define ICMENUMPROC  ICMENUMPROCW
  3666. #else
  3667. #define ICMENUMPROC  ICMENUMPROCA
  3668. #endif // !UNICODE
  3669.  
  3670. WINGDIAPI int         WINAPI SetICMMode(HDC, int);
  3671. WINGDIAPI BOOL        WINAPI CheckColorsInGamut(HDC,LPVOID,LPVOID,DWORD);
  3672. WINGDIAPI HCOLORSPACE WINAPI GetColorSpace(HDC);
  3673. WINGDIAPI BOOL        WINAPI GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACEA,DWORD);
  3674. WINGDIAPI BOOL        WINAPI GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACEW,DWORD);
  3675. #ifdef UNICODE
  3676. #define GetLogColorSpace  GetLogColorSpaceW
  3677. #else
  3678. #define GetLogColorSpace  GetLogColorSpaceA
  3679. #endif // !UNICODE
  3680. WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceA(LPLOGCOLORSPACEA);
  3681. WINGDIAPI HCOLORSPACE WINAPI CreateColorSpaceW(LPLOGCOLORSPACEW);
  3682. #ifdef UNICODE
  3683. #define CreateColorSpace  CreateColorSpaceW
  3684. #else
  3685. #define CreateColorSpace  CreateColorSpaceA
  3686. #endif // !UNICODE
  3687. WINGDIAPI HCOLORSPACE WINAPI SetColorSpace(HDC,HCOLORSPACE);
  3688. WINGDIAPI BOOL        WINAPI DeleteColorSpace(HCOLORSPACE);
  3689. WINGDIAPI BOOL        WINAPI GetICMProfileA(HDC,LPDWORD,LPSTR);
  3690. WINGDIAPI BOOL        WINAPI GetICMProfileW(HDC,LPDWORD,LPWSTR);
  3691. #ifdef UNICODE
  3692. #define GetICMProfile  GetICMProfileW
  3693. #else
  3694. #define GetICMProfile  GetICMProfileA
  3695. #endif // !UNICODE
  3696. WINGDIAPI BOOL        WINAPI SetICMProfileA(HDC,LPSTR);
  3697. WINGDIAPI BOOL        WINAPI SetICMProfileW(HDC,LPWSTR);
  3698. #ifdef UNICODE
  3699. #define SetICMProfile  SetICMProfileW
  3700. #else
  3701. #define SetICMProfile  SetICMProfileA
  3702. #endif // !UNICODE
  3703. WINGDIAPI BOOL        WINAPI GetDeviceGammaRamp(HDC,LPVOID);
  3704. WINGDIAPI BOOL        WINAPI SetDeviceGammaRamp(HDC,LPVOID);
  3705. WINGDIAPI BOOL        WINAPI ColorMatchToTarget(HDC,HDC,DWORD);
  3706. WINGDIAPI int         WINAPI EnumICMProfilesA(HDC,ICMENUMPROCA,LPARAM);
  3707. WINGDIAPI int         WINAPI EnumICMProfilesW(HDC,ICMENUMPROCW,LPARAM);
  3708. #ifdef UNICODE
  3709. #define EnumICMProfiles  EnumICMProfilesW
  3710. #else
  3711. #define EnumICMProfiles  EnumICMProfilesA
  3712. #endif // !UNICODE
  3713. WINGDIAPI BOOL        WINAPI UpdateICMRegKeyA(DWORD,LPSTR,LPSTR,UINT);
  3714. WINGDIAPI BOOL        WINAPI UpdateICMRegKeyW(DWORD,LPWSTR,LPWSTR,UINT);
  3715. #ifdef UNICODE
  3716. #define UpdateICMRegKey  UpdateICMRegKeyW
  3717. #else
  3718. #define UpdateICMRegKey  UpdateICMRegKeyA
  3719. #endif // !UNICODE
  3720. #endif /* WINVER >= 0x0400 */
  3721.  
  3722. #if (WINVER >= 0x0500)
  3723. WINGDIAPI BOOL        WINAPI ColorCorrectPalette(HDC,HPALETTE,DWORD,DWORD);
  3724. #endif
  3725.  
  3726. #ifndef NOMETAFILE
  3727.  
  3728. // Enhanced metafile constants.
  3729.  
  3730. #ifndef _MAC
  3731. #define ENHMETA_SIGNATURE       0x464D4520
  3732. #else
  3733. #define ENHMETA_SIGNATURE       0x20454D46
  3734. #endif
  3735.  
  3736. // Stock object flag used in the object handle index in the enhanced
  3737. // metafile records.
  3738. // E.g. The object handle index (META_STOCK_OBJECT | BLACK_BRUSH)
  3739. // represents the stock object BLACK_BRUSH.
  3740.  
  3741. #define ENHMETA_STOCK_OBJECT    0x80000000
  3742.  
  3743. // Enhanced metafile record types.
  3744.  
  3745. #define EMR_HEADER                      1
  3746. #define EMR_POLYBEZIER                  2
  3747. #define EMR_POLYGON                     3
  3748. #define EMR_POLYLINE                    4
  3749. #define EMR_POLYBEZIERTO                5
  3750. #define EMR_POLYLINETO                  6
  3751. #define EMR_POLYPOLYLINE                7
  3752. #define EMR_POLYPOLYGON                 8
  3753. #define EMR_SETWINDOWEXTEX              9
  3754. #define EMR_SETWINDOWORGEX              10
  3755. #define EMR_SETVIEWPORTEXTEX            11
  3756. #define EMR_SETVIEWPORTORGEX            12
  3757. #define EMR_SETBRUSHORGEX               13
  3758. #define EMR_EOF                         14
  3759. #define EMR_SETPIXELV                   15
  3760. #define EMR_SETMAPPERFLAGS              16
  3761. #define EMR_SETMAPMODE                  17
  3762. #define EMR_SETBKMODE                   18
  3763. #define EMR_SETPOLYFILLMODE             19
  3764. #define EMR_SETROP2                     20
  3765. #define EMR_SETSTRETCHBLTMODE           21
  3766. #define EMR_SETTEXTALIGN                22
  3767. #define EMR_SETCOLORADJUSTMENT          23
  3768. #define EMR_SETTEXTCOLOR                24
  3769. #define EMR_SETBKCOLOR                  25
  3770. #define EMR_OFFSETCLIPRGN               26
  3771. #define EMR_MOVETOEX                    27
  3772. #define EMR_SETMETARGN                  28
  3773. #define EMR_EXCLUDECLIPRECT             29
  3774. #define EMR_INTERSECTCLIPRECT           30
  3775. #define EMR_SCALEVIEWPORTEXTEX          31
  3776. #define EMR_SCALEWINDOWEXTEX            32
  3777. #define EMR_SAVEDC                      33
  3778. #define EMR_RESTOREDC                   34
  3779. #define EMR_SETWORLDTRANSFORM           35
  3780. #define EMR_MODIFYWORLDTRANSFORM        36
  3781. #define EMR_SELECTOBJECT                37
  3782. #define EMR_CREATEPEN                   38
  3783. #define EMR_CREATEBRUSHINDIRECT         39
  3784. #define EMR_DELETEOBJECT                40
  3785. #define EMR_ANGLEARC                    41
  3786. #define EMR_ELLIPSE                     42
  3787. #define EMR_RECTANGLE                   43
  3788. #define EMR_ROUNDRECT                   44
  3789. #define EMR_ARC                         45
  3790. #define EMR_CHORD                       46
  3791. #define EMR_PIE                         47
  3792. #define EMR_SELECTPALETTE               48
  3793. #define EMR_CREATEPALETTE               49
  3794. #define EMR_SETPALETTEENTRIES           50
  3795. #define EMR_RESIZEPALETTE               51
  3796. #define EMR_REALIZEPALETTE              52
  3797. #define EMR_EXTFLOODFILL                53
  3798. #define EMR_LINETO                      54
  3799. #define EMR_ARCTO                       55
  3800. #define EMR_POLYDRAW                    56
  3801. #define EMR_SETARCDIRECTION             57
  3802. #define EMR_SETMITERLIMIT               58
  3803. #define EMR_BEGINPATH                   59
  3804. #define EMR_ENDPATH                     60
  3805. #define EMR_CLOSEFIGURE                 61
  3806. #define EMR_FILLPATH                    62
  3807. #define EMR_STROKEANDFILLPATH           63
  3808. #define EMR_STROKEPATH                  64
  3809. #define EMR_FLATTENPATH                 65
  3810. #define EMR_WIDENPATH                   66
  3811. #define EMR_SELECTCLIPPATH              67
  3812. #define EMR_ABORTPATH                   68
  3813.  
  3814. #define EMR_GDICOMMENT                  70
  3815. #define EMR_FILLRGN                     71
  3816. #define EMR_FRAMERGN                    72
  3817. #define EMR_INVERTRGN                   73
  3818. #define EMR_PAINTRGN                    74
  3819. #define EMR_EXTSELECTCLIPRGN            75
  3820. #define EMR_BITBLT                      76
  3821. #define EMR_STRETCHBLT                  77
  3822. #define EMR_MASKBLT                     78
  3823. #define EMR_PLGBLT                      79
  3824. #define EMR_SETDIBITSTODEVICE           80
  3825. #define EMR_STRETCHDIBITS               81
  3826. #define EMR_EXTCREATEFONTINDIRECTW      82
  3827. #define EMR_EXTTEXTOUTA                 83
  3828. #define EMR_EXTTEXTOUTW                 84
  3829. #define EMR_POLYBEZIER16                85
  3830. #define EMR_POLYGON16                   86
  3831. #define EMR_POLYLINE16                  87
  3832. #define EMR_POLYBEZIERTO16              88
  3833. #define EMR_POLYLINETO16                89
  3834. #define EMR_POLYPOLYLINE16              90
  3835. #define EMR_POLYPOLYGON16               91
  3836. #define EMR_POLYDRAW16                  92
  3837. #define EMR_CREATEMONOBRUSH             93
  3838. #define EMR_CREATEDIBPATTERNBRUSHPT     94
  3839. #define EMR_EXTCREATEPEN                95
  3840. #define EMR_POLYTEXTOUTA                96
  3841. #define EMR_POLYTEXTOUTW                97
  3842.  
  3843. #if(WINVER >= 0x0400)
  3844. #define EMR_SETICMMODE                  98
  3845. #define EMR_CREATECOLORSPACE            99
  3846. #define EMR_SETCOLORSPACE              100
  3847. #define EMR_DELETECOLORSPACE           101
  3848. #define EMR_GLSRECORD                  102
  3849. #define EMR_GLSBOUNDEDRECORD           103
  3850. #define EMR_PIXELFORMAT                104
  3851. #endif /* WINVER >= 0x0400 */
  3852.  
  3853. #if (WINVER >= 0x0500)
  3854. #define EMR_DRAWESCAPE                 105
  3855. #define EMR_EXTESCAPE                  106
  3856. #define EMR_STARTDOC                   107
  3857. #define EMR_SMALLTEXTOUT               108
  3858. #define EMR_FORCEUFIMAPPING            109
  3859. #define EMR_NAMEDESCAPE                110
  3860. #define EMR_COLORCORRECTPALETTE        111
  3861. #define EMR_SETICMPROFILEA             112
  3862. #define EMR_SETICMPROFILEW             113
  3863. #define EMR_ALPHABLEND                 114
  3864. #define EMR_ALPHADIBBLEND              115
  3865. #define EMR_TRANSPARENTBLT             116
  3866. #define EMR_TRANSPARENTDIB             117
  3867. #define EMR_GRADIENTFILL               118
  3868. #define EMR_SETLINKEDUFIS              119
  3869. #define EMR_SETTEXTJUSTIFICATION       120
  3870. #endif
  3871.  
  3872. #define EMR_MIN                          1
  3873.  
  3874. #if (WINVER >= 0x0500)
  3875. #define EMR_MAX                        120
  3876. #elif (WINVER >= 0x0400)
  3877. #define EMR_MAX                        104
  3878. #else
  3879. #define EMR_MAX                         97
  3880. #endif
  3881.  
  3882. // Base record type for the enhanced metafile.
  3883.  
  3884. typedef struct tagEMR
  3885. {
  3886.     DWORD   iType;              // Enhanced metafile record type
  3887.     DWORD   nSize;              // Length of the record in bytes.
  3888.                                 // This must be a multiple of 4.
  3889. } EMR, *PEMR;
  3890.  
  3891. // Base text record type for the enhanced metafile.
  3892.  
  3893. typedef struct tagEMRTEXT
  3894. {
  3895.     POINTL  ptlReference;
  3896.     DWORD   nChars;
  3897.     DWORD   offString;          // Offset to the string
  3898.     DWORD   fOptions;
  3899.     RECTL   rcl;
  3900.     DWORD   offDx;              // Offset to the inter-character spacing array.
  3901.                                 // This is always given.
  3902. } EMRTEXT, *PEMRTEXT;
  3903.  
  3904. // Record structures for the enhanced metafile.
  3905.  
  3906. typedef struct tagABORTPATH
  3907. {
  3908.     EMR     emr;
  3909. } EMRABORTPATH,      *PEMRABORTPATH,
  3910.   EMRBEGINPATH,      *PEMRBEGINPATH,
  3911.   EMRENDPATH,        *PEMRENDPATH,
  3912.   EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,
  3913.   EMRFLATTENPATH,    *PEMRFLATTENPATH,
  3914.   EMRWIDENPATH,      *PEMRWIDENPATH,
  3915.   EMRSETMETARGN,     *PEMRSETMETARGN,
  3916.   EMRSAVEDC,         *PEMRSAVEDC,
  3917.   EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
  3918.  
  3919. typedef struct tagEMRSELECTCLIPPATH
  3920. {
  3921.     EMR     emr;
  3922.     DWORD   iMode;
  3923. } EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,
  3924.   EMRSETBKMODE,         *PEMRSETBKMODE,
  3925.   EMRSETMAPMODE,        *PEMRSETMAPMODE,
  3926.   EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,
  3927.   EMRSETROP2,           *PEMRSETROP2,
  3928.   EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
  3929.   EMRSETICMMODE,        *PEMRSETICMMODE,
  3930.   EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN;
  3931.  
  3932. typedef struct tagEMRSETMITERLIMIT
  3933. {
  3934.     EMR     emr;
  3935.     FLOAT   eMiterLimit;
  3936. } EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
  3937.  
  3938. typedef struct tagEMRRESTOREDC
  3939. {
  3940.     EMR     emr;
  3941.     LONG    iRelative;          // Specifies a relative instance
  3942. } EMRRESTOREDC, *PEMRRESTOREDC;
  3943.  
  3944. typedef struct tagEMRSETARCDIRECTION
  3945. {
  3946.     EMR     emr;
  3947.     DWORD   iArcDirection;      // Specifies the arc direction in the
  3948.                                 // advanced graphics mode.
  3949. } EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
  3950.  
  3951. typedef struct tagEMRSETMAPPERFLAGS
  3952. {
  3953.     EMR     emr;
  3954.     DWORD   dwFlags;
  3955. } EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
  3956.  
  3957. typedef struct tagEMRSETTEXTCOLOR
  3958. {
  3959.     EMR     emr;
  3960.     COLORREF crColor;
  3961. } EMRSETBKCOLOR,   *PEMRSETBKCOLOR,
  3962.   EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
  3963.  
  3964. typedef struct tagEMRSELECTOBJECT
  3965. {
  3966.     EMR     emr;
  3967.     DWORD   ihObject;           // Object handle index
  3968. } EMRSELECTOBJECT, *PEMRSELECTOBJECT,
  3969.   EMRDELETEOBJECT, *PEMRDELETEOBJECT;
  3970.  
  3971. #if(WINVER >= 0x0400)
  3972. typedef struct tagEMRSELECTCOLORSPACE
  3973. {
  3974.     EMR     emr;
  3975.     DWORD   ihCS;               // ColorSpace handle index
  3976. } EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
  3977.   EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE;
  3978. #endif /* WINVER >= 0x0400 */
  3979.  
  3980. typedef struct tagEMRSELECTPALETTE
  3981. {
  3982.     EMR     emr;
  3983.     DWORD   ihPal;              // Palette handle index, background mode only
  3984. } EMRSELECTPALETTE, *PEMRSELECTPALETTE;
  3985.  
  3986. typedef struct tagEMRRESIZEPALETTE
  3987. {
  3988.     EMR     emr;
  3989.     DWORD   ihPal;              // Palette handle index
  3990.     DWORD   cEntries;
  3991. } EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
  3992.  
  3993. typedef struct tagEMRSETPALETTEENTRIES
  3994. {
  3995.     EMR     emr;
  3996.     DWORD   ihPal;              // Palette handle index
  3997.     DWORD   iStart;
  3998.     DWORD   cEntries;
  3999.     PALETTEENTRY aPalEntries[1];// The peFlags fields do not contain any flags
  4000. } EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
  4001.  
  4002. typedef struct tagEMRSETCOLORADJUSTMENT
  4003. {
  4004.     EMR     emr;
  4005.     COLORADJUSTMENT ColorAdjustment;
  4006. } EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
  4007.  
  4008. typedef struct tagEMRGDICOMMENT
  4009. {
  4010.     EMR     emr;
  4011.     DWORD   cbData;             // Size of data in bytes
  4012.     BYTE    Data[1];
  4013. } EMRGDICOMMENT, *PEMRGDICOMMENT;
  4014.  
  4015. typedef struct tagEMREOF
  4016. {
  4017.     EMR     emr;
  4018.     DWORD   nPalEntries;        // Number of palette entries
  4019.     DWORD   offPalEntries;      // Offset to the palette entries
  4020.     DWORD   nSizeLast;          // Same as nSize and must be the last DWORD
  4021.                                 // of the record.  The palette entries,
  4022.                                 // if exist, precede this field.
  4023. } EMREOF, *PEMREOF;
  4024.  
  4025. typedef struct tagEMRLINETO
  4026. {
  4027.     EMR     emr;
  4028.     POINTL  ptl;
  4029. } EMRLINETO,   *PEMRLINETO,
  4030.   EMRMOVETOEX, *PEMRMOVETOEX;
  4031.  
  4032. typedef struct tagEMROFFSETCLIPRGN
  4033. {
  4034.     EMR     emr;
  4035.     POINTL  ptlOffset;
  4036. } EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
  4037.  
  4038. typedef struct tagEMRFILLPATH
  4039. {
  4040.     EMR     emr;
  4041.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4042. } EMRFILLPATH,          *PEMRFILLPATH,
  4043.   EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
  4044.   EMRSTROKEPATH,        *PEMRSTROKEPATH;
  4045.  
  4046. typedef struct tagEMREXCLUDECLIPRECT
  4047. {
  4048.     EMR     emr;
  4049.     RECTL   rclClip;
  4050. } EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,
  4051.   EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
  4052.  
  4053. typedef struct tagEMRSETVIEWPORTORGEX
  4054. {
  4055.     EMR     emr;
  4056.     POINTL  ptlOrigin;
  4057. } EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
  4058.   EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX,
  4059.   EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX;
  4060.  
  4061. typedef struct tagEMRSETVIEWPORTEXTEX
  4062. {
  4063.     EMR     emr;
  4064.     SIZEL   szlExtent;
  4065. } EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
  4066.   EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;
  4067.  
  4068. typedef struct tagEMRSCALEVIEWPORTEXTEX
  4069. {
  4070.     EMR     emr;
  4071.     LONG    xNum;
  4072.     LONG    xDenom;
  4073.     LONG    yNum;
  4074.     LONG    yDenom;
  4075. } EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
  4076.   EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;
  4077.  
  4078. typedef struct tagEMRSETWORLDTRANSFORM
  4079. {
  4080.     EMR     emr;
  4081.     XFORM   xform;
  4082. } EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
  4083.  
  4084. typedef struct tagEMRMODIFYWORLDTRANSFORM
  4085. {
  4086.     EMR     emr;
  4087.     XFORM   xform;
  4088.     DWORD   iMode;
  4089. } EMRMODIFYWORLDTRANSFORM, *PEMRMODIFYWORLDTRANSFORM;
  4090.  
  4091. typedef struct tagEMRSETPIXELV
  4092. {
  4093.     EMR     emr;
  4094.     POINTL  ptlPixel;
  4095.     COLORREF crColor;
  4096. } EMRSETPIXELV, *PEMRSETPIXELV;
  4097.  
  4098. typedef struct tagEMREXTFLOODFILL
  4099. {
  4100.     EMR     emr;
  4101.     POINTL  ptlStart;
  4102.     COLORREF crColor;
  4103.     DWORD   iMode;
  4104. } EMREXTFLOODFILL, *PEMREXTFLOODFILL;
  4105.  
  4106. typedef struct tagEMRELLIPSE
  4107. {
  4108.     EMR     emr;
  4109.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  4110. } EMRELLIPSE,  *PEMRELLIPSE,
  4111.   EMRRECTANGLE, *PEMRRECTANGLE;
  4112.  
  4113. typedef struct tagEMRROUNDRECT
  4114. {
  4115.     EMR     emr;
  4116.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  4117.     SIZEL   szlCorner;
  4118. } EMRROUNDRECT, *PEMRROUNDRECT;
  4119.  
  4120. typedef struct tagEMRARC
  4121. {
  4122.     EMR     emr;
  4123.     RECTL   rclBox;             // Inclusive-inclusive bounding rectangle
  4124.     POINTL  ptlStart;
  4125.     POINTL  ptlEnd;
  4126. } EMRARC,   *PEMRARC,
  4127.   EMRARCTO, *PEMRARCTO,
  4128.   EMRCHORD, *PEMRCHORD,
  4129.   EMRPIE,   *PEMRPIE;
  4130.  
  4131. typedef struct tagEMRANGLEARC
  4132. {
  4133.     EMR     emr;
  4134.     POINTL  ptlCenter;
  4135.     DWORD   nRadius;
  4136.     FLOAT   eStartAngle;
  4137.     FLOAT   eSweepAngle;
  4138. } EMRANGLEARC, *PEMRANGLEARC;
  4139.  
  4140. typedef struct tagEMRPOLYLINE
  4141. {
  4142.     EMR     emr;
  4143.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4144.     DWORD   cptl;
  4145.     POINTL  aptl[1];
  4146. } EMRPOLYLINE,     *PEMRPOLYLINE,
  4147.   EMRPOLYBEZIER,   *PEMRPOLYBEZIER,
  4148.   EMRPOLYGON,      *PEMRPOLYGON,
  4149.   EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
  4150.   EMRPOLYLINETO,   *PEMRPOLYLINETO;
  4151.  
  4152. typedef struct tagEMRPOLYLINE16
  4153. {
  4154.     EMR     emr;
  4155.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4156.     DWORD   cpts;
  4157.     POINTS  apts[1];
  4158. } EMRPOLYLINE16,     *PEMRPOLYLINE16,
  4159.   EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,
  4160.   EMRPOLYGON16,      *PEMRPOLYGON16,
  4161.   EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
  4162.   EMRPOLYLINETO16,   *PEMRPOLYLINETO16;
  4163.  
  4164. typedef struct tagEMRPOLYDRAW
  4165. {
  4166.     EMR     emr;
  4167.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4168.     DWORD   cptl;               // Number of points
  4169.     POINTL  aptl[1];            // Array of points
  4170.     BYTE    abTypes[1];         // Array of point types
  4171. } EMRPOLYDRAW, *PEMRPOLYDRAW;
  4172.  
  4173. typedef struct tagEMRPOLYDRAW16
  4174. {
  4175.     EMR     emr;
  4176.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4177.     DWORD   cpts;               // Number of points
  4178.     POINTS  apts[1];            // Array of points
  4179.     BYTE    abTypes[1];         // Array of point types
  4180. } EMRPOLYDRAW16, *PEMRPOLYDRAW16;
  4181.  
  4182. typedef struct tagEMRPOLYPOLYLINE
  4183. {
  4184.     EMR     emr;
  4185.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4186.     DWORD   nPolys;             // Number of polys
  4187.     DWORD   cptl;               // Total number of points in all polys
  4188.     DWORD   aPolyCounts[1];     // Array of point counts for each poly
  4189.     POINTL  aptl[1];            // Array of points
  4190. } EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
  4191.   EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;
  4192.  
  4193. typedef struct tagEMRPOLYPOLYLINE16
  4194. {
  4195.     EMR     emr;
  4196.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4197.     DWORD   nPolys;             // Number of polys
  4198.     DWORD   cpts;               // Total number of points in all polys
  4199.     DWORD   aPolyCounts[1];     // Array of point counts for each poly
  4200.     POINTS  apts[1];            // Array of points
  4201. } EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
  4202.   EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;
  4203.  
  4204. typedef struct tagEMRINVERTRGN
  4205. {
  4206.     EMR     emr;
  4207.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4208.     DWORD   cbRgnData;          // Size of region data in bytes
  4209.     BYTE    RgnData[1];
  4210. } EMRINVERTRGN, *PEMRINVERTRGN,
  4211.   EMRPAINTRGN,  *PEMRPAINTRGN;
  4212.  
  4213. typedef struct tagEMRFILLRGN
  4214. {
  4215.     EMR     emr;
  4216.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4217.     DWORD   cbRgnData;          // Size of region data in bytes
  4218.     DWORD   ihBrush;            // Brush handle index
  4219.     BYTE    RgnData[1];
  4220. } EMRFILLRGN, *PEMRFILLRGN;
  4221.  
  4222. typedef struct tagEMRFRAMERGN
  4223. {
  4224.     EMR     emr;
  4225.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4226.     DWORD   cbRgnData;          // Size of region data in bytes
  4227.     DWORD   ihBrush;            // Brush handle index
  4228.     SIZEL   szlStroke;
  4229.     BYTE    RgnData[1];
  4230. } EMRFRAMERGN, *PEMRFRAMERGN;
  4231.  
  4232. #if (_WIN32_WINNT >= 0x0500)
  4233.  
  4234. typedef struct tagEMRGRADIENTFILL
  4235. {
  4236.     EMR       emr;
  4237.     RECTL     rclBounds;          // Inclusive-inclusive bounds in device units
  4238.     DWORD     nVer;
  4239.     DWORD     nTri;
  4240.     ULONG     ulMode;
  4241.     TRIVERTEX Ver[1];
  4242. }EMRGRADIENTFILL,*PEMRGRADIENTFILL;
  4243.  
  4244. #endif
  4245.  
  4246. typedef struct tagEMREXTSELECTCLIPRGN
  4247. {
  4248.     EMR     emr;
  4249.     DWORD   cbRgnData;          // Size of region data in bytes
  4250.     DWORD   iMode;
  4251.     BYTE    RgnData[1];
  4252. } EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
  4253.  
  4254. typedef struct tagEMREXTTEXTOUTA
  4255. {
  4256.     EMR     emr;
  4257.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4258.     DWORD   iGraphicsMode;      // Current graphics mode
  4259.     FLOAT   exScale;            // X and Y scales from Page units to .01mm units
  4260.     FLOAT   eyScale;            //   if graphics mode is GM_COMPATIBLE.
  4261.     EMRTEXT emrtext;            // This is followed by the string and spacing
  4262.                                 // array
  4263. } EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
  4264.   EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
  4265.  
  4266. typedef struct tagEMRPOLYTEXTOUTA
  4267. {
  4268.     EMR     emr;
  4269.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4270.     DWORD   iGraphicsMode;      // Current graphics mode
  4271.     FLOAT   exScale;            // X and Y scales from Page units to .01mm units
  4272.     FLOAT   eyScale;            //   if graphics mode is GM_COMPATIBLE.
  4273.     LONG    cStrings;
  4274.     EMRTEXT aemrtext[1];        // Array of EMRTEXT structures.  This is
  4275.                                 // followed by the strings and spacing arrays.
  4276. } EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
  4277.   EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
  4278.  
  4279. typedef struct tagEMRBITBLT
  4280. {
  4281.     EMR     emr;
  4282.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4283.     LONG    xDest;
  4284.     LONG    yDest;
  4285.     LONG    cxDest;
  4286.     LONG    cyDest;
  4287.     DWORD   dwRop;
  4288.     LONG    xSrc;
  4289.     LONG    ySrc;
  4290.     XFORM   xformSrc;           // Source DC transform
  4291.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  4292.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4293.                                 // (DIB_RGB_COLORS)
  4294.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4295.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4296.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4297.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4298. } EMRBITBLT, *PEMRBITBLT;
  4299.  
  4300. typedef struct tagEMRSTRETCHBLT
  4301. {
  4302.     EMR     emr;
  4303.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4304.     LONG    xDest;
  4305.     LONG    yDest;
  4306.     LONG    cxDest;
  4307.     LONG    cyDest;
  4308.     DWORD   dwRop;
  4309.     LONG    xSrc;
  4310.     LONG    ySrc;
  4311.     XFORM   xformSrc;           // Source DC transform
  4312.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  4313.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4314.                                 // (DIB_RGB_COLORS)
  4315.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4316.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4317.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4318.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4319.     LONG    cxSrc;
  4320.     LONG    cySrc;
  4321. } EMRSTRETCHBLT, *PEMRSTRETCHBLT;
  4322.  
  4323. typedef struct tagEMRMASKBLT
  4324. {
  4325.     EMR     emr;
  4326.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4327.     LONG    xDest;
  4328.     LONG    yDest;
  4329.     LONG    cxDest;
  4330.     LONG    cyDest;
  4331.     DWORD   dwRop;
  4332.     LONG    xSrc;
  4333.     LONG    ySrc;
  4334.     XFORM   xformSrc;           // Source DC transform
  4335.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  4336.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4337.                                 // (DIB_RGB_COLORS)
  4338.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4339.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4340.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4341.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4342.     LONG    xMask;
  4343.     LONG    yMask;
  4344.     DWORD   iUsageMask;         // Mask bitmap info color table usage
  4345.     DWORD   offBmiMask;         // Offset to the mask BITMAPINFO structure if any
  4346.     DWORD   cbBmiMask;          // Size of the mask BITMAPINFO structure if any
  4347.     DWORD   offBitsMask;        // Offset to the mask bitmap bits if any
  4348.     DWORD   cbBitsMask;         // Size of the mask bitmap bits if any
  4349. } EMRMASKBLT, *PEMRMASKBLT;
  4350.  
  4351. typedef struct tagEMRPLGBLT
  4352. {
  4353.     EMR     emr;
  4354.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4355.     POINTL  aptlDest[3];
  4356.     LONG    xSrc;
  4357.     LONG    ySrc;
  4358.     LONG    cxSrc;
  4359.     LONG    cySrc;
  4360.     XFORM   xformSrc;           // Source DC transform
  4361.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  4362.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4363.                                 // (DIB_RGB_COLORS)
  4364.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4365.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4366.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4367.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4368.     LONG    xMask;
  4369.     LONG    yMask;
  4370.     DWORD   iUsageMask;         // Mask bitmap info color table usage
  4371.     DWORD   offBmiMask;         // Offset to the mask BITMAPINFO structure if any
  4372.     DWORD   cbBmiMask;          // Size of the mask BITMAPINFO structure if any
  4373.     DWORD   offBitsMask;        // Offset to the mask bitmap bits if any
  4374.     DWORD   cbBitsMask;         // Size of the mask bitmap bits if any
  4375. } EMRPLGBLT, *PEMRPLGBLT;
  4376.  
  4377. typedef struct tagEMRSETDIBITSTODEVICE
  4378. {
  4379.     EMR     emr;
  4380.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4381.     LONG    xDest;
  4382.     LONG    yDest;
  4383.     LONG    xSrc;
  4384.     LONG    ySrc;
  4385.     LONG    cxSrc;
  4386.     LONG    cySrc;
  4387.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4388.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4389.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4390.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4391.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4392.     DWORD   iStartScan;
  4393.     DWORD   cScans;
  4394. } EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
  4395.  
  4396. typedef struct tagEMRSTRETCHDIBITS
  4397. {
  4398.     EMR     emr;
  4399.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4400.     LONG    xDest;
  4401.     LONG    yDest;
  4402.     LONG    xSrc;
  4403.     LONG    ySrc;
  4404.     LONG    cxSrc;
  4405.     LONG    cySrc;
  4406.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4407.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4408.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4409.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4410.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4411.     DWORD   dwRop;
  4412.     LONG    cxDest;
  4413.     LONG    cyDest;
  4414. } EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
  4415.  
  4416. #if (_WIN32_WINNT >= 0x0500)
  4417.  
  4418. typedef struct tagEMRALPHABLEND
  4419. {
  4420.     EMR     emr;
  4421.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4422.     LONG    xDest;
  4423.     LONG    yDest;
  4424.     LONG    cxDest;
  4425.     LONG    cyDest;
  4426.     DWORD   dwRop;
  4427.     LONG    xSrc;
  4428.     LONG    ySrc;
  4429.     XFORM   xformSrc;           // Source DC transform
  4430.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  4431.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4432.                                 // (DIB_RGB_COLORS)
  4433.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4434.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4435.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4436.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4437.     LONG    cxSrc;
  4438.     LONG    cySrc;
  4439. } EMRALPHABLE, *PEMRALPHABLEND;
  4440.  
  4441. typedef struct tagEMRTRANSPARENTBLT
  4442. {
  4443.     EMR     emr;
  4444.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  4445.     LONG    xDest;
  4446.     LONG    yDest;
  4447.     LONG    cxDest;
  4448.     LONG    cyDest;
  4449.     DWORD   dwRop;
  4450.     LONG    xSrc;
  4451.     LONG    ySrc;
  4452.     XFORM   xformSrc;           // Source DC transform
  4453.     COLORREF crBkColorSrc;      // Source DC BkColor in RGB
  4454.     DWORD   iUsageSrc;          // Source bitmap info color table usage
  4455.                                 // (DIB_RGB_COLORS)
  4456.     DWORD   offBmiSrc;          // Offset to the source BITMAPINFO structure
  4457.     DWORD   cbBmiSrc;           // Size of the source BITMAPINFO structure
  4458.     DWORD   offBitsSrc;         // Offset to the source bitmap bits
  4459.     DWORD   cbBitsSrc;          // Size of the source bitmap bits
  4460.     LONG    cxSrc;
  4461.     LONG    cySrc;
  4462. } EMREMRTRANSPARENTBLT, *PEMREMRTRANSPARENTBLT;
  4463.  
  4464. #endif
  4465.  
  4466. typedef struct tagEMREXTCREATEFONTINDIRECTW
  4467. {
  4468.     EMR     emr;
  4469.     DWORD   ihFont;             // Font handle index
  4470.     EXTLOGFONTW elfw;
  4471. } EMREXTCREATEFONTINDIRECTW, *PEMREXTCREATEFONTINDIRECTW;
  4472.  
  4473.  
  4474. typedef struct tagEMRCREATEPALETTE
  4475. {
  4476.     EMR     emr;
  4477.     DWORD   ihPal;              // Palette handle index
  4478.     LOGPALETTE lgpl;            // The peFlags fields in the palette entries
  4479.                                 // do not contain any flags
  4480. } EMRCREATEPALETTE, *PEMRCREATEPALETTE;
  4481.  
  4482. #if(WINVER >= 0x0400)
  4483.  
  4484. typedef struct tagEMRCREATECOLORSPACE
  4485. {
  4486.     EMR             emr;
  4487.     DWORD           ihCS;       // ColorSpace handle index
  4488.     LOGCOLORSPACEW  lcs;
  4489. } EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
  4490.  
  4491. #endif /* WINVER >= 0x0400 */
  4492.  
  4493. typedef struct tagEMRCREATEPEN
  4494. {
  4495.     EMR     emr;
  4496.     DWORD   ihPen;              // Pen handle index
  4497.     LOGPEN  lopn;
  4498. } EMRCREATEPEN, *PEMRCREATEPEN;
  4499.  
  4500. typedef struct tagEMREXTCREATEPEN
  4501. {
  4502.     EMR     emr;
  4503.     DWORD   ihPen;              // Pen handle index
  4504.     DWORD   offBmi;             // Offset to the BITMAPINFO structure if any
  4505.     DWORD   cbBmi;              // Size of the BITMAPINFO structure if any
  4506.                                 // The bitmap info is followed by the bitmap
  4507.                                 // bits to form a packed DIB.
  4508.     DWORD   offBits;            // Offset to the brush bitmap bits if any
  4509.     DWORD   cbBits;             // Size of the brush bitmap bits if any
  4510.     EXTLOGPEN elp;              // The extended pen with the style array.
  4511. } EMREXTCREATEPEN, *PEMREXTCREATEPEN;
  4512.  
  4513. typedef struct tagEMRCREATEBRUSHINDIRECT
  4514. {
  4515.     EMR     emr;
  4516.     DWORD   ihBrush;            // Brush handle index
  4517.     LOGBRUSH lb;                // The style must be BS_SOLID, BS_HOLLOW,
  4518.                                 // BS_NULL or BS_HATCHED.
  4519. } EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
  4520.  
  4521. typedef struct tagEMRCREATEMONOBRUSH
  4522. {
  4523.     EMR     emr;
  4524.     DWORD   ihBrush;            // Brush handle index
  4525.     DWORD   iUsage;             // Bitmap info color table usage
  4526.     DWORD   offBmi;             // Offset to the BITMAPINFO structure
  4527.     DWORD   cbBmi;              // Size of the BITMAPINFO structure
  4528.     DWORD   offBits;            // Offset to the bitmap bits
  4529.     DWORD   cbBits;             // Size of the bitmap bits
  4530. } EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
  4531.  
  4532. typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
  4533. {
  4534.     EMR     emr;
  4535.     DWORD   ihBrush;            // Brush handle index
  4536.     DWORD   iUsage;             // Bitmap info color table usage
  4537.     DWORD   offBmi;             // Offset to the BITMAPINFO structure
  4538.     DWORD   cbBmi;              // Size of the BITMAPINFO structure
  4539.                                 // The bitmap info is followed by the bitmap
  4540.                                 // bits to form a packed DIB.
  4541.     DWORD   offBits;            // Offset to the bitmap bits
  4542.     DWORD   cbBits;             // Size of the bitmap bits
  4543. } EMRCREATEDIBPATTERNBRUSHPT, *PEMRCREATEDIBPATTERNBRUSHPT;
  4544.  
  4545. typedef struct tagEMRFORMAT
  4546. {
  4547.     DWORD   dSignature;         // Format signature, e.g. ENHMETA_SIGNATURE.
  4548.     DWORD   nVersion;           // Format version number.
  4549.     DWORD   cbData;             // Size of data in bytes.
  4550.     DWORD   offData;            // Offset to data from GDICOMMENT_IDENTIFIER.
  4551.                                 // It must begin at a DWORD offset.
  4552. } EMRFORMAT, *PEMRFORMAT;
  4553.  
  4554. typedef struct tagEMRGLSRECORD
  4555. {
  4556.     EMR     emr;
  4557.     DWORD   cbData;             // Size of data in bytes
  4558.     BYTE    Data[1];
  4559. } EMRGLSRECORD, *PEMRGLSRECORD;
  4560.  
  4561. typedef struct tagEMRGLSBOUNDEDRECORD
  4562. {
  4563.     EMR     emr;
  4564.     RECTL   rclBounds;          // Bounds in recording coordinates
  4565.     DWORD   cbData;             // Size of data in bytes
  4566.     BYTE    Data[1];
  4567. } EMRGLSBOUNDEDRECORD, *PEMRGLSBOUNDEDRECORD;
  4568.  
  4569. typedef struct tagEMRPIXELFORMAT
  4570. {
  4571.     EMR     emr;
  4572.     PIXELFORMATDESCRIPTOR pfd;
  4573. } EMRPIXELFORMAT, *PEMRPIXELFORMAT;
  4574.  
  4575. #define SETICMPROFILE_EMBEDED           0x00000001
  4576.  
  4577. typedef struct tagEMRSETICMPROFILE
  4578. {
  4579.     EMR     emr;
  4580.     DWORD   dwFlags;            // flags
  4581.     DWORD   cbName;             // Size of desired profile name
  4582.     DWORD   cbData;             // Size of raw profile data if attached
  4583.     BYTE    Data[1];            // Array size is cbName and cbData
  4584. } EMRSETICMPROFILE, *PEMRSETICMPROFILE;
  4585.  
  4586. #define GDICOMMENT_IDENTIFIER           0x43494447
  4587. #define GDICOMMENT_WINDOWS_METAFILE     0x80000001
  4588. #define GDICOMMENT_BEGINGROUP           0x00000002
  4589. #define GDICOMMENT_ENDGROUP             0x00000003
  4590. #define GDICOMMENT_MULTIFORMATS         0x40000004
  4591. #define EPS_SIGNATURE                   0x46535045
  4592.  
  4593. #endif  /* NOMETAFILE */
  4594.  
  4595.  
  4596. // OpenGL wgl prototypes
  4597.  
  4598. WINGDIAPI BOOL  WINAPI wglCopyContext(HGLRC, HGLRC, UINT);
  4599. WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
  4600. WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC, int);
  4601. WINGDIAPI BOOL  WINAPI wglDeleteContext(HGLRC);
  4602. WINGDIAPI HGLRC WINAPI wglGetCurrentContext(VOID);
  4603. WINGDIAPI HDC   WINAPI wglGetCurrentDC(VOID);
  4604. WINGDIAPI PROC  WINAPI wglGetProcAddress(LPCSTR);
  4605. WINGDIAPI BOOL  WINAPI wglMakeCurrent(HDC, HGLRC);
  4606. WINGDIAPI BOOL  WINAPI wglShareLists(HGLRC, HGLRC);
  4607. WINGDIAPI BOOL  WINAPI wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
  4608. WINGDIAPI BOOL  WINAPI wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
  4609. #ifdef UNICODE
  4610. #define wglUseFontBitmaps  wglUseFontBitmapsW
  4611. #else
  4612. #define wglUseFontBitmaps  wglUseFontBitmapsA
  4613. #endif // !UNICODE
  4614. WINGDIAPI BOOL  WINAPI SwapBuffers(HDC);
  4615.  
  4616. typedef struct _POINTFLOAT {
  4617.     FLOAT   x;
  4618.     FLOAT   y;
  4619. } POINTFLOAT, *PPOINTFLOAT;
  4620.  
  4621. typedef struct _GLYPHMETRICSFLOAT {
  4622.     FLOAT       gmfBlackBoxX;
  4623.     FLOAT       gmfBlackBoxY;
  4624.     POINTFLOAT  gmfptGlyphOrigin;
  4625.     FLOAT       gmfCellIncX;
  4626.     FLOAT       gmfCellIncY;
  4627. } GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, FAR *LPGLYPHMETRICSFLOAT;
  4628.  
  4629. #define WGL_FONT_LINES      0
  4630. #define WGL_FONT_POLYGONS   1
  4631. WINGDIAPI BOOL  WINAPI wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT,
  4632.                                            FLOAT, int, LPGLYPHMETRICSFLOAT);
  4633. WINGDIAPI BOOL  WINAPI wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT,
  4634.                                            FLOAT, int, LPGLYPHMETRICSFLOAT);
  4635. #ifdef UNICODE
  4636. #define wglUseFontOutlines  wglUseFontOutlinesW
  4637. #else
  4638. #define wglUseFontOutlines  wglUseFontOutlinesA
  4639. #endif // !UNICODE
  4640.  
  4641. /* Layer plane descriptor */
  4642. typedef struct tagLAYERPLANEDESCRIPTOR { // lpd
  4643.     WORD  nSize;
  4644.     WORD  nVersion;
  4645.     DWORD dwFlags;
  4646.     BYTE  iPixelType;
  4647.     BYTE  cColorBits;
  4648.     BYTE  cRedBits;
  4649.     BYTE  cRedShift;
  4650.     BYTE  cGreenBits;
  4651.     BYTE  cGreenShift;
  4652.     BYTE  cBlueBits;
  4653.     BYTE  cBlueShift;
  4654.     BYTE  cAlphaBits;
  4655.     BYTE  cAlphaShift;
  4656.     BYTE  cAccumBits;
  4657.     BYTE  cAccumRedBits;
  4658.     BYTE  cAccumGreenBits;
  4659.     BYTE  cAccumBlueBits;
  4660.     BYTE  cAccumAlphaBits;
  4661.     BYTE  cDepthBits;
  4662.     BYTE  cStencilBits;
  4663.     BYTE  cAuxBuffers;
  4664.     BYTE  iLayerPlane;
  4665.     BYTE  bReserved;
  4666.     COLORREF crTransparent;
  4667. } LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, FAR *LPLAYERPLANEDESCRIPTOR;
  4668.  
  4669. /* LAYERPLANEDESCRIPTOR flags */
  4670. #define LPD_DOUBLEBUFFER        0x00000001
  4671. #define LPD_STEREO              0x00000002
  4672. #define LPD_SUPPORT_GDI         0x00000010
  4673. #define LPD_SUPPORT_OPENGL      0x00000020
  4674. #define LPD_SHARE_DEPTH         0x00000040
  4675. #define LPD_SHARE_STENCIL       0x00000080
  4676. #define LPD_SHARE_ACCUM         0x00000100
  4677. #define LPD_SWAP_EXCHANGE       0x00000200
  4678. #define LPD_SWAP_COPY           0x00000400
  4679. #define LPD_TRANSPARENT         0x00001000
  4680.  
  4681. #define LPD_TYPE_RGBA        0
  4682. #define LPD_TYPE_COLORINDEX  1
  4683.  
  4684. /* wglSwapLayerBuffers flags */
  4685. #define WGL_SWAP_MAIN_PLANE     0x00000001
  4686. #define WGL_SWAP_OVERLAY1       0x00000002
  4687. #define WGL_SWAP_OVERLAY2       0x00000004
  4688. #define WGL_SWAP_OVERLAY3       0x00000008
  4689. #define WGL_SWAP_OVERLAY4       0x00000010
  4690. #define WGL_SWAP_OVERLAY5       0x00000020
  4691. #define WGL_SWAP_OVERLAY6       0x00000040
  4692. #define WGL_SWAP_OVERLAY7       0x00000080
  4693. #define WGL_SWAP_OVERLAY8       0x00000100
  4694. #define WGL_SWAP_OVERLAY9       0x00000200
  4695. #define WGL_SWAP_OVERLAY10      0x00000400
  4696. #define WGL_SWAP_OVERLAY11      0x00000800
  4697. #define WGL_SWAP_OVERLAY12      0x00001000
  4698. #define WGL_SWAP_OVERLAY13      0x00002000
  4699. #define WGL_SWAP_OVERLAY14      0x00004000
  4700. #define WGL_SWAP_OVERLAY15      0x00008000
  4701. #define WGL_SWAP_UNDERLAY1      0x00010000
  4702. #define WGL_SWAP_UNDERLAY2      0x00020000
  4703. #define WGL_SWAP_UNDERLAY3      0x00040000
  4704. #define WGL_SWAP_UNDERLAY4      0x00080000
  4705. #define WGL_SWAP_UNDERLAY5      0x00100000
  4706. #define WGL_SWAP_UNDERLAY6      0x00200000
  4707. #define WGL_SWAP_UNDERLAY7      0x00400000
  4708. #define WGL_SWAP_UNDERLAY8      0x00800000
  4709. #define WGL_SWAP_UNDERLAY9      0x01000000
  4710. #define WGL_SWAP_UNDERLAY10     0x02000000
  4711. #define WGL_SWAP_UNDERLAY11     0x04000000
  4712. #define WGL_SWAP_UNDERLAY12     0x08000000
  4713. #define WGL_SWAP_UNDERLAY13     0x10000000
  4714. #define WGL_SWAP_UNDERLAY14     0x20000000
  4715. #define WGL_SWAP_UNDERLAY15     0x40000000
  4716.  
  4717. WINGDIAPI BOOL  WINAPI wglDescribeLayerPlane(HDC, int, int, UINT,
  4718.                                              LPLAYERPLANEDESCRIPTOR);
  4719. WINGDIAPI int   WINAPI wglSetLayerPaletteEntries(HDC, int, int, int,
  4720.                                                  CONST COLORREF *);
  4721. WINGDIAPI int   WINAPI wglGetLayerPaletteEntries(HDC, int, int, int,
  4722.                                                  COLORREF *);
  4723. WINGDIAPI BOOL  WINAPI wglRealizeLayerPalette(HDC, int, BOOL);
  4724. WINGDIAPI BOOL  WINAPI wglSwapLayerBuffers(HDC, UINT);
  4725.  
  4726. #if (WINVER >= 0x0500)
  4727.  
  4728. typedef struct _WGLSWAP
  4729. {
  4730.     HDC hdc;
  4731.     UINT uiFlags;
  4732. } WGLSWAP, *PWGLSWAP, FAR *LPWGLSWAP;
  4733.  
  4734. #define WGL_SWAPMULTIPLE_MAX 16
  4735.  
  4736. WINGDIAPI DWORD WINAPI wglSwapMultipleBuffers(UINT, CONST WGLSWAP *);
  4737.  
  4738. #endif // (WINVER >= 0x0500)
  4739.  
  4740. #endif /* NOGDI */
  4741.  
  4742. #ifdef __cplusplus
  4743. }
  4744. #endif
  4745.  
  4746.  
  4747. #pragma option pop /*P_O_Pop*/
  4748. #endif /* _WINGDI_ */
  4749.  
  4750.