root/trunk/win32/wingdi.d

Revision 380, 108.8 kB (checked in by Zone, 2 months ago)

Adding the missing bits and pieces (primarily vista/7 enums etc) required to compile the D port of the WTL that I am working on

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