home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / wingdi.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  177.8 KB  |  4,906 lines

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