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