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