WinGDI.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:178k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /**************************************************************************
  2. *                                                                         *
  3. * wingdi.h -- GDI procedure declarations, constant definitions and macros *
  4. *                                                                         *
  5. * Copyright (c) Microsoft Corp. All rights reserved.                      *
  6. *                                                                         *
  7. **************************************************************************/
  8. #ifndef _WINGDI_
  9. #define _WINGDI_
  10. #ifdef _MAC
  11. #include <macwin32.h>
  12. #endif
  13. //
  14. // Define API decoration for direct importing of DLL references.
  15. //
  16. #if !defined(_GDI32_)
  17. #define WINGDIAPI DECLSPEC_IMPORT
  18. #else
  19. #define WINGDIAPI
  20. #endif
  21. //
  22. // Define API decoration for direct importing of DLL references.
  23. //
  24. #if !defined(_SPOOL32_)
  25. #define WINSPOOLAPI DECLSPEC_IMPORT
  26. #else
  27. #define WINSPOOLAPI
  28. #endif
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. #ifndef WINVER
  33. #define WINVER 0x0500   // version 5.0
  34. #endif /* WINVER */
  35. #ifndef NOGDI
  36. #ifndef NORASTEROPS
  37. /* Binary raster ops */
  38. #define R2_BLACK            1   /*  0       */
  39. #define R2_NOTMERGEPEN      2   /* DPon     */
  40. #define R2_MASKNOTPEN       3   /* DPna     */
  41. #define R2_NOTCOPYPEN       4   /* PN       */
  42. #define R2_MASKPENNOT       5   /* PDna     */
  43. #define R2_NOT              6   /* Dn       */
  44. #define R2_XORPEN           7   /* DPx      */
  45. #define R2_NOTMASKPEN       8   /* DPan     */
  46. #define R2_MASKPEN          9   /* DPa      */
  47. #define R2_NOTXORPEN        10  /* DPxn     */
  48. #define R2_NOP              11  /* D        */
  49. #define R2_MERGENOTPEN      12  /* DPno     */
  50. #define R2_COPYPEN          13  /* P        */
  51. #define R2_MERGEPENNOT      14  /* PDno     */
  52. #define R2_MERGEPEN         15  /* DPo      */
  53. #define R2_WHITE            16  /*  1       */
  54. #define R2_LAST             16
  55. /* Ternary raster operations */
  56. #define SRCCOPY             (DWORD)0x00CC0020 /* dest = source                   */
  57. #define SRCPAINT            (DWORD)0x00EE0086 /* dest = source OR dest           */
  58. #define SRCAND              (DWORD)0x008800C6 /* dest = source AND dest          */
  59. #define SRCINVERT           (DWORD)0x00660046 /* dest = source XOR dest          */
  60. #define SRCERASE            (DWORD)0x00440328 /* dest = source AND (NOT dest )   */
  61. #define NOTSRCCOPY          (DWORD)0x00330008 /* dest = (NOT source)             */
  62. #define NOTSRCERASE         (DWORD)0x001100A6 /* dest = (NOT src) AND (NOT dest) */
  63. #define MERGECOPY           (DWORD)0x00C000CA /* dest = (source AND pattern)     */
  64. #define MERGEPAINT          (DWORD)0x00BB0226 /* dest = (NOT source) OR dest     */
  65. #define PATCOPY             (DWORD)0x00F00021 /* dest = pattern                  */
  66. #define PATPAINT            (DWORD)0x00FB0A09 /* dest = DPSnoo                   */
  67. #define PATINVERT           (DWORD)0x005A0049 /* dest = pattern XOR dest         */
  68. #define DSTINVERT           (DWORD)0x00550009 /* dest = (NOT dest)               */
  69. #define BLACKNESS           (DWORD)0x00000042 /* dest = BLACK                    */
  70. #define WHITENESS           (DWORD)0x00FF0062 /* dest = WHITE                    */
  71. #if(WINVER >= 0x0500)
  72. #define NOMIRRORBITMAP      (DWORD)0x80000000 /* Do not Mirror the bitmap in this call */
  73. #define CAPTUREBLT          (DWORD)0x40000000 /* Include layered windows */
  74. #endif /* WINVER >= 0x0500 */
  75. /* Quaternary raster codes */
  76. #define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore))
  77. #endif /* NORASTEROPS */
  78. #define GDI_ERROR (0xFFFFFFFFL)
  79. #define HGDI_ERROR (LongToHandle(0xFFFFFFFFL))
  80. /* Region Flags */
  81. #define ERROR               0
  82. #define NULLREGION          1
  83. #define SIMPLEREGION        2
  84. #define COMPLEXREGION       3
  85. #define RGN_ERROR ERROR
  86. /* CombineRgn() Styles */
  87. #define RGN_AND             1
  88. #define RGN_OR              2
  89. #define RGN_XOR             3
  90. #define RGN_DIFF            4
  91. #define RGN_COPY            5
  92. #define RGN_MIN             RGN_AND
  93. #define RGN_MAX             RGN_COPY
  94. /* StretchBlt() Modes */
  95. #define BLACKONWHITE                 1
  96. #define WHITEONBLACK                 2
  97. #define COLORONCOLOR                 3
  98. #define HALFTONE                     4
  99. #define MAXSTRETCHBLTMODE            4
  100. #if(WINVER >= 0x0400)
  101. /* New StretchBlt() Modes */
  102. #define STRETCH_ANDSCANS    BLACKONWHITE
  103. #define STRETCH_ORSCANS     WHITEONBLACK
  104. #define STRETCH_DELETESCANS COLORONCOLOR
  105. #define STRETCH_HALFTONE    HALFTONE
  106. #endif /* WINVER >= 0x0400 */
  107. /* PolyFill() Modes */
  108. #define ALTERNATE                    1
  109. #define WINDING                      2
  110. #define POLYFILL_LAST                2
  111. /* Layout Orientation Options */
  112. #if(WINVER >= 0x0500)
  113. #define LAYOUT_RTL                         0x00000001 // Right to left
  114. #define LAYOUT_BTT                         0x00000002 // Bottom to top
  115. #define LAYOUT_VBH                         0x00000004 // Vertical before horizontal
  116. #define LAYOUT_ORIENTATIONMASK             (LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH)
  117. #define LAYOUT_BITMAPORIENTATIONPRESERVED  0x00000008
  118. #endif /* WINVER >= 0x0500 */
  119. /* Text Alignment Options */
  120. #define TA_NOUPDATECP                0
  121. #define TA_UPDATECP                  1
  122. #define TA_LEFT                      0
  123. #define TA_RIGHT                     2
  124. #define TA_CENTER                    6
  125. #define TA_TOP                       0
  126. #define TA_BOTTOM                    8
  127. #define TA_BASELINE                  24
  128. #if (WINVER >= 0x0400)
  129. #define TA_RTLREADING                256
  130. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING)
  131. #else
  132. #define TA_MASK       (TA_BASELINE+TA_CENTER+TA_UPDATECP)
  133. #endif
  134. #define VTA_BASELINE TA_BASELINE
  135. #define VTA_LEFT     TA_BOTTOM
  136. #define VTA_RIGHT    TA_TOP
  137. #define VTA_CENTER   TA_CENTER
  138. #define VTA_BOTTOM   TA_RIGHT
  139. #define VTA_TOP      TA_LEFT
  140. #define ETO_OPAQUE                   0x0002
  141. #define ETO_CLIPPED                  0x0004
  142. #if(WINVER >= 0x0400)
  143. #define ETO_GLYPH_INDEX              0x0010
  144. #define ETO_RTLREADING               0x0080
  145. #define ETO_NUMERICSLOCAL            0x0400
  146. #define ETO_NUMERICSLATIN            0x0800
  147. #define ETO_IGNORELANGUAGE           0x1000
  148. #endif /* WINVER >= 0x0400 */
  149. #if (_WIN32_WINNT >= 0x0500)
  150. #define ETO_PDY                      0x2000
  151. #endif // (_WIN32_WINNT >= 0x0500)
  152. #define ASPECT_FILTERING             0x0001
  153. /* Bounds Accumulation APIs */
  154. #define DCB_RESET       0x0001
  155. #define DCB_ACCUMULATE  0x0002
  156. #define DCB_DIRTY       DCB_ACCUMULATE
  157. #define DCB_SET         (DCB_RESET | DCB_ACCUMULATE)
  158. #define DCB_ENABLE      0x0004
  159. #define DCB_DISABLE     0x0008
  160. #ifndef NOMETAFILE
  161. /* Metafile Functions */
  162. #define META_SETBKCOLOR              0x0201
  163. #define META_SETBKMODE               0x0102
  164. #define META_SETMAPMODE              0x0103
  165. #define META_SETROP2                 0x0104
  166. #define META_SETRELABS               0x0105
  167. #define META_SETPOLYFILLMODE         0x0106
  168. #define META_SETSTRETCHBLTMODE       0x0107
  169. #define META_SETTEXTCHAREXTRA        0x0108
  170. #define META_SETTEXTCOLOR            0x0209
  171. #define META_SETTEXTJUSTIFICATION    0x020A
  172. #define META_SETWINDOWORG            0x020B
  173. #define META_SETWINDOWEXT            0x020C
  174. #define META_SETVIEWPORTORG          0x020D
  175. #define META_SETVIEWPORTEXT          0x020E
  176. #define META_OFFSETWINDOWORG         0x020F
  177. #define META_SCALEWINDOWEXT          0x0410
  178. #define META_OFFSETVIEWPORTORG       0x0211
  179. #define META_SCALEVIEWPORTEXT        0x0412
  180. #define META_LINETO                  0x0213
  181. #define META_MOVETO                  0x0214
  182. #define META_EXCLUDECLIPRECT         0x0415
  183. #define META_INTERSECTCLIPRECT       0x0416
  184. #define META_ARC                     0x0817
  185. #define META_ELLIPSE                 0x0418
  186. #define META_FLOODFILL               0x0419
  187. #define META_PIE                     0x081A
  188. #define META_RECTANGLE               0x041B
  189. #define META_ROUNDRECT               0x061C
  190. #define META_PATBLT                  0x061D
  191. #define META_SAVEDC                  0x001E
  192. #define META_SETPIXEL                0x041F
  193. #define META_OFFSETCLIPRGN           0x0220
  194. #define META_TEXTOUT                 0x0521
  195. #define META_BITBLT                  0x0922
  196. #define META_STRETCHBLT              0x0B23
  197. #define META_POLYGON                 0x0324
  198. #define META_POLYLINE                0x0325
  199. #define META_ESCAPE                  0x0626
  200. #define META_RESTOREDC               0x0127
  201. #define META_FILLREGION              0x0228
  202. #define META_FRAMEREGION             0x0429
  203. #define META_INVERTREGION            0x012A
  204. #define META_PAINTREGION             0x012B
  205. #define META_SELECTCLIPREGION        0x012C
  206. #define META_SELECTOBJECT            0x012D
  207. #define META_SETTEXTALIGN            0x012E
  208. #define META_CHORD                   0x0830
  209. #define META_SETMAPPERFLAGS          0x0231
  210. #define META_EXTTEXTOUT              0x0a32
  211. #define META_SETDIBTODEV             0x0d33
  212. #define META_SELECTPALETTE           0x0234
  213. #define META_REALIZEPALETTE          0x0035
  214. #define META_ANIMATEPALETTE          0x0436
  215. #define META_SETPALENTRIES           0x0037
  216. #define META_POLYPOLYGON             0x0538
  217. #define META_RESIZEPALETTE           0x0139
  218. #define META_DIBBITBLT               0x0940
  219. #define META_DIBSTRETCHBLT           0x0b41
  220. #define META_DIBCREATEPATTERNBRUSH   0x0142
  221. #define META_STRETCHDIB              0x0f43
  222. #define META_EXTFLOODFILL            0x0548
  223. #if(WINVER >= 0x0500)
  224. #define META_SETLAYOUT               0x0149
  225. #endif /* WINVER >= 0x0500 */
  226. #define META_DELETEOBJECT            0x01f0
  227. #define META_CREATEPALETTE           0x00f7
  228. #define META_CREATEPATTERNBRUSH      0x01F9
  229. #define META_CREATEPENINDIRECT       0x02FA
  230. #define META_CREATEFONTINDIRECT      0x02FB
  231. #define META_CREATEBRUSHINDIRECT     0x02FC
  232. #define META_CREATEREGION            0x06FF
  233. #if(WINVER >= 0x0400)
  234. typedef struct _DRAWPATRECT {
  235.         POINT ptPosition;
  236.         POINT ptSize;
  237.         WORD wStyle;
  238.         WORD wPattern;
  239. } DRAWPATRECT, *PDRAWPATRECT;
  240. #endif /* WINVER >= 0x0400 */
  241. #endif /* NOMETAFILE */
  242. /* GDI Escapes */
  243. #define NEWFRAME                     1
  244. #define ABORTDOC                     2
  245. #define NEXTBAND                     3
  246. #define SETCOLORTABLE                4
  247. #define GETCOLORTABLE                5
  248. #define FLUSHOUTPUT                  6
  249. #define DRAFTMODE                    7
  250. #define QUERYESCSUPPORT              8
  251. #define SETABORTPROC                 9
  252. #define STARTDOC                     10
  253. #define ENDDOC                       11
  254. #define GETPHYSPAGESIZE              12
  255. #define GETPRINTINGOFFSET            13
  256. #define GETSCALINGFACTOR             14
  257. #define MFCOMMENT                    15
  258. #define GETPENWIDTH                  16
  259. #define SETCOPYCOUNT                 17
  260. #define SELECTPAPERSOURCE            18
  261. #define DEVICEDATA                   19
  262. #define PASSTHROUGH                  19
  263. #define GETTECHNOLGY                 20
  264. #define GETTECHNOLOGY                20
  265. #define SETLINECAP                   21
  266. #define SETLINEJOIN                  22
  267. #define SETMITERLIMIT                23
  268. #define BANDINFO                     24
  269. #define DRAWPATTERNRECT              25
  270. #define GETVECTORPENSIZE             26
  271. #define GETVECTORBRUSHSIZE           27
  272. #define ENABLEDUPLEX                 28
  273. #define GETSETPAPERBINS              29
  274. #define GETSETPRINTORIENT            30
  275. #define ENUMPAPERBINS                31
  276. #define SETDIBSCALING                32
  277. #define EPSPRINTING                  33
  278. #define ENUMPAPERMETRICS             34
  279. #define GETSETPAPERMETRICS           35
  280. #define POSTSCRIPT_DATA              37
  281. #define POSTSCRIPT_IGNORE            38
  282. #define MOUSETRAILS                  39
  283. #define GETDEVICEUNITS               42
  284. #define GETEXTENDEDTEXTMETRICS       256
  285. #define GETEXTENTTABLE               257
  286. #define GETPAIRKERNTABLE             258
  287. #define GETTRACKKERNTABLE            259
  288. #define EXTTEXTOUT                   512
  289. #define GETFACENAME                  513
  290. #define DOWNLOADFACE                 514
  291. #define ENABLERELATIVEWIDTHS         768
  292. #define ENABLEPAIRKERNING            769
  293. #define SETKERNTRACK                 770
  294. #define SETALLJUSTVALUES             771
  295. #define SETCHARSET                   772
  296. #define STRETCHBLT                   2048
  297. #define METAFILE_DRIVER              2049
  298. #define GETSETSCREENPARAMS           3072
  299. #define QUERYDIBSUPPORT              3073
  300. #define BEGIN_PATH                   4096
  301. #define CLIP_TO_PATH                 4097
  302. #define END_PATH                     4098
  303. #define EXT_DEVICE_CAPS              4099
  304. #define RESTORE_CTM                  4100
  305. #define SAVE_CTM                     4101
  306. #define SET_ARC_DIRECTION            4102
  307. #define SET_BACKGROUND_COLOR         4103
  308. #define SET_POLY_MODE                4104
  309. #define SET_SCREEN_ANGLE             4105
  310. #define SET_SPREAD                   4106
  311. #define TRANSFORM_CTM                4107
  312. #define SET_CLIP_BOX                 4108
  313. #define SET_BOUNDS                   4109
  314. #define SET_MIRROR_MODE              4110
  315. #define OPENCHANNEL                  4110
  316. #define DOWNLOADHEADER               4111
  317. #define CLOSECHANNEL                 4112
  318. #define POSTSCRIPT_PASSTHROUGH       4115
  319. #define ENCAPSULATED_POSTSCRIPT      4116
  320. #define POSTSCRIPT_IDENTIFY          4117   /* new escape for NT5 pscript driver */
  321. #define POSTSCRIPT_INJECTION         4118   /* new escape for NT5 pscript driver */
  322. #define CHECKJPEGFORMAT              4119
  323. #define CHECKPNGFORMAT               4120
  324. #define GET_PS_FEATURESETTING        4121   /* new escape for NT5 pscript driver */
  325. #define SPCLPASSTHROUGH2             4568   /* new escape for NT5 pscript driver */
  326. /*
  327.  * Parameters for POSTSCRIPT_IDENTIFY escape
  328.  */
  329. #define PSIDENT_GDICENTRIC    0
  330. #define PSIDENT_PSCENTRIC     1
  331. /*
  332.  * Header structure for the input buffer to POSTSCRIPT_INJECTION escape
  333.  */
  334. typedef struct _PSINJECTDATA {
  335.     DWORD   DataBytes;      /* number of raw data bytes (NOT including this header) */
  336.     WORD    InjectionPoint; /* injection point */
  337.     WORD    PageNumber;     /* page number to apply the injection */
  338.     /* Followed by raw data to be injected */
  339. } PSINJECTDATA, *PPSINJECTDATA;
  340. /*
  341.  * Constants for PSINJECTDATA.InjectionPoint field
  342.  */
  343. #define PSINJECT_BEGINSTREAM                1
  344. #define PSINJECT_PSADOBE                    2
  345. #define PSINJECT_PAGESATEND                 3
  346. #define PSINJECT_PAGES                      4
  347. #define PSINJECT_DOCNEEDEDRES               5
  348. #define PSINJECT_DOCSUPPLIEDRES             6
  349. #define PSINJECT_PAGEORDER                  7
  350. #define PSINJECT_ORIENTATION                8
  351. #define PSINJECT_BOUNDINGBOX                9
  352. #define PSINJECT_DOCUMENTPROCESSCOLORS      10
  353. #define PSINJECT_COMMENTS                   11
  354. #define PSINJECT_BEGINDEFAULTS              12
  355. #define PSINJECT_ENDDEFAULTS                13
  356. #define PSINJECT_BEGINPROLOG                14
  357. #define PSINJECT_ENDPROLOG                  15
  358. #define PSINJECT_BEGINSETUP                 16
  359. #define PSINJECT_ENDSETUP                   17
  360. #define PSINJECT_TRAILER                    18
  361. #define PSINJECT_EOF                        19
  362. #define PSINJECT_ENDSTREAM                  20
  363. #define PSINJECT_DOCUMENTPROCESSCOLORSATEND 21
  364. #define PSINJECT_PAGENUMBER                 100
  365. #define PSINJECT_BEGINPAGESETUP             101
  366. #define PSINJECT_ENDPAGESETUP               102
  367. #define PSINJECT_PAGETRAILER                103
  368. #define PSINJECT_PLATECOLOR                 104
  369. #define PSINJECT_SHOWPAGE                   105
  370. #define PSINJECT_PAGEBBOX                   106
  371. #define PSINJECT_ENDPAGECOMMENTS            107
  372. #define PSINJECT_VMSAVE                     200
  373. #define PSINJECT_VMRESTORE                  201
  374. /*
  375.  * Parameter for GET_PS_FEATURESETTING escape
  376.  */
  377. #define FEATURESETTING_NUP                  0
  378. #define FEATURESETTING_OUTPUT               1
  379. #define FEATURESETTING_PSLEVEL              2
  380. #define FEATURESETTING_CUSTPAPER            3
  381. #define FEATURESETTING_MIRROR               4
  382. #define FEATURESETTING_NEGATIVE             5
  383. #define FEATURESETTING_PROTOCOL             6
  384. //
  385. // The range of selectors between FEATURESETTING_PRIVATE_BEGIN and
  386. // FEATURESETTING_PRIVATE_END is reserved by Microsoft for private use
  387. //
  388. #define FEATURESETTING_PRIVATE_BEGIN 0x1000
  389. #define FEATURESETTING_PRIVATE_END   0x1FFF
  390. /*
  391.  * Information about output options
  392.  */
  393. typedef struct _PSFEATURE_OUTPUT {
  394.     BOOL bPageIndependent;
  395.     BOOL bSetPageDevice;
  396. } PSFEATURE_OUTPUT, *PPSFEATURE_OUTPUT;
  397. /*
  398.  * Information about custom paper size
  399.  */
  400. typedef struct _PSFEATURE_CUSTPAPER {
  401.     LONG lOrientation;
  402.     LONG lWidth;
  403.     LONG lHeight;
  404.     LONG lWidthOffset;
  405.     LONG lHeightOffset;
  406. } PSFEATURE_CUSTPAPER, *PPSFEATURE_CUSTPAPER;
  407. /* Value returned for FEATURESETTING_PROTOCOL */
  408. #define PSPROTOCOL_ASCII             0
  409. #define PSPROTOCOL_BCP               1
  410. #define PSPROTOCOL_TBCP              2
  411. #define PSPROTOCOL_BINARY            3
  412. /* Flag returned from QUERYDIBSUPPORT */
  413. #define QDI_SETDIBITS                1
  414. #define QDI_GETDIBITS                2
  415. #define QDI_DIBTOSCREEN              4
  416. #define QDI_STRETCHDIB               8
  417. /* Spooler Error Codes */
  418. #define SP_NOTREPORTED               0x4000
  419. #define SP_ERROR                     (-1)
  420. #define SP_APPABORT                  (-2)
  421. #define SP_USERABORT                 (-3)
  422. #define SP_OUTOFDISK                 (-4)
  423. #define SP_OUTOFMEMORY               (-5)
  424. #define PR_JOBSTATUS                 0x0000
  425. /* Object Definitions for EnumObjects() */
  426. #define OBJ_PEN             1
  427. #define OBJ_BRUSH           2
  428. #define OBJ_DC              3
  429. #define OBJ_METADC          4
  430. #define OBJ_PAL             5
  431. #define OBJ_FONT            6
  432. #define OBJ_BITMAP          7
  433. #define OBJ_REGION          8
  434. #define OBJ_METAFILE        9
  435. #define OBJ_MEMDC           10
  436. #define OBJ_EXTPEN          11
  437. #define OBJ_ENHMETADC       12
  438. #define OBJ_ENHMETAFILE     13
  439. #define OBJ_COLORSPACE      14
  440. /* xform stuff */
  441. #define MWT_IDENTITY        1
  442. #define MWT_LEFTMULTIPLY    2
  443. #define MWT_RIGHTMULTIPLY   3
  444. #define MWT_MIN             MWT_IDENTITY
  445. #define MWT_MAX             MWT_RIGHTMULTIPLY
  446. #define _XFORM_
  447. typedef struct  tagXFORM
  448.   {
  449.     FLOAT   eM11;
  450.     FLOAT   eM12;
  451.     FLOAT   eM21;
  452.     FLOAT   eM22;
  453.     FLOAT   eDx;
  454.     FLOAT   eDy;
  455.   } XFORM, *PXFORM, FAR *LPXFORM;
  456. /* Bitmap Header Definition */
  457. typedef struct tagBITMAP
  458.   {
  459.     LONG        bmType;
  460.     LONG        bmWidth;
  461.     LONG        bmHeight;
  462.     LONG        bmWidthBytes;
  463.     WORD        bmPlanes;
  464.     WORD        bmBitsPixel;
  465.     LPVOID      bmBits;
  466.   } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
  467. #include <pshpack1.h>
  468. typedef struct tagRGBTRIPLE {
  469.         BYTE    rgbtBlue;
  470.         BYTE    rgbtGreen;
  471.         BYTE    rgbtRed;
  472. } RGBTRIPLE;
  473. #include <poppack.h>
  474. typedef struct tagRGBQUAD {
  475.         BYTE    rgbBlue;
  476.         BYTE    rgbGreen;
  477.         BYTE    rgbRed;
  478.         BYTE    rgbReserved;
  479. } RGBQUAD;
  480. typedef RGBQUAD FAR* LPRGBQUAD;
  481. #if(WINVER >= 0x0400)
  482. /* Image Color Matching color definitions */
  483. #define CS_ENABLE                       0x00000001L
  484. #define CS_DISABLE                      0x00000002L
  485. #define CS_DELETE_TRANSFORM             0x00000003L
  486. /* Logcolorspace signature */
  487. #define LCS_SIGNATURE           'PSOC'
  488. /* Logcolorspace lcsType values */
  489. #define LCS_sRGB                'sRGB'
  490. #define LCS_WINDOWS_COLOR_SPACE 'Win '  // Windows default color space
  491. typedef LONG   LCSCSTYPE;
  492. #define LCS_CALIBRATED_RGB              0x00000000L
  493. typedef LONG    LCSGAMUTMATCH;
  494. #define LCS_GM_BUSINESS                 0x00000001L
  495. #define LCS_GM_GRAPHICS                 0x00000002L
  496. #define LCS_GM_IMAGES                   0x00000004L
  497. #define LCS_GM_ABS_COLORIMETRIC         0x00000008L
  498. /* ICM Defines for results from CheckColorInGamut() */
  499. #define CM_OUT_OF_GAMUT                 255
  500. #define CM_IN_GAMUT                     0
  501. /* UpdateICMRegKey Constants               */
  502. #define ICM_ADDPROFILE                  1
  503. #define ICM_DELETEPROFILE               2
  504. #define ICM_QUERYPROFILE                3
  505. #define ICM_SETDEFAULTPROFILE           4
  506. #define ICM_REGISTERICMATCHER           5
  507. #define ICM_UNREGISTERICMATCHER         6
  508. #define ICM_QUERYMATCH                  7
  509. /* Macros to retrieve CMYK values from a COLORREF */
  510. #define GetKValue(cmyk)      ((BYTE)(cmyk))
  511. #define GetYValue(cmyk)      ((BYTE)((cmyk)>> 8))
  512. #define GetMValue(cmyk)      ((BYTE)((cmyk)>>16))
  513. #define GetCValue(cmyk)      ((BYTE)((cmyk)>>24))
  514. #define CMYK(c,m,y,k)       ((COLORREF)((((BYTE)(k)|((WORD)((BYTE)(y))<<8))|(((DWORD)(BYTE)(m))<<16))|(((DWORD)(BYTE)(c))<<24)))
  515. typedef long            FXPT16DOT16, FAR *LPFXPT16DOT16;
  516. typedef long            FXPT2DOT30, FAR *LPFXPT2DOT30;
  517. /* ICM Color Definitions */
  518. // The following two structures are used for defining RGB's in terms of CIEXYZ.
  519. typedef struct tagCIEXYZ
  520. {
  521.         FXPT2DOT30 ciexyzX;
  522.         FXPT2DOT30 ciexyzY;
  523.         FXPT2DOT30 ciexyzZ;
  524. } CIEXYZ;
  525. typedef CIEXYZ  FAR *LPCIEXYZ;
  526. typedef struct tagICEXYZTRIPLE
  527. {
  528.         CIEXYZ  ciexyzRed;
  529.         CIEXYZ  ciexyzGreen;
  530.         CIEXYZ  ciexyzBlue;
  531. } CIEXYZTRIPLE;
  532. typedef CIEXYZTRIPLE    FAR *LPCIEXYZTRIPLE;
  533. // The next structures the logical color space. Unlike pens and brushes,
  534. // but like palettes, there is only one way to create a LogColorSpace.
  535. // A pointer to it must be passed, its elements can't be pushed as
  536. // arguments.
  537. typedef struct tagLOGCOLORSPACEA {
  538.     DWORD lcsSignature;
  539.     DWORD lcsVersion;
  540.     DWORD lcsSize;
  541.     LCSCSTYPE lcsCSType;
  542.     LCSGAMUTMATCH lcsIntent;
  543.     CIEXYZTRIPLE lcsEndpoints;
  544.     DWORD lcsGammaRed;
  545.     DWORD lcsGammaGreen;
  546.     DWORD lcsGammaBlue;
  547.     CHAR   lcsFilename[MAX_PATH];
  548. } LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
  549. typedef struct tagLOGCOLORSPACEW {
  550.     DWORD lcsSignature;
  551.     DWORD lcsVersion;
  552.     DWORD lcsSize;
  553.     LCSCSTYPE lcsCSType;
  554.     LCSGAMUTMATCH lcsIntent;
  555.     CIEXYZTRIPLE lcsEndpoints;
  556.     DWORD lcsGammaRed;
  557.     DWORD lcsGammaGreen;
  558.     DWORD lcsGammaBlue;
  559.     WCHAR  lcsFilename[MAX_PATH];
  560. } LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
  561. #ifdef UNICODE
  562. typedef LOGCOLORSPACEW LOGCOLORSPACE;
  563. typedef LPLOGCOLORSPACEW LPLOGCOLORSPACE;
  564. #else
  565. typedef LOGCOLORSPACEA LOGCOLORSPACE;
  566. typedef LPLOGCOLORSPACEA LPLOGCOLORSPACE;
  567. #endif // UNICODE
  568. #endif /* WINVER >= 0x0400 */
  569. /* structures for defining DIBs */
  570. typedef struct tagBITMAPCOREHEADER {
  571.         DWORD   bcSize;                 /* used to get to color table */
  572.         WORD    bcWidth;
  573.         WORD    bcHeight;
  574.         WORD    bcPlanes;
  575.         WORD    bcBitCount;
  576. } BITMAPCOREHEADER, FAR *LPBITMAPCOREHEADER, *PBITMAPCOREHEADER;
  577. typedef struct tagBITMAPINFOHEADER{
  578.         DWORD      biSize;
  579.         LONG       biWidth;
  580.         LONG       biHeight;
  581.         WORD       biPlanes;
  582.         WORD       biBitCount;
  583.         DWORD      biCompression;
  584.         DWORD      biSizeImage;
  585.         LONG       biXPelsPerMeter;
  586.         LONG       biYPelsPerMeter;
  587.         DWORD      biClrUsed;
  588.         DWORD      biClrImportant;
  589. } BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
  590. #if(WINVER >= 0x0400)
  591. typedef struct {
  592.         DWORD        bV4Size;
  593.         LONG         bV4Width;
  594.         LONG         bV4Height;
  595.         WORD         bV4Planes;
  596.         WORD         bV4BitCount;
  597.         DWORD        bV4V4Compression;
  598.         DWORD        bV4SizeImage;
  599.         LONG         bV4XPelsPerMeter;
  600.         LONG         bV4YPelsPerMeter;
  601.         DWORD        bV4ClrUsed;
  602.         DWORD        bV4ClrImportant;
  603.         DWORD        bV4RedMask;
  604.         DWORD        bV4GreenMask;
  605.         DWORD        bV4BlueMask;
  606.         DWORD        bV4AlphaMask;
  607.         DWORD        bV4CSType;
  608.         CIEXYZTRIPLE bV4Endpoints;
  609.         DWORD        bV4GammaRed;
  610.         DWORD        bV4GammaGreen;
  611.         DWORD        bV4GammaBlue;
  612. } BITMAPV4HEADER, FAR *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
  613. #endif /* WINVER >= 0x0400 */
  614. #if (WINVER >= 0x0500)
  615. typedef struct {
  616.         DWORD        bV5Size;
  617.         LONG         bV5Width;
  618.         LONG         bV5Height;
  619.         WORD         bV5Planes;
  620.         WORD         bV5BitCount;
  621.         DWORD        bV5Compression;
  622.         DWORD        bV5SizeImage;
  623.         LONG         bV5XPelsPerMeter;
  624.         LONG         bV5YPelsPerMeter;
  625.         DWORD        bV5ClrUsed;
  626.         DWORD        bV5ClrImportant;
  627.         DWORD        bV5RedMask;
  628.         DWORD        bV5GreenMask;
  629.         DWORD        bV5BlueMask;
  630.         DWORD        bV5AlphaMask;
  631.         DWORD        bV5CSType;
  632.         CIEXYZTRIPLE bV5Endpoints;
  633.         DWORD        bV5GammaRed;
  634.         DWORD        bV5GammaGreen;
  635.         DWORD        bV5GammaBlue;
  636.         DWORD        bV5Intent;
  637.         DWORD        bV5ProfileData;
  638.         DWORD        bV5ProfileSize;
  639.         DWORD        bV5Reserved;
  640. } BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
  641. // Values for bV5CSType
  642. #define PROFILE_LINKED          'LINK'
  643. #define PROFILE_EMBEDDED        'MBED'
  644. #endif
  645. /* constants for the biCompression field */
  646. #define BI_RGB        0L
  647. #define BI_RLE8       1L
  648. #define BI_RLE4       2L
  649. #define BI_BITFIELDS  3L
  650. #define BI_JPEG       4L
  651. #define BI_PNG        5L
  652. #if (_WIN32_WINNT >= 0x0400)
  653. #endif
  654. typedef struct tagBITMAPINFO {
  655.     BITMAPINFOHEADER    bmiHeader;
  656.     RGBQUAD             bmiColors[1];
  657. } BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
  658. typedef struct tagBITMAPCOREINFO {
  659.     BITMAPCOREHEADER    bmciHeader;
  660.     RGBTRIPLE           bmciColors[1];
  661. } BITMAPCOREINFO, FAR *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
  662. #include <pshpack2.h>
  663. typedef struct tagBITMAPFILEHEADER {
  664.         WORD    bfType;
  665.         DWORD   bfSize;
  666.         WORD    bfReserved1;
  667.         WORD    bfReserved2;
  668.         DWORD   bfOffBits;
  669. } BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
  670. #include <poppack.h>
  671. #define MAKEPOINTS(l)       (*((POINTS FAR *)&(l)))
  672. #if(WINVER >= 0x0400)
  673. #ifndef NOFONTSIG
  674. typedef struct tagFONTSIGNATURE
  675. {
  676.     DWORD fsUsb[4];
  677.     DWORD fsCsb[2];
  678. } FONTSIGNATURE, *PFONTSIGNATURE,FAR *LPFONTSIGNATURE;
  679. typedef struct tagCHARSETINFO
  680. {
  681.     UINT ciCharset;
  682.     UINT ciACP;
  683.     FONTSIGNATURE fs;
  684. } CHARSETINFO, *PCHARSETINFO, NEAR *NPCHARSETINFO, FAR *LPCHARSETINFO;
  685. #define TCI_SRCCHARSET  1
  686. #define TCI_SRCCODEPAGE 2
  687. #define TCI_SRCFONTSIG  3
  688. typedef struct tagLOCALESIGNATURE
  689. {
  690.     DWORD lsUsb[4];
  691.     DWORD lsCsbDefault[2];
  692.     DWORD lsCsbSupported[2];
  693. } LOCALESIGNATURE, *PLOCALESIGNATURE,FAR *LPLOCALESIGNATURE;
  694. #endif
  695. #endif /* WINVER >= 0x0400 */
  696. #ifndef NOMETAFILE
  697. /* Clipboard Metafile Picture Structure */
  698. typedef struct tagHANDLETABLE
  699.   {
  700.     HGDIOBJ     objectHandle[1];
  701.   } HANDLETABLE, *PHANDLETABLE, FAR *LPHANDLETABLE;
  702. typedef struct tagMETARECORD
  703.   {
  704.     DWORD       rdSize;
  705.     WORD        rdFunction;
  706.     WORD        rdParm[1];
  707.   } METARECORD;
  708. typedef struct tagMETARECORD UNALIGNED *PMETARECORD;
  709. typedef struct tagMETARECORD UNALIGNED FAR *LPMETARECORD;
  710. typedef struct tagMETAFILEPICT
  711.   {
  712.     LONG        mm;
  713.     LONG        xExt;
  714.     LONG        yExt;
  715.     HMETAFILE   hMF;
  716.   } METAFILEPICT, FAR *LPMETAFILEPICT;
  717. #include <pshpack2.h>
  718. typedef struct tagMETAHEADER
  719. {
  720.     WORD        mtType;
  721.     WORD        mtHeaderSize;
  722.     WORD        mtVersion;
  723.     DWORD       mtSize;
  724.     WORD        mtNoObjects;
  725.     DWORD       mtMaxRecord;
  726.     WORD        mtNoParameters;
  727. } METAHEADER;
  728. typedef struct tagMETAHEADER UNALIGNED *PMETAHEADER;
  729. typedef struct tagMETAHEADER UNALIGNED FAR *LPMETAHEADER;
  730. #include <poppack.h>
  731. /* Enhanced Metafile structures */
  732. typedef struct tagENHMETARECORD
  733. {
  734.     DWORD   iType;              // Record type EMR_XXX
  735.     DWORD   nSize;              // Record size in bytes
  736.     DWORD   dParm[1];           // Parameters
  737. } ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
  738. typedef struct tagENHMETAHEADER
  739. {
  740.     DWORD   iType;              // Record type EMR_HEADER
  741.     DWORD   nSize;              // Record size in bytes.  This may be greater
  742.                                 // than the sizeof(ENHMETAHEADER).
  743.     RECTL   rclBounds;          // Inclusive-inclusive bounds in device units
  744.     RECTL   rclFrame;           // Inclusive-inclusive Picture Frame of metafile in .01 mm units
  745.     DWORD   dSignature;         // Signature.  Must be ENHMETA_SIGNATURE.
  746.     DWORD   nVersion;           // Version number
  747.     DWORD   nBytes;             // Size of the metafile in bytes
  748.     DWORD   nRecords;           // Number of records in the metafile
  749.     WORD    nHandles;           // Number of handles in the handle table
  750.                                 // Handle index zero is reserved.
  751.     WORD    sReserved;          // Reserved.  Must be zero.
  752.     DWORD   nDescription;       // Number of chars in the unicode description string
  753.                                 // This is 0 if there is no description string
  754.     DWORD   offDescription;     // Offset to the metafile description record.
  755.                                 // This is 0 if there is no description string
  756.     DWORD   nPalEntries;        // Number of entries in the metafile palette.
  757.     SIZEL   szlDevice;          // Size of the reference device in pels
  758.     SIZEL   szlMillimeters;     // Size of the reference device in millimeters
  759. #if(WINVER >= 0x0400)
  760.     DWORD   cbPixelFormat;      // Size of PIXELFORMATDESCRIPTOR information
  761.                                 // This is 0 if no pixel format is set
  762.     DWORD   offPixelFormat;     // Offset to PIXELFORMATDESCRIPTOR
  763.                                 // This is 0 if no pixel format is set
  764.     DWORD   bOpenGL;            // TRUE if OpenGL commands are present in
  765.                                 // the metafile, otherwise FALSE
  766. #endif /* WINVER >= 0x0400 */
  767. #if(WINVER >= 0x0500)
  768.     SIZEL   szlMicrometers;     // Size of the reference device in micrometers
  769. #endif /* WINVER >= 0x0500 */
  770. } ENHMETAHEADER, *PENHMETAHEADER, *LPENHMETAHEADER;
  771. #endif /* NOMETAFILE */
  772. #ifndef NOTEXTMETRIC
  773. /* tmPitchAndFamily flags */
  774. #define TMPF_FIXED_PITCH    0x01
  775. #define TMPF_VECTOR             0x02
  776. #define TMPF_DEVICE             0x08
  777. #define TMPF_TRUETYPE       0x04
  778. //
  779. // BCHAR definition for APPs
  780. //
  781. #ifdef UNICODE
  782.     typedef WCHAR BCHAR;
  783. #else
  784.     typedef BYTE BCHAR;
  785. #endif
  786. #ifndef _TEXTMETRIC_DEFINED
  787. #define _TEXTMETRIC_DEFINED
  788. typedef struct tagTEXTMETRICA
  789. {
  790.     LONG        tmHeight;
  791.     LONG        tmAscent;
  792.     LONG        tmDescent;
  793.     LONG        tmInternalLeading;
  794.     LONG        tmExternalLeading;
  795.     LONG        tmAveCharWidth;
  796.     LONG        tmMaxCharWidth;
  797.     LONG        tmWeight;
  798.     LONG        tmOverhang;
  799.     LONG        tmDigitizedAspectX;
  800.     LONG        tmDigitizedAspectY;
  801.     BYTE        tmFirstChar;
  802.     BYTE        tmLastChar;
  803.     BYTE        tmDefaultChar;
  804.     BYTE        tmBreakChar;
  805.     BYTE        tmItalic;
  806.     BYTE        tmUnderlined;
  807.     BYTE        tmStruckOut;
  808.     BYTE        tmPitchAndFamily;
  809.     BYTE        tmCharSet;
  810. } TEXTMETRICA, *PTEXTMETRICA, NEAR *NPTEXTMETRICA, FAR *LPTEXTMETRICA;
  811. typedef struct tagTEXTMETRICW
  812. {
  813.     LONG        tmHeight;
  814.     LONG        tmAscent;
  815.     LONG        tmDescent;
  816.     LONG        tmInternalLeading;
  817.     LONG        tmExternalLeading;
  818.     LONG        tmAveCharWidth;
  819.     LONG        tmMaxCharWidth;
  820.     LONG        tmWeight;
  821.     LONG        tmOverhang;
  822.     LONG        tmDigitizedAspectX;
  823.     LONG        tmDigitizedAspectY;
  824.     WCHAR       tmFirstChar;
  825.     WCHAR       tmLastChar;
  826.     WCHAR       tmDefaultChar;
  827.     WCHAR       tmBreakChar;
  828.     BYTE        tmItalic;
  829.     BYTE        tmUnderlined;
  830.     BYTE        tmStruckOut;
  831.     BYTE        tmPitchAndFamily;
  832.     BYTE        tmCharSet;
  833. } TEXTMETRICW, *PTEXTMETRICW, NEAR *NPTEXTMETRICW, FAR *LPTEXTMETRICW;
  834. #ifdef UNICODE
  835. typedef TEXTMETRICW TEXTMETRIC;
  836. typedef PTEXTMETRICW PTEXTMETRIC;
  837. typedef NPTEXTMETRICW NPTEXTMETRIC;
  838. typedef LPTEXTMETRICW LPTEXTMETRIC;
  839. #else
  840. typedef TEXTMETRICA TEXTMETRIC;
  841. typedef PTEXTMETRICA PTEXTMETRIC;
  842. typedef NPTEXTMETRICA NPTEXTMETRIC;
  843. typedef LPTEXTMETRICA LPTEXTMETRIC;
  844. #endif // UNICODE
  845. #endif // !_TEXTMETRIC_DEFINED
  846. /* ntmFlags field flags */
  847. #define NTM_REGULAR     0x00000040L
  848. #define NTM_BOLD        0x00000020L
  849. #define NTM_ITALIC      0x00000001L
  850. /* new in NT 5.0 */
  851. #define NTM_NONNEGATIVE_AC  0x00010000
  852. #define NTM_PS_OPENTYPE     0x00020000
  853. #define NTM_TT_OPENTYPE     0x00040000
  854. #define NTM_MULTIPLEMASTER  0x00080000
  855. #define NTM_TYPE1           0x00100000
  856. #define NTM_DSIG            0x00200000
  857. #include <pshpack4.h>
  858. typedef struct tagNEWTEXTMETRICA
  859. {
  860.     LONG        tmHeight;
  861.     LONG        tmAscent;
  862.     LONG        tmDescent;
  863.     LONG        tmInternalLeading;
  864.     LONG        tmExternalLeading;
  865.     LONG        tmAveCharWidth;
  866.     LONG        tmMaxCharWidth;
  867.     LONG        tmWeight;
  868.     LONG        tmOverhang;
  869.     LONG        tmDigitizedAspectX;
  870.     LONG        tmDigitizedAspectY;
  871.     BYTE        tmFirstChar;
  872.     BYTE        tmLastChar;
  873.     BYTE        tmDefaultChar;
  874.     BYTE        tmBreakChar;
  875.     BYTE        tmItalic;
  876.     BYTE        tmUnderlined;
  877.     BYTE        tmStruckOut;
  878.     BYTE        tmPitchAndFamily;
  879.     BYTE        tmCharSet;
  880.     DWORD   ntmFlags;
  881.     UINT    ntmSizeEM;
  882.     UINT    ntmCellHeight;
  883.     UINT    ntmAvgWidth;
  884. } NEWTEXTMETRICA, *PNEWTEXTMETRICA, NEAR *NPNEWTEXTMETRICA, FAR *LPNEWTEXTMETRICA;
  885. typedef struct tagNEWTEXTMETRICW
  886. {
  887.     LONG        tmHeight;
  888.     LONG        tmAscent;
  889.     LONG        tmDescent;
  890.     LONG        tmInternalLeading;
  891.     LONG        tmExternalLeading;
  892.     LONG        tmAveCharWidth;
  893.     LONG        tmMaxCharWidth;
  894.     LONG        tmWeight;
  895.     LONG        tmOverhang;
  896.     LONG        tmDigitizedAspectX;
  897.     LONG        tmDigitizedAspectY;
  898.     WCHAR       tmFirstChar;
  899.     WCHAR       tmLastChar;
  900.     WCHAR       tmDefaultChar;
  901.     WCHAR       tmBreakChar;
  902.     BYTE        tmItalic;
  903.     BYTE        tmUnderlined;
  904.     BYTE        tmStruckOut;
  905.     BYTE        tmPitchAndFamily;
  906.     BYTE        tmCharSet;
  907.     DWORD   ntmFlags;
  908.     UINT    ntmSizeEM;
  909.     UINT    ntmCellHeight;
  910.     UINT    ntmAvgWidth;
  911. } NEWTEXTMETRICW, *PNEWTEXTMETRICW, NEAR *NPNEWTEXTMETRICW, FAR *LPNEWTEXTMETRICW;
  912. #ifdef UNICODE
  913. typedef NEWTEXTMETRICW NEWTEXTMETRIC;
  914. typedef PNEWTEXTMETRICW PNEWTEXTMETRIC;
  915. typedef NPNEWTEXTMETRICW NPNEWTEXTMETRIC;
  916. typedef LPNEWTEXTMETRICW LPNEWTEXTMETRIC;
  917. #else
  918. typedef NEWTEXTMETRICA NEWTEXTMETRIC;
  919. typedef PNEWTEXTMETRICA PNEWTEXTMETRIC;
  920. typedef NPNEWTEXTMETRICA NPNEWTEXTMETRIC;
  921. typedef LPNEWTEXTMETRICA LPNEWTEXTMETRIC;
  922. #endif // UNICODE
  923. #include <poppack.h>
  924. #if(WINVER >= 0x0400)
  925. typedef struct tagNEWTEXTMETRICEXA
  926. {
  927.     NEWTEXTMETRICA  ntmTm;
  928.     FONTSIGNATURE   ntmFontSig;
  929. }NEWTEXTMETRICEXA;
  930. typedef struct tagNEWTEXTMETRICEXW
  931. {
  932.     NEWTEXTMETRICW  ntmTm;
  933.     FONTSIGNATURE   ntmFontSig;
  934. }NEWTEXTMETRICEXW;
  935. #ifdef UNICODE
  936. typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
  937. #else
  938. typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
  939. #endif // UNICODE
  940. #endif /* WINVER >= 0x0400 */
  941. #endif /* NOTEXTMETRIC */
  942. /* GDI Logical Objects: */
  943. /* Pel Array */
  944. typedef struct tagPELARRAY
  945.   {
  946.     LONG        paXCount;
  947.     LONG        paYCount;
  948.     LONG        paXExt;
  949.     LONG        paYExt;
  950.     BYTE        paRGBs;
  951.   } PELARRAY, *PPELARRAY, NEAR *NPPELARRAY, FAR *LPPELARRAY;
  952. /* Logical Brush (or Pattern) */
  953. typedef struct tagLOGBRUSH
  954.   {
  955.     UINT        lbStyle;
  956.     COLORREF    lbColor;
  957.     ULONG_PTR    lbHatch;    // Sundown: lbHatch could hold a HANDLE
  958.   } LOGBRUSH, *PLOGBRUSH, NEAR *NPLOGBRUSH, FAR *LPLOGBRUSH;
  959. typedef struct tagLOGBRUSH32
  960.   {
  961.     UINT        lbStyle;
  962.     COLORREF    lbColor;
  963.     ULONG       lbHatch;
  964.   } LOGBRUSH32, *PLOGBRUSH32, NEAR *NPLOGBRUSH32, FAR *LPLOGBRUSH32;
  965. typedef LOGBRUSH            PATTERN;
  966. typedef PATTERN             *PPATTERN;
  967. typedef PATTERN NEAR        *NPPATTERN;
  968. typedef PATTERN FAR         *LPPATTERN;
  969. /* Logical Pen */
  970. typedef struct tagLOGPEN
  971.   {
  972.     UINT        lopnStyle;
  973.     POINT       lopnWidth;
  974.     COLORREF    lopnColor;
  975.   } LOGPEN, *PLOGPEN, NEAR *NPLOGPEN, FAR *LPLOGPEN;
  976. typedef struct tagEXTLOGPEN {
  977.     DWORD       elpPenStyle;
  978.     DWORD       elpWidth;
  979.     UINT        elpBrushStyle;
  980.     COLORREF    elpColor;
  981.     ULONG_PTR    elpHatch;     //Sundown: elpHatch could take a HANDLE
  982.     DWORD       elpNumEntries;
  983.     DWORD       elpStyleEntry[1];
  984. } EXTLOGPEN, *PEXTLOGPEN, NEAR *NPEXTLOGPEN, FAR *LPEXTLOGPEN;
  985. #ifndef _PALETTEENTRY_DEFINED
  986. #define _PALETTEENTRY_DEFINED
  987. typedef struct tagPALETTEENTRY {
  988.     BYTE        peRed;
  989.     BYTE        peGreen;
  990.     BYTE        peBlue;
  991.     BYTE        peFlags;
  992. } PALETTEENTRY, *PPALETTEENTRY, FAR *LPPALETTEENTRY;
  993. #endif // !_PALETTEENTRY_DEFINED
  994. #ifndef _LOGPALETTE_DEFINED
  995. #define _LOGPALETTE_DEFINED
  996. /* Logical Palette */
  997. typedef struct tagLOGPALETTE {
  998.     WORD        palVersion;
  999.     WORD        palNumEntries;
  1000.     PALETTEENTRY        palPalEntry[1];
  1001. } LOGPALETTE, *PLOGPALETTE, NEAR *NPLOGPALETTE, FAR *LPLOGPALETTE;
  1002. #endif // !_LOGPALETTE_DEFINED
  1003. /* Logical Font */
  1004. #define LF_FACESIZE         32
  1005. typedef struct tagLOGFONTA
  1006. {
  1007.     LONG      lfHeight;
  1008.     LONG      lfWidth;
  1009.     LONG      lfEscapement;
  1010.     LONG      lfOrientation;
  1011.     LONG      lfWeight;
  1012.     BYTE      lfItalic;
  1013.     BYTE      lfUnderline;
  1014.     BYTE      lfStrikeOut;
  1015.     BYTE      lfCharSet;
  1016.     BYTE      lfOutPrecision;
  1017.     BYTE      lfClipPrecision;
  1018.     BYTE      lfQuality;
  1019.     BYTE      lfPitchAndFamily;
  1020.     CHAR      lfFaceName[LF_FACESIZE];
  1021. } LOGFONTA, *PLOGFONTA, NEAR *NPLOGFONTA, FAR *LPLOGFONTA;
  1022. typedef struct tagLOGFONTW
  1023. {
  1024.     LONG      lfHeight;
  1025.     LONG      lfWidth;
  1026.     LONG      lfEscapement;
  1027.     LONG      lfOrientation;
  1028.     LONG      lfWeight;
  1029.     BYTE      lfItalic;
  1030.     BYTE      lfUnderline;
  1031.     BYTE      lfStrikeOut;
  1032.     BYTE      lfCharSet;
  1033.     BYTE      lfOutPrecision;
  1034.     BYTE      lfClipPrecision;
  1035.     BYTE      lfQuality;
  1036.     BYTE      lfPitchAndFamily;
  1037.     WCHAR     lfFaceName[LF_FACESIZE];
  1038. } LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;
  1039. #ifdef UNICODE
  1040. typedef LOGFONTW LOGFONT;
  1041. typedef PLOGFONTW PLOGFONT;
  1042. typedef NPLOGFONTW NPLOGFONT;
  1043. typedef LPLOGFONTW LPLOGFONT;
  1044. #else
  1045. typedef LOGFONTA LOGFONT;
  1046. typedef PLOGFONTA PLOGFONT;
  1047. typedef NPLOGFONTA NPLOGFONT;
  1048. typedef LPLOGFONTA LPLOGFONT;
  1049. #endif // UNICODE
  1050. #define LF_FULLFACESIZE     64
  1051. /* Structure passed to FONTENUMPROC */
  1052. typedef struct tagENUMLOGFONTA
  1053. {
  1054.     LOGFONTA elfLogFont;
  1055.     BYTE     elfFullName[LF_FULLFACESIZE];
  1056.     BYTE     elfStyle[LF_FACESIZE];
  1057. } ENUMLOGFONTA, FAR* LPENUMLOGFONTA;
  1058. /* Structure passed to FONTENUMPROC */
  1059. typedef struct tagENUMLOGFONTW
  1060. {
  1061.     LOGFONTW elfLogFont;
  1062.     WCHAR    elfFullName[LF_FULLFACESIZE];
  1063.     WCHAR    elfStyle[LF_FACESIZE];
  1064. } ENUMLOGFONTW, FAR* LPENUMLOGFONTW;
  1065. #ifdef UNICODE
  1066. typedef ENUMLOGFONTW ENUMLOGFONT;
  1067. typedef LPENUMLOGFONTW LPENUMLOGFONT;
  1068. #else
  1069. typedef ENUMLOGFONTA ENUMLOGFONT;
  1070. typedef LPENUMLOGFONTA LPENUMLOGFONT;
  1071. #endif // UNICODE
  1072. #if(WINVER >= 0x0400)
  1073. typedef struct tagENUMLOGFONTEXA
  1074. {
  1075.     LOGFONTA    elfLogFont;
  1076.     BYTE        elfFullName[LF_FULLFACESIZE];
  1077.     BYTE        elfStyle[LF_FACESIZE];
  1078.     BYTE        elfScript[LF_FACESIZE];
  1079. } ENUMLOGFONTEXA, FAR *LPENUMLOGFONTEXA;
  1080. typedef struct tagENUMLOGFONTEXW
  1081. {
  1082.     LOGFONTW    elfLogFont;
  1083.     WCHAR       elfFullName[LF_FULLFACESIZE];
  1084.     WCHAR       elfStyle[LF_FACESIZE];
  1085.     WCHAR       elfScript[LF_FACESIZE];
  1086. } ENUMLOGFONTEXW, FAR *LPENUMLOGFONTEXW;
  1087. #ifdef UNICODE
  1088. typedef ENUMLOGFONTEXW ENUMLOGFONTEX;
  1089. typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX;
  1090. #else
  1091. typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
  1092. typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
  1093. #endif // UNICODE
  1094. #endif /* WINVER >= 0x0400 */
  1095. #define OUT_DEFAULT_PRECIS          0
  1096. #define OUT_STRING_PRECIS           1
  1097. #define OUT_CHARACTER_PRECIS        2
  1098. #define OUT_STROKE_PRECIS           3
  1099. #define OUT_TT_PRECIS               4
  1100. #define OUT_DEVICE_PRECIS           5
  1101. #define OUT_RASTER_PRECIS           6
  1102. #define OUT_TT_ONLY_PRECIS          7
  1103. #define OUT_OUTLINE_PRECIS          8
  1104. #define OUT_SCREEN_OUTLINE_PRECIS   9
  1105. #define OUT_PS_ONLY_PRECIS          10
  1106. #define CLIP_DEFAULT_PRECIS     0
  1107. #define CLIP_CHARACTER_PRECIS   1
  1108. #define CLIP_STROKE_PRECIS      2
  1109. #define CLIP_MASK               0xf
  1110. #define CLIP_LH_ANGLES          (1<<4)
  1111. #define CLIP_TT_ALWAYS          (2<<4)
  1112. #define CLIP_EMBEDDED           (8<<4)
  1113. #define DEFAULT_QUALITY         0
  1114. #define DRAFT_QUALITY           1
  1115. #define PROOF_QUALITY           2
  1116. #if(WINVER >= 0x0400)
  1117. #define NONANTIALIASED_QUALITY  3
  1118. #define ANTIALIASED_QUALITY     4
  1119. #endif /* WINVER >= 0x0400 */
  1120. #if (_WIN32_WINNT >= 0x0500)
  1121. #define CLEARTYPE_QUALITY       5
  1122. #endif
  1123. #define DEFAULT_PITCH           0
  1124. #define FIXED_PITCH             1
  1125. #define VARIABLE_PITCH          2
  1126. #if(WINVER >= 0x0400)
  1127. #define MONO_FONT               8
  1128. #endif /* WINVER >= 0x0400 */
  1129. #define ANSI_CHARSET            0
  1130. #define DEFAULT_CHARSET         1
  1131. #define SYMBOL_CHARSET          2
  1132. #define SHIFTJIS_CHARSET        128
  1133. #define HANGEUL_CHARSET         129
  1134. #define HANGUL_CHARSET          129
  1135. #define GB2312_CHARSET          134
  1136. #define CHINESEBIG5_CHARSET     136
  1137. #define OEM_CHARSET             255
  1138. #if(WINVER >= 0x0400)
  1139. #define JOHAB_CHARSET           130
  1140. #define HEBREW_CHARSET          177
  1141. #define ARABIC_CHARSET          178
  1142. #define GREEK_CHARSET           161
  1143. #define TURKISH_CHARSET         162
  1144. #define VIETNAMESE_CHARSET      163
  1145. #define THAI_CHARSET            222
  1146. #define EASTEUROPE_CHARSET      238
  1147. #define RUSSIAN_CHARSET         204
  1148. #define MAC_CHARSET             77
  1149. #define BALTIC_CHARSET          186
  1150. #define FS_LATIN1               0x00000001L
  1151. #define FS_LATIN2               0x00000002L
  1152. #define FS_CYRILLIC             0x00000004L
  1153. #define FS_GREEK                0x00000008L
  1154. #define FS_TURKISH              0x00000010L
  1155. #define FS_HEBREW               0x00000020L
  1156. #define FS_ARABIC               0x00000040L
  1157. #define FS_BALTIC               0x00000080L
  1158. #define FS_VIETNAMESE           0x00000100L
  1159. #define FS_THAI                 0x00010000L
  1160. #define FS_JISJAPAN             0x00020000L
  1161. #define FS_CHINESESIMP          0x00040000L
  1162. #define FS_WANSUNG              0x00080000L
  1163. #define FS_CHINESETRAD          0x00100000L
  1164. #define FS_JOHAB                0x00200000L
  1165. #define FS_SYMBOL               0x80000000L
  1166. #endif /* WINVER >= 0x0400 */
  1167. /* Font Families */
  1168. #define FF_DONTCARE         (0<<4)  /* Don't care or don't know. */
  1169. #define FF_ROMAN            (1<<4)  /* Variable stroke width, serifed. */
  1170.                                     /* Times Roman, Century Schoolbook, etc. */
  1171. #define FF_SWISS            (2<<4)  /* Variable stroke width, sans-serifed. */
  1172.                                     /* Helvetica, Swiss, etc. */
  1173. #define FF_MODERN           (3<<4)  /* Constant stroke width, serifed or sans-serifed. */
  1174.                                     /* Pica, Elite, Courier, etc. */
  1175. #define FF_SCRIPT           (4<<4)  /* Cursive, etc. */
  1176. #define FF_DECORATIVE       (5<<4)  /* Old English, etc. */
  1177. /* Font Weights */
  1178. #define FW_DONTCARE         0
  1179. #define FW_THIN             100
  1180. #define FW_EXTRALIGHT       200
  1181. #define FW_LIGHT            300
  1182. #define FW_NORMAL           400
  1183. #define FW_MEDIUM           500
  1184. #define FW_SEMIBOLD         600
  1185. #define FW_BOLD             700
  1186. #define FW_EXTRABOLD        800
  1187. #define FW_HEAVY            900
  1188. #define FW_ULTRALIGHT       FW_EXTRALIGHT
  1189. #define FW_REGULAR          FW_NORMAL
  1190. #define FW_DEMIBOLD         FW_SEMIBOLD
  1191. #define FW_ULTRABOLD        FW_EXTRABOLD
  1192. #define FW_BLACK            FW_HEAVY
  1193. #define PANOSE_COUNT               10
  1194. #define PAN_FAMILYTYPE_INDEX        0
  1195. #define PAN_SERIFSTYLE_INDEX        1
  1196. #define PAN_WEIGHT_INDEX            2
  1197. #define PAN_PROPORTION_INDEX        3
  1198. #define PAN_CONTRAST_INDEX          4
  1199. #define PAN_STROKEVARIATION_INDEX   5
  1200. #define PAN_ARMSTYLE_INDEX          6
  1201. #define PAN_LETTERFORM_INDEX        7
  1202. #define PAN_MIDLINE_INDEX           8
  1203. #define PAN_XHEIGHT_INDEX           9
  1204. #define PAN_CULTURE_LATIN           0
  1205. typedef struct tagPANOSE
  1206. {
  1207.     BYTE    bFamilyType;
  1208.     BYTE    bSerifStyle;
  1209.     BYTE    bWeight;
  1210.     BYTE    bProportion;
  1211.     BYTE    bContrast;
  1212.     BYTE    bStrokeVariation;
  1213.     BYTE    bArmStyle;
  1214.     BYTE    bLetterform;
  1215.     BYTE    bMidline;
  1216.     BYTE    bXHeight;
  1217. } PANOSE, * LPPANOSE;
  1218. #define PAN_ANY                         0 /* Any                            */
  1219. #define PAN_NO_FIT                      1 /* No Fit                         */
  1220. #define PAN_FAMILY_TEXT_DISPLAY         2 /* Text and Display               */
  1221. #define PAN_FAMILY_SCRIPT               3 /* Script                         */
  1222. #define PAN_FAMILY_DECORATIVE           4 /* Decorative                     */
  1223. #define PAN_FAMILY_PICTORIAL            5 /* Pictorial                      */
  1224. #define PAN_SERIF_COVE                  2 /* Cove                           */
  1225. #define PAN_SERIF_OBTUSE_COVE           3 /* Obtuse Cove                    */
  1226. #define PAN_SERIF_SQUARE_COVE           4 /* Square Cove                    */
  1227. #define PAN_SERIF_OBTUSE_SQUARE_COVE    5 /* Obtuse Square Cove             */
  1228. #define PAN_SERIF_SQUARE                6 /* Square                         */
  1229. #define PAN_SERIF_THIN                  7 /* Thin                           */
  1230. #define PAN_SERIF_BONE                  8 /* Bone                           */
  1231. #define PAN_SERIF_EXAGGERATED           9 /* Exaggerated                    */
  1232. #define PAN_SERIF_TRIANGLE             10 /* Triangle                       */
  1233. #define PAN_SERIF_NORMAL_SANS          11 /* Normal Sans                    */
  1234. #define PAN_SERIF_OBTUSE_SANS          12 /* Obtuse Sans                    */
  1235. #define PAN_SERIF_PERP_SANS            13 /* Prep Sans                      */
  1236. #define PAN_SERIF_FLARED               14 /* Flared                         */
  1237. #define PAN_SERIF_ROUNDED              15 /* Rounded                        */
  1238. #define PAN_WEIGHT_VERY_LIGHT           2 /* Very Light                     */
  1239. #define PAN_WEIGHT_LIGHT                3 /* Light                          */
  1240. #define PAN_WEIGHT_THIN                 4 /* Thin                           */
  1241. #define PAN_WEIGHT_BOOK                 5 /* Book                           */
  1242. #define PAN_WEIGHT_MEDIUM               6 /* Medium                         */
  1243. #define PAN_WEIGHT_DEMI                 7 /* Demi                           */
  1244. #define PAN_WEIGHT_BOLD                 8 /* Bold                           */
  1245. #define PAN_WEIGHT_HEAVY                9 /* Heavy                          */
  1246. #define PAN_WEIGHT_BLACK               10 /* Black                          */
  1247. #define PAN_WEIGHT_NORD                11 /* Nord                           */
  1248. #define PAN_PROP_OLD_STYLE              2 /* Old Style                      */
  1249. #define PAN_PROP_MODERN                 3 /* Modern                         */
  1250. #define PAN_PROP_EVEN_WIDTH             4 /* Even Width                     */
  1251. #define PAN_PROP_EXPANDED               5 /* Expanded                       */
  1252. #define PAN_PROP_CONDENSED              6 /* Condensed                      */
  1253. #define PAN_PROP_VERY_EXPANDED          7 /* Very Expanded                  */
  1254. #define PAN_PROP_VERY_CONDENSED         8 /* Very Condensed                 */
  1255. #define PAN_PROP_MONOSPACED             9 /* Monospaced                     */
  1256. #define PAN_CONTRAST_NONE               2 /* None                           */
  1257. #define PAN_CONTRAST_VERY_LOW           3 /* Very Low                       */
  1258. #define PAN_CONTRAST_LOW                4 /* Low                            */
  1259. #define PAN_CONTRAST_MEDIUM_LOW         5 /* Medium Low                     */
  1260. #define PAN_CONTRAST_MEDIUM             6 /* Medium                         */
  1261. #define PAN_CONTRAST_MEDIUM_HIGH        7 /* Mediim High                    */
  1262. #define PAN_CONTRAST_HIGH               8 /* High                           */
  1263. #define PAN_CONTRAST_VERY_HIGH          9 /* Very High                      */
  1264. #define PAN_STROKE_GRADUAL_DIAG         2 /* Gradual/Diagonal               */
  1265. #define PAN_STROKE_GRADUAL_TRAN         3 /* Gradual/Transitional           */
  1266. #define PAN_STROKE_GRADUAL_VERT         4 /* Gradual/Vertical               */
  1267. #define PAN_STROKE_GRADUAL_HORZ         5 /* Gradual/Horizontal             */
  1268. #define PAN_STROKE_RAPID_VERT           6 /* Rapid/Vertical                 */
  1269. #define PAN_STROKE_RAPID_HORZ           7 /* Rapid/Horizontal               */
  1270. #define PAN_STROKE_INSTANT_VERT         8 /* Instant/Vertical               */
  1271. #define PAN_STRAIGHT_ARMS_HORZ          2 /* Straight Arms/Horizontal       */
  1272. #define PAN_STRAIGHT_ARMS_WEDGE         3 /* Straight Arms/Wedge            */
  1273. #define PAN_STRAIGHT_ARMS_VERT          4 /* Straight Arms/Vertical         */
  1274. #define PAN_STRAIGHT_ARMS_SINGLE_SERIF  5 /* Straight Arms/Single-Serif     */
  1275. #define PAN_STRAIGHT_ARMS_DOUBLE_SERIF  6 /* Straight Arms/Double-Serif     */
  1276. #define PAN_BENT_ARMS_HORZ              7 /* Non-Straight Arms/Horizontal   */
  1277. #define PAN_BENT_ARMS_WEDGE             8 /* Non-Straight Arms/Wedge        */
  1278. #define PAN_BENT_ARMS_VERT              9 /* Non-Straight Arms/Vertical     */
  1279. #define PAN_BENT_ARMS_SINGLE_SERIF     10 /* Non-Straight Arms/Single-Serif */
  1280. #define PAN_BENT_ARMS_DOUBLE_SERIF     11 /* Non-Straight Arms/Double-Serif */
  1281. #define PAN_LETT_NORMAL_CONTACT         2 /* Normal/Contact                 */
  1282. #define PAN_LETT_NORMAL_WEIGHTED        3 /* Normal/Weighted                */
  1283. #define PAN_LETT_NORMAL_BOXED           4 /* Normal/Boxed                   */
  1284. #define PAN_LETT_NORMAL_FLATTENED       5 /* Normal/Flattened               */
  1285. #define PAN_LETT_NORMAL_ROUNDED         6 /* Normal/Rounded                 */
  1286. #define PAN_LETT_NORMAL_OFF_CENTER      7 /* Normal/Off Center              */
  1287. #define PAN_LETT_NORMAL_SQUARE          8 /* Normal/Square                  */
  1288. #define PAN_LETT_OBLIQUE_CONTACT        9 /* Oblique/Contact                */
  1289. #define PAN_LETT_OBLIQUE_WEIGHTED      10 /* Oblique/Weighted               */
  1290. #define PAN_LETT_OBLIQUE_BOXED         11 /* Oblique/Boxed                  */
  1291. #define PAN_LETT_OBLIQUE_FLATTENED     12 /* Oblique/Flattened              */
  1292. #define PAN_LETT_OBLIQUE_ROUNDED       13 /* Oblique/Rounded                */
  1293. #define PAN_LETT_OBLIQUE_OFF_CENTER    14 /* Oblique/Off Center             */
  1294. #define PAN_LETT_OBLIQUE_SQUARE        15 /* Oblique/Square                 */
  1295. #define PAN_MIDLINE_STANDARD_TRIMMED    2 /* Standard/Trimmed               */
  1296. #define PAN_MIDLINE_STANDARD_POINTED    3 /* Standard/Pointed               */
  1297. #define PAN_MIDLINE_STANDARD_SERIFED    4 /* Standard/Serifed               */
  1298. #define PAN_MIDLINE_HIGH_TRIMMED        5 /* High/Trimmed                   */
  1299. #define PAN_MIDLINE_HIGH_POINTED        6 /* High/Pointed                   */
  1300. #define PAN_MIDLINE_HIGH_SERIFED        7 /* High/Serifed                   */
  1301. #define PAN_MIDLINE_CONSTANT_TRIMMED    8 /* Constant/Trimmed               */
  1302. #define PAN_MIDLINE_CONSTANT_POINTED    9 /* Constant/Pointed               */
  1303. #define PAN_MIDLINE_CONSTANT_SERIFED   10 /* Constant/Serifed               */
  1304. #define PAN_MIDLINE_LOW_TRIMMED        11 /* Low/Trimmed                    */
  1305. #define PAN_MIDLINE_LOW_POINTED        12 /* Low/Pointed                    */
  1306. #define PAN_MIDLINE_LOW_SERIFED        13 /* Low/Serifed                    */
  1307. #define PAN_XHEIGHT_CONSTANT_SMALL      2 /* Constant/Small                 */
  1308. #define PAN_XHEIGHT_CONSTANT_STD        3 /* Constant/Standard              */
  1309. #define PAN_XHEIGHT_CONSTANT_LARGE      4 /* Constant/Large                 */
  1310. #define PAN_XHEIGHT_DUCKING_SMALL       5 /* Ducking/Small                  */
  1311. #define PAN_XHEIGHT_DUCKING_STD         6 /* Ducking/Standard               */
  1312. #define PAN_XHEIGHT_DUCKING_LARGE       7 /* Ducking/Large                  */
  1313. #define ELF_VENDOR_SIZE     4
  1314. /* The extended logical font       */
  1315. /* An extension of the ENUMLOGFONT */
  1316. typedef struct tagEXTLOGFONTA {
  1317.     LOGFONTA    elfLogFont;
  1318.     BYTE        elfFullName[LF_FULLFACESIZE];
  1319.     BYTE        elfStyle[LF_FACESIZE];
  1320.     DWORD       elfVersion;     /* 0 for the first release of NT */
  1321.     DWORD       elfStyleSize;
  1322.     DWORD       elfMatch;
  1323.     DWORD       elfReserved;
  1324.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  1325.     DWORD       elfCulture;     /* 0 for Latin                   */
  1326.     PANOSE      elfPanose;
  1327. } EXTLOGFONTA, *PEXTLOGFONTA, NEAR *NPEXTLOGFONTA, FAR *LPEXTLOGFONTA;
  1328. typedef struct tagEXTLOGFONTW {
  1329.     LOGFONTW    elfLogFont;
  1330.     WCHAR       elfFullName[LF_FULLFACESIZE];
  1331.     WCHAR       elfStyle[LF_FACESIZE];
  1332.     DWORD       elfVersion;     /* 0 for the first release of NT */
  1333.     DWORD       elfStyleSize;
  1334.     DWORD       elfMatch;
  1335.     DWORD       elfReserved;
  1336.     BYTE        elfVendorId[ELF_VENDOR_SIZE];
  1337.     DWORD       elfCulture;     /* 0 for Latin                   */
  1338.     PANOSE      elfPanose;
  1339. } EXTLOGFONTW, *PEXTLOGFONTW, NEAR *NPEXTLOGFONTW, FAR *LPEXTLOGFONTW;
  1340. #ifdef UNICODE
  1341. typedef EXTLOGFONTW EXTLOGFONT;
  1342. typedef PEXTLOGFONTW PEXTLOGFONT;
  1343. typedef NPEXTLOGFONTW NPEXTLOGFONT;
  1344. typedef LPEXTLOGFONTW LPEXTLOGFONT;
  1345. #else
  1346. typedef EXTLOGFONTA EXTLOGFONT;
  1347. typedef PEXTLOGFONTA PEXTLOGFONT;
  1348. typedef NPEXTLOGFONTA NPEXTLOGFONT;
  1349. typedef LPEXTLOGFONTA LPEXTLOGFONT;
  1350. #endif // UNICODE
  1351. #define ELF_VERSION         0
  1352. #define ELF_CULTURE_LATIN   0
  1353. /* EnumFonts Masks */
  1354. #define RASTER_FONTTYPE     0x0001
  1355. #define DEVICE_FONTTYPE     0x002
  1356. #define TRUETYPE_FONTTYPE   0x004
  1357. #define RGB(r,g,b)          ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
  1358. #define PALETTERGB(r,g,b)   (0x02000000 | RGB(r,g,b))
  1359. #define PALETTEINDEX(i)     ((COLORREF)(0x01000000 | (DWORD)(WORD)(i)))
  1360. /* palette entry flags */
  1361. #define PC_RESERVED     0x01    /* palette index used for animation */
  1362. #define PC_EXPLICIT     0x02    /* palette index is explicit to device */
  1363. #define PC_NOCOLLAPSE   0x04    /* do not match color to system palette */
  1364. #define GetRValue(rgb)      ((BYTE)(rgb))
  1365. #define GetGValue(rgb)      ((BYTE)(((WORD)(rgb)) >> 8))
  1366. #define GetBValue(rgb)      ((BYTE)((rgb)>>16))
  1367. /* Background Modes */
  1368. #define TRANSPARENT         1
  1369. #define OPAQUE              2
  1370. #define BKMODE_LAST         2
  1371. /* Graphics Modes */
  1372. #define GM_COMPATIBLE       1
  1373. #define GM_ADVANCED         2
  1374. #define GM_LAST             2
  1375. /* PolyDraw and GetPath point types */
  1376. #define PT_CLOSEFIGURE      0x01
  1377. #define PT_LINETO           0x02
  1378. #define PT_BEZIERTO         0x04
  1379. #define PT_MOVETO           0x06
  1380. /* Mapping Modes */
  1381. #define MM_TEXT             1
  1382. #define MM_LOMETRIC         2
  1383. #define MM_HIMETRIC         3
  1384. #define MM_LOENGLISH        4
  1385. #define MM_HIENGLISH        5
  1386. #define MM_TWIPS            6
  1387. #define MM_ISOTROPIC        7
  1388. #define MM_ANISOTROPIC      8
  1389. /* Min and Max Mapping Mode values */
  1390. #define MM_MIN              MM_TEXT
  1391. #define MM_MAX              MM_ANISOTROPIC
  1392. #define MM_MAX_FIXEDSCALE   MM_TWIPS
  1393. /* Coordinate Modes */
  1394. #define ABSOLUTE            1
  1395. #define RELATIVE            2
  1396. /* Stock Logical Objects */
  1397. #define WHITE_BRUSH         0
  1398. #define LTGRAY_BRUSH        1
  1399. #define GRAY_BRUSH          2
  1400. #define DKGRAY_BRUSH        3
  1401. #define BLACK_BRUSH         4
  1402. #define NULL_BRUSH          5
  1403. #define HOLLOW_BRUSH        NULL_BRUSH
  1404. #define WHITE_PEN           6
  1405. #define BLACK_PEN           7
  1406. #define NULL_PEN            8
  1407. #define OEM_FIXED_FONT      10
  1408. #define ANSI_FIXED_FONT     11
  1409. #define ANSI_VAR_FONT       12
  1410. #define SYSTEM_FONT         13
  1411. #define DEVICE_DEFAULT_FONT 14
  1412. #define DEFAULT_PALETTE     15
  1413. #define SYSTEM_FIXED_FONT   16
  1414. #if(WINVER >= 0x0400)
  1415. #define DEFAULT_GUI_FONT    17
  1416. #endif /* WINVER >= 0x0400 */
  1417. #if (_WIN32_WINNT >= 0x0500)
  1418. #define DC_BRUSH            18
  1419. #define DC_PEN              19
  1420. #endif
  1421. #if (_WIN32_WINNT >= 0x0500)
  1422. #define STOCK_LAST          19
  1423. #elif (WINVER >= 0x0400)
  1424. #define STOCK_LAST          17
  1425. #else
  1426. #define STOCK_LAST          16
  1427. #endif
  1428. #define CLR_INVALID     0xFFFFFFFF
  1429. /* Brush Styles */
  1430. #define BS_SOLID            0
  1431. #define BS_NULL             1
  1432. #define BS_HOLLOW           BS_NULL
  1433. #define BS_HATCHED          2
  1434. #define BS_PATTERN          3
  1435. #define BS_INDEXED          4
  1436. #define BS_DIBPATTERN       5
  1437. #define BS_DIBPATTERNPT     6
  1438. #define BS_PATTERN8X8       7
  1439. #define BS_DIBPATTERN8X8    8
  1440. #define BS_MONOPATTERN      9
  1441. /* Hatch Styles */
  1442. #define HS_HORIZONTAL       0       /* ----- */
  1443. #define HS_VERTICAL         1       /* ||||| */
  1444. #define HS_FDIAGONAL        2       /* \\ */
  1445. #define HS_BDIAGONAL        3       /* ///// */
  1446. #define HS_CROSS            4       /* +++++ */
  1447. #define HS_DIAGCROSS        5       /* xxxxx */
  1448. /* Pen Styles */
  1449. #define PS_SOLID            0
  1450. #define PS_DASH             1       /* -------  */
  1451. #define PS_DOT              2       /* .......  */
  1452. #define PS_DASHDOT          3       /* _._._._  */
  1453. #define PS_DASHDOTDOT       4       /* _.._.._  */
  1454. #define PS_NULL             5
  1455. #define PS_INSIDEFRAME      6
  1456. #define PS_USERSTYLE        7
  1457. #define PS_ALTERNATE        8
  1458. #define PS_STYLE_MASK       0x0000000F
  1459. #define PS_ENDCAP_ROUND     0x00000000
  1460. #define PS_ENDCAP_SQUARE    0x00000100
  1461. #define PS_ENDCAP_FLAT      0x00000200
  1462. #define PS_ENDCAP_MASK      0x00000F00
  1463. #define PS_JOIN_ROUND       0x00000000
  1464. #define PS_JOIN_BEVEL       0x00001000
  1465. #define PS_JOIN_MITER       0x00002000
  1466. #define PS_JOIN_MASK        0x0000F000
  1467. #define PS_COSMETIC         0x00000000
  1468. #define PS_GEOMETRIC        0x00010000
  1469. #define PS_TYPE_MASK        0x000F0000
  1470. #define AD_COUNTERCLOCKWISE 1
  1471. #define AD_CLOCKWISE        2
  1472. /* Device Parameters for GetDeviceCaps() */
  1473. #define DRIVERVERSION 0     /* Device driver version                    */
  1474. #define TECHNOLOGY    2     /* Device classification                    */
  1475. #define HORZSIZE      4     /* Horizontal size in millimeters           */
  1476. #define VERTSIZE      6     /* Vertical size in millimeters             */
  1477. #define HORZRES       8     /* Horizontal width in pixels               */
  1478. #define VERTRES       10    /* Vertical height in pixels                */
  1479. #define BITSPIXEL     12    /* Number of bits per pixel                 */
  1480. #define PLANES        14    /* Number of planes                         */
  1481. #define NUMBRUSHES    16    /* Number of brushes the device has         */
  1482. #define NUMPENS       18    /* Number of pens the device has            */
  1483. #define NUMMARKERS    20    /* Number of markers the device has         */
  1484. #define NUMFONTS      22    /* Number of fonts the device has           */
  1485. #define NUMCOLORS     24    /* Number of colors the device supports     */
  1486. #define PDEVICESIZE   26    /* Size required for device descriptor      */
  1487. #define CURVECAPS     28    /* Curve capabilities                       */
  1488. #define LINECAPS      30    /* Line capabilities                        */
  1489. #define POLYGONALCAPS 32    /* Polygonal capabilities                   */
  1490. #define TEXTCAPS      34    /* Text capabilities                        */
  1491. #define CLIPCAPS      36    /* Clipping capabilities                    */
  1492. #define RASTERCAPS    38    /* Bitblt capabilities                      */
  1493. #define ASPECTX       40    /* Length of the X leg                      */
  1494. #define ASPECTY       42    /* Length of the Y leg                      */
  1495. #define ASPECTXY      44    /* Length of the hypotenuse                 */
  1496. #define LOGPIXELSX    88    /* Logical pixels/inch in X                 */
  1497. #define LOGPIXELSY    90    /* Logical pixels/inch in Y                 */
  1498. #define SIZEPALETTE  104    /* Number of entries in physical palette    */
  1499. #define NUMRESERVED  106    /* Number of reserved entries in palette    */
  1500. #define COLORRES     108    /* Actual color resolution                  */
  1501. // Printing related DeviceCaps. These replace the appropriate Escapes
  1502. #define PHYSICALWIDTH   110 /* Physical Width in device units           */
  1503. #define PHYSICALHEIGHT  111 /* Physical Height in device units          */
  1504. #define PHYSICALOFFSETX 112 /* Physical Printable Area x margin         */
  1505. #define PHYSICALOFFSETY 113 /* Physical Printable Area y margin         */
  1506. #define SCALINGFACTORX  114 /* Scaling factor x                         */
  1507. #define SCALINGFACTORY  115 /* Scaling factor y                         */
  1508. // Display driver specific
  1509. #define VREFRESH        116  /* Current vertical refresh rate of the    */
  1510.                              /* display device (for displays only) in Hz*/
  1511. #define DESKTOPVERTRES  117  /* Horizontal width of entire desktop in   */
  1512.                              /* pixels                                  */
  1513. #define DESKTOPHORZRES  118  /* Vertical height of entire desktop in    */
  1514.                              /* pixels                                  */
  1515. #define BLTALIGNMENT    119  /* Preferred blt alignment                 */
  1516. #if(WINVER >= 0x0500)
  1517. #define SHADEBLENDCAPS  120  /* Shading and blending caps               */
  1518. #define COLORMGMTCAPS   121  /* Color Management caps                   */
  1519. #endif /* WINVER >= 0x0500 */
  1520. #ifndef NOGDICAPMASKS
  1521. /* Device Capability Masks: */
  1522. /* Device Technologies */
  1523. #define DT_PLOTTER          0   /* Vector plotter                   */
  1524. #define DT_RASDISPLAY       1   /* Raster display                   */
  1525. #define DT_RASPRINTER       2   /* Raster printer                   */
  1526. #define DT_RASCAMERA        3   /* Raster camera                    */
  1527. #define DT_CHARSTREAM       4   /* Character-stream, PLP            */
  1528. #define DT_METAFILE         5   /* Metafile, VDM                    */
  1529. #define DT_DISPFILE         6   /* Display-file                     */
  1530. /* Curve Capabilities */
  1531. #define CC_NONE             0   /* Curves not supported             */
  1532. #define CC_CIRCLES          1   /* Can do circles                   */
  1533. #define CC_PIE              2   /* Can do pie wedges                */
  1534. #define CC_CHORD            4   /* Can do chord arcs                */
  1535. #define CC_ELLIPSES         8   /* Can do ellipese                  */
  1536. #define CC_WIDE             16  /* Can do wide lines                */
  1537. #define CC_STYLED           32  /* Can do styled lines              */
  1538. #define CC_WIDESTYLED       64  /* Can do wide styled lines         */
  1539. #define CC_INTERIORS        128 /* Can do interiors                 */
  1540. #define CC_ROUNDRECT        256 /*                                  */
  1541. /* Line Capabilities */
  1542. #define LC_NONE             0   /* Lines not supported              */
  1543. #define LC_POLYLINE         2   /* Can do polylines                 */
  1544. #define LC_MARKER           4   /* Can do markers                   */
  1545. #define LC_POLYMARKER       8   /* Can do polymarkers               */
  1546. #define LC_WIDE             16  /* Can do wide lines                */
  1547. #define LC_STYLED           32  /* Can do styled lines              */
  1548. #define LC_WIDESTYLED       64  /* Can do wide styled lines         */
  1549. #define LC_INTERIORS        128 /* Can do interiors                 */
  1550. /* Polygonal Capabilities */
  1551. #define PC_NONE             0   /* Polygonals not supported         */
  1552. #define PC_POLYGON          1   /* Can do polygons                  */
  1553. #define PC_RECTANGLE        2   /* Can do rectangles                */
  1554. #define PC_WINDPOLYGON      4   /* Can do winding polygons          */
  1555. #define PC_TRAPEZOID        4   /* Can do trapezoids                */
  1556. #define PC_SCANLINE         8   /* Can do scanlines                 */
  1557. #define PC_WIDE             16  /* Can do wide borders              */
  1558. #define PC_STYLED           32  /* Can do styled borders            */
  1559. #define PC_WIDESTYLED       64  /* Can do wide styled borders       */
  1560. #define PC_INTERIORS        128 /* Can do interiors                 */
  1561. #define PC_POLYPOLYGON      256 /* Can do polypolygons              */
  1562. #define PC_PATHS            512 /* Can do paths                     */
  1563. /* Clipping Capabilities */
  1564. #define CP_NONE             0   /* No clipping of output            */
  1565. #define CP_RECTANGLE        1   /* Output clipped to rects          */
  1566. #define CP_REGION           2   /* obsolete                         */
  1567. /* Text Capabilities */
  1568. #define TC_OP_CHARACTER     0x00000001  /* Can do OutputPrecision   CHARACTER      */
  1569. #define TC_OP_STROKE        0x00000002  /* Can do OutputPrecision   STROKE         */
  1570. #define TC_CP_STROKE        0x00000004  /* Can do ClipPrecision     STROKE         */
  1571. #define TC_CR_90            0x00000008  /* Can do CharRotAbility    90             */
  1572. #define TC_CR_ANY           0x00000010  /* Can do CharRotAbility    ANY            */
  1573. #define TC_SF_X_YINDEP      0x00000020  /* Can do ScaleFreedom      X_YINDEPENDENT */
  1574. #define TC_SA_DOUBLE        0x00000040  /* Can do ScaleAbility      DOUBLE         */
  1575. #define TC_SA_INTEGER       0x00000080  /* Can do ScaleAbility      INTEGER        */
  1576. #define TC_SA_CONTIN        0x00000100  /* Can do ScaleAbility      CONTINUOUS     */
  1577. #define TC_EA_DOUBLE        0x00000200  /* Can do EmboldenAbility   DOUBLE         */
  1578. #define TC_IA_ABLE          0x00000400  /* Can do ItalisizeAbility  ABLE           */
  1579. #define TC_UA_ABLE          0x00000800  /* Can do UnderlineAbility  ABLE           */
  1580. #define TC_SO_ABLE          0x00001000  /* Can do StrikeOutAbility  ABLE           */
  1581. #define TC_RA_ABLE          0x00002000  /* Can do RasterFontAble    ABLE           */
  1582. #define TC_VA_ABLE          0x00004000  /* Can do VectorFontAble    ABLE           */
  1583. #define TC_RESERVED         0x00008000
  1584. #define TC_SCROLLBLT        0x00010000  /* Don't do text scroll with blt           */
  1585. #endif /* NOGDICAPMASKS */
  1586. /* Raster Capabilities */
  1587. #define RC_NONE
  1588. #define RC_BITBLT           1       /* Can do standard BLT.             */
  1589. #define RC_BANDING          2       /* Device requires banding support  */
  1590. #define RC_SCALING          4       /* Device requires scaling support  */
  1591. #define RC_BITMAP64         8       /* Device can support >64K bitmap   */
  1592. #define RC_GDI20_OUTPUT     0x0010      /* has 2.0 output calls         */
  1593. #define RC_GDI20_STATE      0x0020
  1594. #define RC_SAVEBITMAP       0x0040
  1595. #define RC_DI_BITMAP        0x0080      /* supports DIB to memory       */
  1596. #define RC_PALETTE          0x0100      /* supports a palette           */
  1597. #define RC_DIBTODEV         0x0200      /* supports DIBitsToDevice      */
  1598. #define RC_BIGFONT          0x0400      /* supports >64K fonts          */
  1599. #define RC_STRETCHBLT       0x0800      /* supports StretchBlt          */
  1600. #define RC_FLOODFILL        0x1000      /* supports FloodFill           */
  1601. #define RC_STRETCHDIB       0x2000      /* supports StretchDIBits       */
  1602. #define RC_OP_DX_OUTPUT     0x4000
  1603. #define RC_DEVBITS          0x8000
  1604. #if(WINVER >= 0x0500)
  1605. /* Shading and blending caps */
  1606. #define SB_NONE             0x00000000
  1607. #define SB_CONST_ALPHA      0x00000001
  1608. #define SB_PIXEL_ALPHA      0x00000002
  1609. #define SB_PREMULT_ALPHA    0x00000004
  1610. #define SB_GRAD_RECT        0x00000010
  1611. #define SB_GRAD_TRI         0x00000020
  1612. /* Color Management caps */
  1613. #define CM_NONE             0x00000000
  1614. #define CM_DEVICE_ICM       0x00000001
  1615. #define CM_GAMMA_RAMP       0x00000002
  1616. #define CM_CMYK_COLOR       0x00000004
  1617. #endif /* WINVER >= 0x0500 */
  1618. /* DIB color table identifiers */
  1619. #define DIB_RGB_COLORS      0 /* color table in RGBs */
  1620. #define DIB_PAL_COLORS      1 /* color table in palette indices */
  1621. /* constants for Get/SetSystemPaletteUse() */
  1622. #define SYSPAL_ERROR    0
  1623. #define SYSPAL_STATIC   1
  1624. #define SYSPAL_NOSTATIC 2
  1625. #define SYSPAL_NOSTATIC256 3
  1626. /* constants for CreateDIBitmap */
  1627. #define CBM_INIT        0x04L   /* initialize bitmap */
  1628. /* ExtFloodFill style flags */
  1629. #define  FLOODFILLBORDER   0
  1630. #define  FLOODFILLSURFACE  1
  1631. /* size of a device name string */
  1632. #define CCHDEVICENAME 32
  1633. /* size of a form name string */
  1634. #define CCHFORMNAME 32
  1635. typedef struct _devicemodeA {
  1636.     BYTE   dmDeviceName[CCHDEVICENAME];
  1637.     WORD dmSpecVersion;
  1638.     WORD dmDriverVersion;
  1639.     WORD dmSize;
  1640.     WORD dmDriverExtra;
  1641.     DWORD dmFields;
  1642.     union {
  1643.       struct {
  1644.         short dmOrientation;
  1645.         short dmPaperSize;
  1646.         short dmPaperLength;
  1647.         short dmPaperWidth;
  1648.       };
  1649.       POINTL dmPosition;
  1650.     };
  1651.     short dmScale;
  1652.     short dmCopies;
  1653.     short dmDefaultSource;
  1654.     short dmPrintQuality;
  1655.     short dmColor;
  1656.     short dmDuplex;
  1657.     short dmYResolution;
  1658.     short dmTTOption;
  1659.     short dmCollate;
  1660.     BYTE   dmFormName[CCHFORMNAME];
  1661.     WORD   dmLogPixels;
  1662.     DWORD  dmBitsPerPel;
  1663.     DWORD  dmPelsWidth;
  1664.     DWORD  dmPelsHeight;
  1665.     union {
  1666.         DWORD  dmDisplayFlags;
  1667.         DWORD  dmNup;
  1668.     };
  1669.     DWORD  dmDisplayFrequency;
  1670. #if(WINVER >= 0x0400)
  1671.     DWORD  dmICMMethod;
  1672.     DWORD  dmICMIntent;
  1673.     DWORD  dmMediaType;
  1674.     DWORD  dmDitherType;
  1675.     DWORD  dmReserved1;
  1676.     DWORD  dmReserved2;
  1677. #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  1678.     DWORD  dmPanningWidth;
  1679.     DWORD  dmPanningHeight;
  1680. #endif
  1681. #endif /* WINVER >= 0x0400 */
  1682. } DEVMODEA, *PDEVMODEA, *NPDEVMODEA, *LPDEVMODEA;
  1683. typedef struct _devicemodeW {
  1684.     WCHAR  dmDeviceName[CCHDEVICENAME];
  1685.     WORD dmSpecVersion;
  1686.     WORD dmDriverVersion;
  1687.     WORD dmSize;
  1688.     WORD dmDriverExtra;
  1689.     DWORD dmFields;
  1690.     union {
  1691.       struct {
  1692.         short dmOrientation;
  1693.         short dmPaperSize;
  1694.         short dmPaperLength;
  1695.         short dmPaperWidth;
  1696.       };
  1697.       POINTL dmPosition;
  1698.     };
  1699.     short dmScale;
  1700.     short dmCopies;
  1701.     short dmDefaultSource;
  1702.     short dmPrintQuality;
  1703.     short dmColor;
  1704.     short dmDuplex;
  1705.     short dmYResolution;
  1706.     short dmTTOption;
  1707.     short dmCollate;
  1708.     WCHAR  dmFormName[CCHFORMNAME];
  1709.     WORD   dmLogPixels;
  1710.     DWORD  dmBitsPerPel;
  1711.     DWORD  dmPelsWidth;
  1712.     DWORD  dmPelsHeight;
  1713.     union {
  1714.         DWORD  dmDisplayFlags;
  1715.         DWORD  dmNup;
  1716.     };
  1717.     DWORD  dmDisplayFrequency;
  1718. #if(WINVER >= 0x0400)
  1719.     DWORD  dmICMMethod;
  1720.     DWORD  dmICMIntent;
  1721.     DWORD  dmMediaType;
  1722.     DWORD  dmDitherType;
  1723.     DWORD  dmReserved1;
  1724.     DWORD  dmReserved2;
  1725. #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  1726.     DWORD  dmPanningWidth;
  1727.     DWORD  dmPanningHeight;
  1728. #endif
  1729. #endif /* WINVER >= 0x0400 */
  1730. } DEVMODEW, *PDEVMODEW, *NPDEVMODEW, *LPDEVMODEW;
  1731. #ifdef UNICODE
  1732. typedef DEVMODEW DEVMODE;
  1733. typedef PDEVMODEW PDEVMODE;
  1734. typedef NPDEVMODEW NPDEVMODE;
  1735. typedef LPDEVMODEW LPDEVMODE;
  1736. #else
  1737. typedef DEVMODEA DEVMODE;
  1738. typedef PDEVMODEA PDEVMODE;
  1739. typedef NPDEVMODEA NPDEVMODE;
  1740. typedef LPDEVMODEA LPDEVMODE;
  1741. #endif // UNICODE
  1742. /* current version of specification */
  1743. #if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
  1744. #define DM_SPECVERSION 0x0401
  1745. #elif (WINVER >= 0x0400)
  1746. #define DM_SPECVERSION 0x0400
  1747. #else
  1748. #define DM_SPECVERSION 0x0320
  1749. #endif /* WINVER */
  1750. /* field selection bits */
  1751. #define DM_ORIENTATION      0x00000001L
  1752. #define DM_PAPERSIZE        0x00000002L
  1753. #define DM_PAPERLENGTH      0x00000004L
  1754. #define DM_PAPERWIDTH       0x00000008L
  1755. #define DM_SCALE            0x00000010L
  1756. #if(WINVER >= 0x0500)
  1757. #define DM_POSITION         0x00000020L
  1758. #define DM_NUP              0x00000040L
  1759. #endif /* WINVER >= 0x0500 */
  1760. #define DM_COPIES           0x00000100L
  1761. #define DM_DEFAULTSOURCE    0x00000200L
  1762. #define DM_PRINTQUALITY     0x00000400L
  1763. #define DM_COLOR            0x00000800L
  1764. #define DM_DUPLEX           0x00001000L
  1765. #define DM_YRESOLUTION      0x00002000L
  1766. #define DM_TTOPTION         0x00004000L
  1767. #define DM_COLLATE          0x00008000L
  1768. #define DM_FORMNAME         0x00010000L
  1769. #define DM_LOGPIXELS        0x00020000L
  1770. #define DM_BITSPERPEL       0x00040000L
  1771. #define DM_PELSWIDTH        0x00080000L
  1772. #define DM_PELSHEIGHT       0x00100000L
  1773. #define DM_DISPLAYFLAGS     0x00200000L
  1774. #define DM_DISPLAYFREQUENCY 0x00400000L
  1775. #if(WINVER >= 0x0400)
  1776. #define DM_ICMMETHOD        0x00800000L
  1777. #define DM_ICMINTENT        0x01000000L
  1778. #define DM_MEDIATYPE        0x02000000L
  1779. #define DM_DITHERTYPE       0x04000000L
  1780. #define DM_PANNINGWIDTH     0x08000000L
  1781. #define DM_PANNINGHEIGHT    0x10000000L
  1782. #endif /* WINVER >= 0x0400 */
  1783. /* orientation selections */
  1784. #define DMORIENT_PORTRAIT   1
  1785. #define DMORIENT_LANDSCAPE  2
  1786. /* paper selections */
  1787. #define DMPAPER_FIRST                DMPAPER_LETTER
  1788. #define DMPAPER_LETTER               1  /* Letter 8 1/2 x 11 in               */
  1789. #define DMPAPER_LETTERSMALL          2  /* Letter Small 8 1/2 x 11 in         */
  1790. #define DMPAPER_TABLOID              3  /* Tabloid 11 x 17 in                 */
  1791. #define DMPAPER_LEDGER               4  /* Ledger 17 x 11 in                  */
  1792. #define DMPAPER_LEGAL                5  /* Legal 8 1/2 x 14 in                */
  1793. #define DMPAPER_STATEMENT            6  /* Statement 5 1/2 x 8 1/2 in         */
  1794. #define DMPAPER_EXECUTIVE            7  /* Executive 7 1/4 x 10 1/2 in        */
  1795. #define DMPAPER_A3                   8  /* A3 297 x 420 mm                    */
  1796. #define DMPAPER_A4                   9  /* A4 210 x 297 mm                    */
  1797. #define DMPAPER_A4SMALL             10  /* A4 Small 210 x 297 mm              */
  1798. #define DMPAPER_A5                  11  /* A5 148 x 210 mm                    */
  1799. #define DMPAPER_B4                  12  /* B4 (JIS) 250 x 354                 */
  1800. #define DMPAPER_B5                  13  /* B5 (JIS) 182 x 257 mm              */
  1801. #define DMPAPER_FOLIO               14  /* Folio 8 1/2 x 13 in                */
  1802. #define DMPAPER_QUARTO              15  /* Quarto 215 x 275 mm                */
  1803. #define DMPAPER_10X14               16  /* 10x14 in                           */
  1804. #define DMPAPER_11X17               17  /* 11x17 in                           */
  1805. #define DMPAPER_NOTE                18  /* Note 8 1/2 x 11 in                 */
  1806. #define DMPAPER_ENV_9               19  /* Envelope #9 3 7/8 x 8 7/8          */
  1807. #define DMPAPER_ENV_10              20  /* Envelope #10 4 1/8 x 9 1/2         */
  1808. #define DMPAPER_ENV_11              21  /* Envelope #11 4 1/2 x 10 3/8        */
  1809. #define DMPAPER_ENV_12              22  /* Envelope #12 4 276 x 11           */
  1810. #define DMPAPER_ENV_14              23  /* Envelope #14 5 x 11 1/2            */
  1811. #define DMPAPER_CSHEET              24  /* C size sheet                       */
  1812. #define DMPAPER_DSHEET              25  /* D size sheet                       */
  1813. #define DMPAPER_ESHEET              26  /* E size sheet                       */
  1814. #define DMPAPER_ENV_DL              27  /* Envelope DL 110 x 220mm            */
  1815. #define DMPAPER_ENV_C5              28  /* Envelope C5 162 x 229 mm           */
  1816. #define DMPAPER_ENV_C3              29  /* Envelope C3  324 x 458 mm          */
  1817. #define DMPAPER_ENV_C4              30  /* Envelope C4  229 x 324 mm          */
  1818. #define DMPAPER_ENV_C6              31  /* Envelope C6  114 x 162 mm          */
  1819. #define DMPAPER_ENV_C65             32  /* Envelope C65 114 x 229 mm          */
  1820. #define DMPAPER_ENV_B4              33  /* Envelope B4  250 x 353 mm          */
  1821. #define DMPAPER_ENV_B5              34  /* Envelope B5  176 x 250 mm          */
  1822. #define DMPAPER_ENV_B6              35  /* Envelope B6  176 x 125 mm          */
  1823. #define DMPAPER_ENV_ITALY           36  /* Envelope 110 x 230 mm              */
  1824. #define DMPAPER_ENV_MONARCH         37  /* Envelope Monarch 3.875 x 7.5 in    */
  1825. #define DMPAPER_ENV_PERSONAL        38  /* 6 3/4 Envelope 3 5/8 x 6 1/2 in    */
  1826. #define DMPAPER_FANFOLD_US          39  /* US Std Fanfold 14 7/8 x 11 in      */
  1827. #define DMPAPER_FANFOLD_STD_GERMAN  40  /* German Std Fanfold 8 1/2 x 12 in   */
  1828. #define DMPAPER_FANFOLD_LGL_GERMAN  41  /* German Legal Fanfold 8 1/2 x 13 in */
  1829. #if(WINVER >= 0x0400)
  1830. #define DMPAPER_ISO_B4              42  /* B4 (ISO) 250 x 353 mm              */
  1831. #define DMPAPER_JAPANESE_POSTCARD   43  /* Japanese Postcard 100 x 148 mm     */
  1832. #define DMPAPER_9X11                44  /* 9 x 11 in                          */
  1833. #define DMPAPER_10X11               45  /* 10 x 11 in                         */
  1834. #define DMPAPER_15X11               46  /* 15 x 11 in                         */
  1835. #define DMPAPER_ENV_INVITE          47  /* Envelope Invite 220 x 220 mm       */
  1836. #define DMPAPER_RESERVED_48         48  /* RESERVED--DO NOT USE               */
  1837. #define DMPAPER_RESERVED_49         49  /* RESERVED--DO NOT USE               */
  1838. #define DMPAPER_LETTER_EXTRA        50  /* Letter Extra 9 275 x 12 in        */
  1839. #define DMPAPER_LEGAL_EXTRA         51  /* Legal Extra 9 275 x 15 in         */
  1840. #define DMPAPER_TABLOID_EXTRA       52  /* Tabloid Extra 11.69 x 18 in        */
  1841. #define DMPAPER_A4_EXTRA            53  /* A4 Extra 9.27 x 12.69 in           */
  1842. #define DMPAPER_LETTER_TRANSVERSE   54  /* Letter Transverse 8 275 x 11 in   */
  1843. #define DMPAPER_A4_TRANSVERSE       55  /* A4 Transverse 210 x 297 mm         */
  1844. #define DMPAPER_LETTER_EXTRA_TRANSVERSE 56 /* Letter Extra Transverse 9275 x 12 in */
  1845. #define DMPAPER_A_PLUS              57  /* SuperA/SuperA/A4 227 x 356 mm      */
  1846. #define DMPAPER_B_PLUS              58  /* SuperB/SuperB/A3 305 x 487 mm      */
  1847. #define DMPAPER_LETTER_PLUS         59  /* Letter Plus 8.5 x 12.69 in         */
  1848. #define DMPAPER_A4_PLUS             60  /* A4 Plus 210 x 330 mm               */
  1849. #define DMPAPER_A5_TRANSVERSE       61  /* A5 Transverse 148 x 210 mm         */
  1850. #define DMPAPER_B5_TRANSVERSE       62  /* B5 (JIS) Transverse 182 x 257 mm   */
  1851. #define DMPAPER_A3_EXTRA            63  /* A3 Extra 322 x 445 mm              */
  1852. #define DMPAPER_A5_EXTRA            64  /* A5 Extra 174 x 235 mm              */
  1853. #define DMPAPER_B5_EXTRA            65  /* B5 (ISO) Extra 201 x 276 mm        */
  1854. #define DMPAPER_A2                  66  /* A2 420 x 594 mm                    */
  1855. #define DMPAPER_A3_TRANSVERSE       67  /* A3 Transverse 297 x 420 mm         */
  1856. #define DMPAPER_A3_EXTRA_TRANSVERSE 68  /* A3 Extra Transverse 322 x 445 mm   */
  1857. #endif /* WINVER >= 0x0400 */
  1858. #if(WINVER >= 0x0500)
  1859. #define DMPAPER_DBL_JAPANESE_POSTCARD 69 /* Japanese Double Postcard 200 x 148 mm */
  1860. #define DMPAPER_A6                  70  /* A6 105 x 148 mm                 */
  1861. #define DMPAPER_JENV_KAKU2          71  /* Japanese Envelope Kaku #2       */
  1862. #define DMPAPER_JENV_KAKU3          72  /* Japanese Envelope Kaku #3       */
  1863. #define DMPAPER_JENV_CHOU3          73  /* Japanese Envelope Chou #3       */
  1864. #define DMPAPER_JENV_CHOU4          74  /* Japanese Envelope Chou #4       */
  1865. #define DMPAPER_LETTER_ROTATED      75  /* Letter Rotated 11 x 8 1/2 11 in */
  1866. #define DMPAPER_A3_ROTATED          76  /* A3 Rotated 420 x 297 mm         */
  1867. #define DMPAPER_A4_ROTATED          77  /* A4 Rotated 297 x 210 mm         */
  1868. #define DMPAPER_A5_ROTATED          78  /* A5 Rotated 210 x 148 mm         */
  1869. #define DMPAPER_B4_JIS_ROTATED      79  /* B4 (JIS) Rotated 364 x 257 mm   */
  1870. #define DMPAPER_B5_JIS_ROTATED      80  /* B5 (JIS) Rotated 257 x 182 mm   */
  1871. #define DMPAPER_JAPANESE_POSTCARD_ROTATED 81 /* Japanese Postcard Rotated 148 x 100 mm */
  1872. #define DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED 82 /* Double Japanese Postcard Rotated 148 x 200 mm */
  1873. #define DMPAPER_A6_ROTATED          83  /* A6 Rotated 148 x 105 mm         */
  1874. #define DMPAPER_JENV_KAKU2_ROTATED  84  /* Japanese Envelope Kaku #2 Rotated */
  1875. #define DMPAPER_JENV_KAKU3_ROTATED  85  /* Japanese Envelope Kaku #3 Rotated */
  1876. #define DMPAPER_JENV_CHOU3_ROTATED  86  /* Japanese Envelope Chou #3 Rotated */
  1877. #define DMPAPER_JENV_CHOU4_ROTATED  87  /* Japanese Envelope Chou #4 Rotated */
  1878. #define DMPAPER_B6_JIS              88  /* B6 (JIS) 128 x 182 mm           */
  1879. #define DMPAPER_B6_JIS_ROTATED      89  /* B6 (JIS) Rotated 182 x 128 mm   */
  1880. #define DMPAPER_12X11               90  /* 12 x 11 in                      */
  1881. #define DMPAPER_JENV_YOU4           91  /* Japanese Envelope You #4        */
  1882. #define DMPAPER_JENV_YOU4_ROTATED   92  /* Japanese Envelope You #4 Rotated*/
  1883. #define DMPAPER_P16K                93  /* PRC 16K 146 x 215 mm            */
  1884. #define DMPAPER_P32K                94  /* PRC 32K 97 x 151 mm             */
  1885. #define DMPAPER_P32KBIG             95  /* PRC 32K(Big) 97 x 151 mm        */
  1886. #define DMPAPER_PENV_1              96  /* PRC Envelope #1 102 x 165 mm    */
  1887. #define DMPAPER_PENV_2              97  /* PRC Envelope #2 102 x 176 mm    */
  1888. #define DMPAPER_PENV_3              98  /* PRC Envelope #3 125 x 176 mm    */
  1889. #define DMPAPER_PENV_4              99  /* PRC Envelope #4 110 x 208 mm    */
  1890. #define DMPAPER_PENV_5              100 /* PRC Envelope #5 110 x 220 mm    */
  1891. #define DMPAPER_PENV_6              101 /* PRC Envelope #6 120 x 230 mm    */
  1892. #define DMPAPER_PENV_7              102 /* PRC Envelope #7 160 x 230 mm    */
  1893. #define DMPAPER_PENV_8              103 /* PRC Envelope #8 120 x 309 mm    */
  1894. #define DMPAPER_PENV_9              104 /* PRC Envelope #9 229 x 324 mm    */
  1895. #define DMPAPER_PENV_10             105 /* PRC Envelope #10 324 x 458 mm   */
  1896. #define DMPAPER_P16K_ROTATED        106 /* PRC 16K Rotated                 */
  1897. #define DMPAPER_P32K_ROTATED        107 /* PRC 32K Rotated                 */
  1898. #define DMPAPER_P32KBIG_ROTATED     108 /* PRC 32K(Big) Rotated            */
  1899. #define DMPAPER_PENV_1_ROTATED      109 /* PRC Envelope #1 Rotated 165 x 102 mm */
  1900. #define DMPAPER_PENV_2_ROTATED      110 /* PRC Envelope #2 Rotated 176 x 102 mm */
  1901. #define DMPAPER_PENV_3_ROTATED      111 /* PRC Envelope #3 Rotated 176 x 125 mm */
  1902. #define DMPAPER_PENV_4_ROTATED      112 /* PRC Envelope #4 Rotated 208 x 110 mm */
  1903. #define DMPAPER_PENV_5_ROTATED      113 /* PRC Envelope #5 Rotated 220 x 110 mm */
  1904. #define DMPAPER_PENV_6_ROTATED      114 /* PRC Envelope #6 Rotated 230 x 120 mm */
  1905. #define DMPAPER_PENV_7_ROTATED      115 /* PRC Envelope #7 Rotated 230 x 160 mm */
  1906. #define DMPAPER_PENV_8_ROTATED      116 /* PRC Envelope #8 Rotated 309 x 120 mm */
  1907. #define DMPAPER_PENV_9_ROTATED      117 /* PRC Envelope #9 Rotated 324 x 229 mm */
  1908. #define DMPAPER_PENV_10_ROTATED     118 /* PRC Envelope #10 Rotated 458 x 324 mm */
  1909. #endif /* WINVER >= 0x0500 */
  1910. #if (WINVER >= 0x0500)
  1911. #define DMPAPER_LAST                DMPAPER_PENV_10_ROTATED
  1912. #elif (WINVER >= 0x0400)
  1913. #define DMPAPER_LAST                DMPAPER_A3_EXTRA_TRANSVERSE
  1914. #else
  1915. #define DMPAPER_LAST                DMPAPER_FANFOLD_LGL_GERMAN
  1916. #endif
  1917. #define DMPAPER_USER                256
  1918. /* bin selections */
  1919. #define DMBIN_FIRST         DMBIN_UPPER
  1920. #define DMBIN_UPPER         1
  1921. #define DMBIN_ONLYONE       1
  1922. #define DMBIN_LOWER         2
  1923. #define DMBIN_MIDDLE        3
  1924. #define DMBIN_MANUAL        4
  1925. #define DMBIN_ENVELOPE      5
  1926. #define DMBIN_ENVMANUAL     6
  1927. #define DMBIN_AUTO          7
  1928. #define DMBIN_TRACTOR       8
  1929. #define DMBIN_SMALLFMT      9
  1930. #define DMBIN_LARGEFMT      10
  1931. #define DMBIN_LARGECAPACITY 11
  1932. #define DMBIN_CASSETTE      14
  1933. #define DMBIN_FORMSOURCE    15
  1934. #define DMBIN_LAST          DMBIN_FORMSOURCE
  1935. #define DMBIN_USER          256     /* device specific bins start here */
  1936. /* print qualities */
  1937. #define DMRES_DRAFT         (-1)
  1938. #define DMRES_LOW           (-2)
  1939. #define DMRES_MEDIUM        (-3)
  1940. #define DMRES_HIGH          (-4)
  1941. /* color enable/disable for color printers */
  1942. #define DMCOLOR_MONOCHROME  1
  1943. #define DMCOLOR_COLOR       2
  1944. /* duplex enable */
  1945. #define DMDUP_SIMPLEX    1
  1946. #define DMDUP_VERTICAL   2
  1947. #define DMDUP_HORIZONTAL 3
  1948. /* TrueType options */
  1949. #define DMTT_BITMAP     1       /* print TT fonts as graphics */
  1950. #define DMTT_DOWNLOAD   2       /* download TT fonts as soft fonts */
  1951. #define DMTT_SUBDEV     3       /* substitute device fonts for TT fonts */
  1952. #if(WINVER >= 0x0400)
  1953. #define DMTT_DOWNLOAD_OUTLINE 4 /* download TT fonts as outline soft fonts */
  1954. #endif /* WINVER >= 0x0400 */
  1955. /* Collation selections */
  1956. #define DMCOLLATE_FALSE  0
  1957. #define DMCOLLATE_TRUE   1
  1958. /* DEVMODE dmDisplayFlags flags */
  1959. // #define DM_GRAYSCALE            0x00000001 /* This flag is no longer valid */
  1960. // #define DM_INTERLACED           0x00000002 /* This flag is no longer valid */
  1961. #define DMDISPLAYFLAGS_TEXTMODE 0x00000004
  1962. /* dmNup , multiple logical page per physical page options */
  1963. #define DMNUP_SYSTEM        1
  1964. #define DMNUP_ONEUP         2
  1965. #if(WINVER >= 0x0400)
  1966. /* ICM methods */
  1967. #define DMICMMETHOD_NONE    1   /* ICM disabled */
  1968. #define DMICMMETHOD_SYSTEM  2   /* ICM handled by system */
  1969. #define DMICMMETHOD_DRIVER  3   /* ICM handled by driver */
  1970. #define DMICMMETHOD_DEVICE  4   /* ICM handled by device */
  1971. #define DMICMMETHOD_USER  256   /* Device-specific methods start here */
  1972. /* ICM Intents */
  1973. #define DMICM_SATURATE          1   /* Maximize color saturation */
  1974. #define DMICM_CONTRAST          2   /* Maximize color contrast */
  1975. #define DMICM_COLORIMETRIC       3   /* Use specific color metric */
  1976. #define DMICM_ABS_COLORIMETRIC   4   /* Use specific color metric */
  1977. #define DMICM_USER        256   /* Device-specific intents start here */
  1978. /* Media types */
  1979. #define DMMEDIA_STANDARD      1   /* Standard paper */
  1980. #define DMMEDIA_TRANSPARENCY  2   /* Transparency */
  1981. #define DMMEDIA_GLOSSY        3   /* Glossy paper */
  1982. #define DMMEDIA_USER        256   /* Device-specific media start here */
  1983. /* Dither types */
  1984. #define DMDITHER_NONE       1      /* No dithering */
  1985. #define DMDITHER_COARSE     2      /* Dither with a coarse brush */
  1986. #define DMDITHER_FINE       3      /* Dither with a fine brush */
  1987. #define DMDITHER_LINEART    4      /* LineArt dithering */
  1988. #define DMDITHER_ERRORDIFFUSION 5  /* LineArt dithering */
  1989. #define DMDITHER_RESERVED6      6      /* LineArt dithering */
  1990. #define DMDITHER_RESERVED7      7      /* LineArt dithering */
  1991. #define DMDITHER_RESERVED8      8      /* LineArt dithering */
  1992. #define DMDITHER_RESERVED9      9      /* LineArt dithering */
  1993. #define DMDITHER_GRAYSCALE  10     /* Device does grayscaling */
  1994. #define DMDITHER_USER     256   /* Device-specific dithers start here */
  1995. #endif /* WINVER >= 0x0400 */
  1996. typedef struct _DISPLAY_DEVICEA {
  1997.     DWORD  cb;
  1998.     CHAR   DeviceName[32];
  1999.     CHAR   DeviceString[128];
  2000.     DWORD  StateFlags;
  2001.     CHAR   DeviceID[128];
  2002.     CHAR   DeviceKey[128];
  2003. } DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA;
  2004. typedef struct _DISPLAY_DEVICEW {
  2005.     DWORD  cb;
  2006.     WCHAR  DeviceName[32];
  2007.     WCHAR  DeviceString[128];
  2008.     DWORD  StateFlags;
  2009.     WCHAR  DeviceID[128];
  2010.     WCHAR  DeviceKey[128];
  2011. } DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW;
  2012. #ifdef UNICODE
  2013. typedef DISPLAY_DEVICEW DISPLAY_DEVICE;
  2014. typedef PDISPLAY_DEVICEW PDISPLAY_DEVICE;
  2015. typedef LPDISPLAY_DEVICEW LPDISPLAY_DEVICE;
  2016. #else
  2017. typedef DISPLAY_DEVICEA DISPLAY_DEVICE;
  2018. typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE;
  2019. typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE;
  2020. #endif // UNICODE
  2021. #define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
  2022. #define DISPLAY_DEVICE_MULTI_DRIVER        0x00000002
  2023. #define DISPLAY_DEVICE_PRIMARY_DEVICE      0x00000004
  2024. #define DISPLAY_DEVICE_MIRRORING_DRIVER    0x00000008
  2025. #define DISPLAY_DEVICE_VGA_COMPATIBLE      0x00000010
  2026. #define DISPLAY_DEVICE_REMOVABLE           0x00000020
  2027. #define DISPLAY_DEVICE_MODESPRUNED         0x08000000
  2028. #define DISPLAY_DEVICE_REMOTE              0x04000000  
  2029. #define DISPLAY_DEVICE_DISCONNECT          0x02000000  
  2030. /* Child device state */
  2031. #define DISPLAY_DEVICE_ACTIVE              0x00000001
  2032. #define DISPLAY_DEVICE_ATTACHED            0x00000002
  2033. /* GetRegionData/ExtCreateRegion */
  2034. #define RDH_RECTANGLES  1
  2035. typedef struct _RGNDATAHEADER {
  2036.     DWORD   dwSize;
  2037.     DWORD   iType;
  2038.     DWORD   nCount;
  2039.     DWORD   nRgnSize;
  2040.     RECT    rcBound;
  2041. } RGNDATAHEADER, *PRGNDATAHEADER;
  2042. typedef struct _RGNDATA {
  2043.     RGNDATAHEADER   rdh;
  2044.     char            Buffer[1];
  2045. } RGNDATA, *PRGNDATA, NEAR *NPRGNDATA, FAR *LPRGNDATA;
  2046. /* for GetRandomRgn */
  2047. #define SYSRGN  4
  2048. typedef struct _ABC {
  2049.     int     abcA;
  2050.     UINT    abcB;
  2051.     int     abcC;
  2052. } ABC, *PABC, NEAR *NPABC, FAR *LPABC;
  2053. typedef struct _ABCFLOAT {
  2054.     FLOAT   abcfA;
  2055.     FLOAT   abcfB;
  2056.     FLOAT   abcfC;
  2057. } ABCFLOAT, *PABCFLOAT, NEAR *NPABCFLOAT, FAR *LPABCFLOAT;
  2058. #ifndef NOTEXTMETRIC
  2059. #ifdef _MAC
  2060. #include "pshpack4.h"
  2061. #endif
  2062. typedef struct _OUTLINETEXTMETRICA {
  2063.     UINT    otmSize;
  2064.     TEXTMETRICA otmTextMetrics;
  2065.     BYTE    otmFiller;
  2066.     PANOSE  otmPanoseNumber;
  2067.     UINT    otmfsSelection;
  2068.     UINT    otmfsType;
  2069.      int    otmsCharSlopeRise;
  2070.      int    otmsCharSlopeRun;
  2071.      int    otmItalicAngle;
  2072.     UINT    otmEMSquare;
  2073.      int    otmAscent;
  2074.      int    otmDescent;
  2075.     UINT    otmLineGap;
  2076.     UINT    otmsCapEmHeight;
  2077.     UINT    otmsXHeight;
  2078.     RECT    otmrcFontBox;
  2079.      int    otmMacAscent;
  2080.      int    otmMacDescent;
  2081.     UINT    otmMacLineGap;
  2082.     UINT    otmusMinimumPPEM;
  2083.     POINT   otmptSubscriptSize;
  2084.     POINT   otmptSubscriptOffset;
  2085.     POINT   otmptSuperscriptSize;
  2086.     POINT   otmptSuperscriptOffset;
  2087.     UINT    otmsStrikeoutSize;
  2088.      int    otmsStrikeoutPosition;
  2089.      int    otmsUnderscoreSize;
  2090.      int    otmsUnderscorePosition;
  2091.     PSTR    otmpFamilyName;
  2092.     PSTR    otmpFaceName;
  2093.     PSTR    otmpStyleName;
  2094.     PSTR    otmpFullName;
  2095. } OUTLINETEXTMETRICA, *POUTLINETEXTMETRICA, NEAR *NPOUTLINETEXTMETRICA, FAR *LPOUTLINETEXTMETRICA;
  2096. typedef struct _OUTLINETEXTMETRICW {
  2097.     UINT    otmSize;
  2098.     TEXTMETRICW otmTextMetrics;
  2099.     BYTE    otmFiller;
  2100.     PANOSE  otmPanoseNumber;
  2101.     UINT    otmfsSelection;
  2102.     UINT    otmfsType;
  2103.      int    otmsCharSlopeRise;
  2104.      int    otmsCharSlopeRun;
  2105.      int    otmItalicAngle;
  2106.     UINT    otmEMSquare;
  2107.      int    otmAscent;
  2108.      int    otmDescent;
  2109.     UINT    otmLineGap;
  2110.     UINT    otmsCapEmHeight;
  2111.     UINT    otmsXHeight;
  2112.     RECT    otmrcFontBox;
  2113.      int    otmMacAscent;
  2114.      int    otmMacDescent;
  2115.     UINT    otmMacLineGap;
  2116.     UINT    otmusMinimumPPEM;
  2117.     POINT   otmptSubscriptSize;
  2118.     POINT   otmptSubscriptOffset;
  2119.     POINT   otmptSuperscriptSize;
  2120.     POINT   otmptSuperscriptOffset;
  2121.     UINT    otmsStrikeoutSize;
  2122.      int    otmsStrikeoutPosition;
  2123.      int    otmsUnderscoreSize;
  2124.      int    otmsUnderscorePosition;
  2125.     PSTR    otmpFamilyName;
  2126.     PSTR    otmpFaceName;
  2127.     PSTR    otmpStyleName;
  2128.     PSTR    otmpFullName;
  2129. } OUTLINETEXTMETRICW, *POUTLINETEXTMETRICW, NEAR *NPOUTLINETEXTMETRICW, FAR *LPOUTLINETEXTMETRICW;
  2130. #ifdef UNICODE
  2131. typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
  2132. typedef POUTLINETEXTMETRICW POUTLINETEXTMETRIC;
  2133. typedef NPOUTLINETEXTMETRICW NPOUTLINETEXTMETRIC;
  2134. typedef LPOUTLINETEXTMETRICW LPOUTLINETEXTMETRIC;
  2135. #else
  2136. typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
  2137. typedef POUTLINETEXTMETRICA POUTLINETEXTMETRIC;
  2138. typedef NPOUTLINETEXTMETRICA NPOUTLINETEXTMETRIC;
  2139. typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
  2140. #endif // UNICODE
  2141. #ifdef _MAC
  2142. #include "poppack.h"
  2143. #endif
  2144. #endif /* NOTEXTMETRIC */
  2145. typedef struct tagPOLYTEXTA
  2146. {
  2147.     int       x;
  2148.     int       y;
  2149.     UINT      n;
  2150.     LPCSTR    lpstr;
  2151.     UINT      uiFlags;
  2152.     RECT      rcl;
  2153.     int      *pdx;
  2154. } POLYTEXTA, *PPOLYTEXTA, NEAR *NPPOLYTEXTA, FAR *LPPOLYTEXTA;
  2155. typedef struct tagPOLYTEXTW
  2156. {
  2157.     int       x;
  2158.     int       y;
  2159.     UINT      n;
  2160.     LPCWSTR   lpstr;
  2161.     UINT      uiFlags;
  2162.     RECT      rcl;
  2163.     int      *pdx;
  2164. } POLYTEXTW, *PPOLYTEXTW, NEAR *NPPOLYTEXTW, FAR *LPPOLYTEXTW;
  2165. #ifdef UNICODE
  2166. typedef POLYTEXTW POLYTEXT;
  2167. typedef PPOLYTEXTW PPOLYTEXT;
  2168. typedef NPPOLYTEXTW NPPOLYTEXT;
  2169. typedef LPPOLYTEXTW LPPOLYTEXT;
  2170. #else
  2171. typedef POLYTEXTA POLYTEXT;
  2172. typedef PPOLYTEXTA PPOLYTEXT;
  2173. typedef NPPOLYTEXTA NPPOLYTEXT;
  2174. typedef LPPOLYTEXTA LPPOLYTEXT;
  2175. #endif // UNICODE
  2176. typedef struct _FIXED {
  2177. #ifndef _MAC
  2178.     WORD    fract;
  2179.     short   value;
  2180. #else
  2181.     short   value;
  2182.     WORD    fract;
  2183. #endif
  2184. } FIXED;