winapi\um/
wingdi.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms.
6//! GDI procedure declarations, constant definitions and macros
7use ctypes::{c_char, c_int, c_long, c_short, c_ushort, c_void};
8use shared::basetsd::{UINT16, UINT32, UINT64, ULONG_PTR};
9use shared::minwindef::{
10    BOOL, BYTE, DWORD, FLOAT, HGLOBAL, HMETAFILE, HMODULE, HRGN, INT, LOBYTE, LPARAM, LPBYTE,
11    LPDWORD, LPINT, LPVOID, LPWORD, MAX_PATH, PFLOAT, PROC, UINT, ULONG, USHORT, WORD,
12};
13use shared::windef::{
14    COLORREF, HBITMAP, HBRUSH, HCOLORSPACE, HDC, HENHMETAFILE, HFONT, HGDIOBJ, HGLRC, HPALETTE,
15    HPEN, HWND, LPPOINT, LPRECT, LPSIZE, POINT, POINTL, POINTS, RECT, RECTL, SIZEL,
16};
17use um::winnt::{
18    CHAR, HANDLE, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, LUID, PSTR, PVOID, SHORT, VOID, WCHAR,
19};
20pub const R2_BLACK: c_int = 1;
21pub const R2_NOTMERGEPEN: c_int = 2;
22pub const R2_MASKNOTPEN: c_int = 3;
23pub const R2_NOTCOPYPEN: c_int = 4;
24pub const R2_MASKPENNOT: c_int = 5;
25pub const R2_NOT: c_int = 6;
26pub const R2_XORPEN: c_int = 7;
27pub const R2_NOTMASKPEN: c_int = 8;
28pub const R2_MASKPEN: c_int = 9;
29pub const R2_NOTXORPEN: c_int = 10;
30pub const R2_NOP: c_int = 11;
31pub const R2_MERGENOTPEN: c_int = 12;
32pub const R2_COPYPEN: c_int = 13;
33pub const R2_MERGEPENNOT: c_int = 14;
34pub const R2_MERGEPEN: c_int = 15;
35pub const R2_WHITE: c_int = 16;
36pub const R2_LAST: c_int = 16;
37pub const SRCCOPY: DWORD = 0x00CC0020;
38pub const SRCPAINT: DWORD = 0x00EE0086;
39pub const SRCAND: DWORD = 0x008800C6;
40pub const SRCINVERT: DWORD = 0x00660046;
41pub const SRCERASE: DWORD = 0x00440328;
42pub const NOTSRCCOPY: DWORD = 0x00330008;
43pub const NOTSRCERASE: DWORD = 0x001100A6;
44pub const MERGECOPY: DWORD = 0x00C000CA;
45pub const MERGEPAINT: DWORD = 0x00BB0226;
46pub const PATCOPY: DWORD = 0x00F00021;
47pub const PATPAINT: DWORD = 0x00FB0A09;
48pub const PATINVERT: DWORD = 0x005A0049;
49pub const DSTINVERT: DWORD = 0x00550009;
50pub const BLACKNESS: DWORD = 0x00000042;
51pub const WHITENESS: DWORD = 0x00FF0062;
52pub const NOMIRRORBITMAP: DWORD = 0x80000000;
53pub const CAPTUREBLT: DWORD = 0x40000000;
54#[inline]
55pub fn MAKEROP4(fore: DWORD, back: DWORD) -> DWORD {
56    ((back << 8) & 0xFF000000) | fore
57}
58pub const GDI_ERROR: ULONG = 0xFFFFFFFF;
59pub const HGDI_ERROR: HANDLE = -1isize as HANDLE;
60pub const ERROR: c_int = 0;
61pub const NULLREGION: c_int = 1;
62pub const SIMPLEREGION: c_int = 2;
63pub const COMPLEXREGION: c_int = 3;
64pub const RGN_ERROR: c_int = ERROR;
65pub const RGN_AND: c_int = 1;
66pub const RGN_OR: c_int = 2;
67pub const RGN_XOR: c_int = 3;
68pub const RGN_DIFF: c_int = 4;
69pub const RGN_COPY: c_int = 5;
70pub const RGN_MIN: c_int = RGN_AND;
71pub const RGN_MAX: c_int = RGN_COPY;
72pub const BLACKONWHITE: c_int = 1;
73pub const WHITEONBLACK: c_int = 2;
74pub const COLORONCOLOR: c_int = 3;
75pub const HALFTONE: c_int = 4;
76pub const MAXSTRETCHBLTMODE: c_int = 4;
77pub const STRETCH_ANDSCANS: c_int = BLACKONWHITE;
78pub const STRETCH_ORSCANS: c_int = WHITEONBLACK;
79pub const STRETCH_DELETESCANS: c_int = COLORONCOLOR;
80pub const STRETCH_HALFTONE: c_int = HALFTONE;
81pub const ALTERNATE: c_int = 1;
82pub const WINDING: c_int = 2;
83pub const POLYFILL_LAST: c_int = 2;
84pub const LAYOUT_RTL: DWORD = 0x00000001;
85pub const LAYOUT_BTT: DWORD = 0x00000002;
86pub const LAYOUT_VBH: DWORD = 0x00000004;
87pub const LAYOUT_ORIENTATIONMASK: DWORD = LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH;
88pub const LAYOUT_BITMAPORIENTATIONPRESERVED: DWORD = 0x00000008;
89pub const TA_NOUPDATECP: UINT = 0;
90pub const TA_UPDATECP: UINT = 1;
91pub const TA_LEFT: UINT = 0;
92pub const TA_RIGHT: UINT = 2;
93pub const TA_CENTER: UINT = 6;
94pub const TA_TOP: UINT = 0;
95pub const TA_BOTTOM: UINT = 8;
96pub const TA_BASELINE: UINT = 24;
97pub const TA_RTLREADING: UINT = 256;
98pub const TA_MASK: UINT = TA_BASELINE + TA_CENTER + TA_UPDATECP + TA_RTLREADING;
99pub const VTA_BASELINE: UINT = TA_BASELINE;
100pub const VTA_LEFT: UINT = TA_BOTTOM;
101pub const VTA_RIGHT: UINT = TA_TOP;
102pub const VTA_CENTER: UINT = TA_CENTER;
103pub const VTA_BOTTOM: UINT = TA_RIGHT;
104pub const VTA_TOP: UINT = TA_LEFT;
105pub const ETO_OPAQUE: UINT = 0x0002;
106pub const ETO_CLIPPED: UINT = 0x0004;
107pub const ETO_GLYPH_INDEX: UINT = 0x0010;
108pub const ETO_RTLREADING: UINT = 0x0080;
109pub const ETO_NUMERICSLOCAL: UINT = 0x0400;
110pub const ETO_NUMERICSLATIN: UINT = 0x0800;
111pub const ETO_IGNORELANGUAGE: UINT = 0x1000;
112pub const ETO_PDY: UINT = 0x2000;
113pub const ETO_REVERSE_INDEX_MAP: UINT = 0x10000;
114pub const ASPECT_FILTERING: UINT = 0x0001;
115pub const DCB_RESET: UINT = 0x0001;
116pub const DCB_ACCUMULATE: UINT = 0x0002;
117pub const DCB_DIRTY: UINT = DCB_ACCUMULATE;
118pub const DCB_SET: UINT = DCB_RESET | DCB_ACCUMULATE;
119pub const DCB_ENABLE: UINT = 0x0004;
120pub const DCB_DISABLE: UINT = 0x0008;
121pub const META_SETBKCOLOR: WORD = 0x0201;
122pub const META_SETBKMODE: WORD = 0x0102;
123pub const META_SETMAPMODE: WORD = 0x0103;
124pub const META_SETROP2: WORD = 0x0104;
125pub const META_SETRELABS: WORD = 0x0105;
126pub const META_SETPOLYFILLMODE: WORD = 0x0106;
127pub const META_SETSTRETCHBLTMODE: WORD = 0x0107;
128pub const META_SETTEXTCHAREXTRA: WORD = 0x0108;
129pub const META_SETTEXTCOLOR: WORD = 0x0209;
130pub const META_SETTEXTJUSTIFICATION: WORD = 0x020A;
131pub const META_SETWINDOWORG: WORD = 0x020B;
132pub const META_SETWINDOWEXT: WORD = 0x020C;
133pub const META_SETVIEWPORTORG: WORD = 0x020D;
134pub const META_SETVIEWPORTEXT: WORD = 0x020E;
135pub const META_OFFSETWINDOWORG: WORD = 0x020F;
136pub const META_SCALEWINDOWEXT: WORD = 0x0410;
137pub const META_OFFSETVIEWPORTORG: WORD = 0x0211;
138pub const META_SCALEVIEWPORTEXT: WORD = 0x0412;
139pub const META_LINETO: WORD = 0x0213;
140pub const META_MOVETO: WORD = 0x0214;
141pub const META_EXCLUDECLIPRECT: WORD = 0x0415;
142pub const META_INTERSECTCLIPRECT: WORD = 0x0416;
143pub const META_ARC: WORD = 0x0817;
144pub const META_ELLIPSE: WORD = 0x0418;
145pub const META_FLOODFILL: WORD = 0x0419;
146pub const META_PIE: WORD = 0x081A;
147pub const META_RECTANGLE: WORD = 0x041B;
148pub const META_ROUNDRECT: WORD = 0x061C;
149pub const META_PATBLT: WORD = 0x061D;
150pub const META_SAVEDC: WORD = 0x001E;
151pub const META_SETPIXEL: WORD = 0x041F;
152pub const META_OFFSETCLIPRGN: WORD = 0x0220;
153pub const META_TEXTOUT: WORD = 0x0521;
154pub const META_BITBLT: WORD = 0x0922;
155pub const META_STRETCHBLT: WORD = 0x0B23;
156pub const META_POLYGON: WORD = 0x0324;
157pub const META_POLYLINE: WORD = 0x0325;
158pub const META_ESCAPE: WORD = 0x0626;
159pub const META_RESTOREDC: WORD = 0x0127;
160pub const META_FILLREGION: WORD = 0x0228;
161pub const META_FRAMEREGION: WORD = 0x0429;
162pub const META_INVERTREGION: WORD = 0x012A;
163pub const META_PAINTREGION: WORD = 0x012B;
164pub const META_SELECTCLIPREGION: WORD = 0x012C;
165pub const META_SELECTOBJECT: WORD = 0x012D;
166pub const META_SETTEXTALIGN: WORD = 0x012E;
167pub const META_CHORD: WORD = 0x0830;
168pub const META_SETMAPPERFLAGS: WORD = 0x0231;
169pub const META_EXTTEXTOUT: WORD = 0x0a32;
170pub const META_SETDIBTODEV: WORD = 0x0d33;
171pub const META_SELECTPALETTE: WORD = 0x0234;
172pub const META_REALIZEPALETTE: WORD = 0x0035;
173pub const META_ANIMATEPALETTE: WORD = 0x0436;
174pub const META_SETPALENTRIES: WORD = 0x0037;
175pub const META_POLYPOLYGON: WORD = 0x0538;
176pub const META_RESIZEPALETTE: WORD = 0x0139;
177pub const META_DIBBITBLT: WORD = 0x0940;
178pub const META_DIBSTRETCHBLT: WORD = 0x0b41;
179pub const META_DIBCREATEPATTERNBRUSH: WORD = 0x0142;
180pub const META_STRETCHDIB: WORD = 0x0f43;
181pub const META_EXTFLOODFILL: WORD = 0x0548;
182pub const META_SETLAYOUT: WORD = 0x0149;
183pub const META_DELETEOBJECT: WORD = 0x01f0;
184pub const META_CREATEPALETTE: WORD = 0x00f7;
185pub const META_CREATEPATTERNBRUSH: WORD = 0x01F9;
186pub const META_CREATEPENINDIRECT: WORD = 0x02FA;
187pub const META_CREATEFONTINDIRECT: WORD = 0x02FB;
188pub const META_CREATEBRUSHINDIRECT: WORD = 0x02FC;
189pub const META_CREATEREGION: WORD = 0x06FF;
190STRUCT!{struct DRAWPATRECT {
191    ptPosition: POINT,
192    ptSize: POINT,
193    wStyle: WORD,
194    wPattern: WORD,
195}}
196pub type PDRAWPATRECT = *mut DRAWPATRECT;
197pub const NEWFRAME: c_int = 1;
198pub const ABORTDOC: c_int = 2;
199pub const NEXTBAND: c_int = 3;
200pub const SETCOLORTABLE: c_int = 4;
201pub const GETCOLORTABLE: c_int = 5;
202pub const FLUSHOUTPUT: c_int = 6;
203pub const DRAFTMODE: c_int = 7;
204pub const QUERYESCSUPPORT: c_int = 8;
205pub const SETABORTPROC: c_int = 9;
206pub const STARTDOC: c_int = 10;
207pub const ENDDOC: c_int = 11;
208pub const GETPHYSPAGESIZE: c_int = 12;
209pub const GETPRINTINGOFFSET: c_int = 13;
210pub const GETSCALINGFACTOR: c_int = 14;
211pub const MFCOMMENT: c_int = 15;
212pub const GETPENWIDTH: c_int = 16;
213pub const SETCOPYCOUNT: c_int = 17;
214pub const SELECTPAPERSOURCE: c_int = 18;
215pub const DEVICEDATA: c_int = 19;
216pub const PASSTHROUGH: c_int = 19;
217pub const GETTECHNOLGY: c_int = 20;
218pub const GETTECHNOLOGY: c_int = 20;
219pub const SETLINECAP: c_int = 21;
220pub const SETLINEJOIN: c_int = 22;
221pub const SETMITERLIMIT: c_int = 23;
222pub const BANDINFO: c_int = 24;
223pub const DRAWPATTERNRECT: c_int = 25;
224pub const GETVECTORPENSIZE: c_int = 26;
225pub const GETVECTORBRUSHSIZE: c_int = 27;
226pub const ENABLEDUPLEX: c_int = 28;
227pub const GETSETPAPERBINS: c_int = 29;
228pub const GETSETPRINTORIENT: c_int = 30;
229pub const ENUMPAPERBINS: c_int = 31;
230pub const SETDIBSCALING: c_int = 32;
231pub const EPSPRINTING: c_int = 33;
232pub const ENUMPAPERMETRICS: c_int = 34;
233pub const GETSETPAPERMETRICS: c_int = 35;
234pub const POSTSCRIPT_DATA: c_int = 37;
235pub const POSTSCRIPT_IGNORE: c_int = 38;
236pub const MOUSETRAILS: c_int = 39;
237pub const GETDEVICEUNITS: c_int = 42;
238pub const GETEXTENDEDTEXTMETRICS: c_int = 256;
239pub const GETEXTENTTABLE: c_int = 257;
240pub const GETPAIRKERNTABLE: c_int = 258;
241pub const GETTRACKKERNTABLE: c_int = 259;
242pub const EXTTEXTOUT: c_int = 512;
243pub const GETFACENAME: c_int = 513;
244pub const DOWNLOADFACE: c_int = 514;
245pub const ENABLERELATIVEWIDTHS: c_int = 768;
246pub const ENABLEPAIRKERNING: c_int = 769;
247pub const SETKERNTRACK: c_int = 770;
248pub const SETALLJUSTVALUES: c_int = 771;
249pub const SETCHARSET: c_int = 772;
250pub const STRETCHBLT: c_int = 2048;
251pub const METAFILE_DRIVER: c_int = 2049;
252pub const GETSETSCREENPARAMS: c_int = 3072;
253pub const QUERYDIBSUPPORT: c_int = 3073;
254pub const BEGIN_PATH: c_int = 4096;
255pub const CLIP_TO_PATH: c_int = 4097;
256pub const END_PATH: c_int = 4098;
257pub const EXT_DEVICE_CAPS: c_int = 4099;
258pub const RESTORE_CTM: c_int = 4100;
259pub const SAVE_CTM: c_int = 4101;
260pub const SET_ARC_DIRECTION: c_int = 4102;
261pub const SET_BACKGROUND_COLOR: c_int = 4103;
262pub const SET_POLY_MODE: c_int = 4104;
263pub const SET_SCREEN_ANGLE: c_int = 4105;
264pub const SET_SPREAD: c_int = 4106;
265pub const TRANSFORM_CTM: c_int = 4107;
266pub const SET_CLIP_BOX: c_int = 4108;
267pub const SET_BOUNDS: c_int = 4109;
268pub const SET_MIRROR_MODE: c_int = 4110;
269pub const OPENCHANNEL: c_int = 4110;
270pub const DOWNLOADHEADER: c_int = 4111;
271pub const CLOSECHANNEL: c_int = 4112;
272pub const POSTSCRIPT_PASSTHROUGH: c_int = 4115;
273pub const ENCAPSULATED_POSTSCRIPT: c_int = 4116;
274pub const POSTSCRIPT_IDENTIFY: c_int = 4117;
275pub const POSTSCRIPT_INJECTION: c_int = 4118;
276pub const CHECKJPEGFORMAT: c_int = 4119;
277pub const CHECKPNGFORMAT: c_int = 4120;
278pub const GET_PS_FEATURESETTING: c_int = 4121;
279pub const GDIPLUS_TS_QUERYVER: c_int = 4122;
280pub const GDIPLUS_TS_RECORD: c_int = 4123;
281pub const MILCORE_TS_QUERYVER_RESULT_FALSE: c_int = 0x0;
282pub const MILCORE_TS_QUERYVER_RESULT_TRUE: c_int = 0x7FFFFFFF;
283pub const SPCLPASSTHROUGH2: c_int = 4568;
284pub const PSIDENT_GDICENTRIC: c_int = 0;
285pub const PSIDENT_PSCENTRIC: c_int = 1;
286STRUCT!{struct PSINJECTDATA {
287    DataBytes: DWORD,
288    InjectionPoint: WORD,
289    PageNumber: WORD,
290}}
291pub type PPSINJECTDATA = *mut PSINJECTDATA;
292pub const PSINJECT_BEGINSTREAM: WORD = 1;
293pub const PSINJECT_PSADOBE: WORD = 2;
294pub const PSINJECT_PAGESATEND: WORD = 3;
295pub const PSINJECT_PAGES: WORD = 4;
296pub const PSINJECT_DOCNEEDEDRES: WORD = 5;
297pub const PSINJECT_DOCSUPPLIEDRES: WORD = 6;
298pub const PSINJECT_PAGEORDER: WORD = 7;
299pub const PSINJECT_ORIENTATION: WORD = 8;
300pub const PSINJECT_BOUNDINGBOX: WORD = 9;
301pub const PSINJECT_DOCUMENTPROCESSCOLORS: WORD = 10;
302pub const PSINJECT_COMMENTS: WORD = 11;
303pub const PSINJECT_BEGINDEFAULTS: WORD = 12;
304pub const PSINJECT_ENDDEFAULTS: WORD = 13;
305pub const PSINJECT_BEGINPROLOG: WORD = 14;
306pub const PSINJECT_ENDPROLOG: WORD = 15;
307pub const PSINJECT_BEGINSETUP: WORD = 16;
308pub const PSINJECT_ENDSETUP: WORD = 17;
309pub const PSINJECT_TRAILER: WORD = 18;
310pub const PSINJECT_EOF: WORD = 19;
311pub const PSINJECT_ENDSTREAM: WORD = 20;
312pub const PSINJECT_DOCUMENTPROCESSCOLORSATEND: WORD = 21;
313pub const PSINJECT_PAGENUMBER: WORD = 100;
314pub const PSINJECT_BEGINPAGESETUP: WORD = 101;
315pub const PSINJECT_ENDPAGESETUP: WORD = 102;
316pub const PSINJECT_PAGETRAILER: WORD = 103;
317pub const PSINJECT_PLATECOLOR: WORD = 104;
318pub const PSINJECT_SHOWPAGE: WORD = 105;
319pub const PSINJECT_PAGEBBOX: WORD = 106;
320pub const PSINJECT_ENDPAGECOMMENTS: WORD = 107;
321pub const PSINJECT_VMSAVE: WORD = 200;
322pub const PSINJECT_VMRESTORE: WORD = 201;
323pub const PSINJECT_DLFONT: DWORD = 0xdddddddd;
324pub const FEATURESETTING_NUP: WORD = 0;
325pub const FEATURESETTING_OUTPUT: WORD = 1;
326pub const FEATURESETTING_PSLEVEL: WORD = 2;
327pub const FEATURESETTING_CUSTPAPER: WORD = 3;
328pub const FEATURESETTING_MIRROR: WORD = 4;
329pub const FEATURESETTING_NEGATIVE: WORD = 5;
330pub const FEATURESETTING_PROTOCOL: WORD = 6;
331pub const FEATURESETTING_PRIVATE_BEGIN: WORD = 0x1000;
332pub const FEATURESETTING_PRIVATE_END: WORD = 0x1FFF;
333STRUCT!{struct PSFEATURE_OUTPUT {
334    bPageIndependent: BOOL,
335    bSetPageDevice: BOOL,
336}}
337pub type PPSFEATURE_OUTPUT = *mut PSFEATURE_OUTPUT;
338STRUCT!{struct PSFEATURE_CUSTPAPER {
339    lOrientation: LONG,
340    lWidth: LONG,
341    lHeight: LONG,
342    lWidthOffset: LONG,
343    lHeightOffset: LONG,
344}}
345pub type PPSFEATURE_CUSTPAPER = *mut PSFEATURE_CUSTPAPER;
346pub const PSPROTOCOL_ASCII: c_int = 0;
347pub const PSPROTOCOL_BCP: c_int = 1;
348pub const PSPROTOCOL_TBCP: c_int = 2;
349pub const PSPROTOCOL_BINARY: c_int = 3;
350pub const QDI_SETDIBITS: c_int = 1;
351pub const QDI_GETDIBITS: c_int = 2;
352pub const QDI_DIBTOSCREEN: c_int = 4;
353pub const QDI_STRETCHDIB: c_int = 8;
354pub const SP_NOTREPORTED: c_int = 0x4000;
355pub const SP_ERROR: c_int = -1;
356pub const SP_APPABORT: c_int = -2;
357pub const SP_USERABORT: c_int = -3;
358pub const SP_OUTOFDISK: c_int = -4;
359pub const SP_OUTOFMEMORY: c_int = -5;
360pub const PR_JOBSTATUS: c_int = 0x0000;
361pub const OBJ_PEN: UINT = 1;
362pub const OBJ_BRUSH: UINT = 2;
363pub const OBJ_DC: UINT = 3;
364pub const OBJ_METADC: UINT = 4;
365pub const OBJ_PAL: UINT = 5;
366pub const OBJ_FONT: UINT = 6;
367pub const OBJ_BITMAP: UINT = 7;
368pub const OBJ_REGION: UINT = 8;
369pub const OBJ_METAFILE: UINT = 9;
370pub const OBJ_MEMDC: UINT = 10;
371pub const OBJ_EXTPEN: UINT = 11;
372pub const OBJ_ENHMETADC: UINT = 12;
373pub const OBJ_ENHMETAFILE: UINT = 13;
374pub const OBJ_COLORSPACE: UINT = 14;
375pub const GDI_OBJ_LAST: UINT = OBJ_COLORSPACE;
376pub const MWT_IDENTITY: c_int = 1;
377pub const MWT_LEFTMULTIPLY: c_int = 2;
378pub const MWT_RIGHTMULTIPLY: c_int = 3;
379pub const MWT_MIN: c_int = MWT_IDENTITY;
380pub const MWT_MAX: c_int = MWT_RIGHTMULTIPLY;
381STRUCT!{struct XFORM {
382    eM11: FLOAT,
383    eM12: FLOAT,
384    eM21: FLOAT,
385    eM22: FLOAT,
386    eDx: FLOAT,
387    eDy: FLOAT,
388}}
389pub type PXFORM = *mut XFORM;
390pub type LPXFORM = *mut XFORM;
391STRUCT!{struct BITMAP {
392    bmType: LONG,
393    bmWidth: LONG,
394    bmHeight: LONG,
395    bmWidthBytes: LONG,
396    bmPlanes: WORD,
397    bmBitsPixel: WORD,
398    bmBits: LPVOID,
399}}
400pub type PBITMAP = *mut BITMAP;
401pub type NPBITMAP = *mut BITMAP;
402pub type LPBITMAP = *mut BITMAP;
403STRUCT!{#[debug] struct RGBTRIPLE {
404    rgbtBlue: BYTE,
405    rgbtGreen: BYTE,
406    rgbtRed: BYTE,
407}}
408pub type PRGBTRIPLE = *mut RGBTRIPLE;
409pub type NPRGBTRIPLE = *mut RGBTRIPLE;
410pub type LPRGBTRIPLE = *mut RGBTRIPLE;
411STRUCT!{#[debug] struct RGBQUAD {
412    rgbBlue: BYTE,
413    rgbGreen: BYTE,
414    rgbRed: BYTE,
415    rgbReserved: BYTE,
416}}
417pub type LPRGBQUAD = *mut RGBQUAD;
418pub const CS_ENABLE: DWORD = 0x00000001;
419pub const CS_DISABLE: DWORD = 0x00000002;
420pub const CS_DELETE_TRANSFORM: DWORD = 0x00000003;
421pub const LCS_SIGNATURE: DWORD = 0x5053_4F43; // 'PSOC'
422pub const LCS_sRGB: LCSCSTYPE = 0x7352_4742; // 'sRGB'
423pub const LCS_WINDOWS_COLOR_SPACE: LCSCSTYPE = 0x5769_6E20; // 'Win '
424pub type LCSCSTYPE = LONG;
425pub const LCS_CALIBRATED_RGB: LCSCSTYPE = 0x00000000;
426pub type LCSGAMUTMATCH = LONG;
427pub const LCS_GM_BUSINESS: LCSGAMUTMATCH = 0x00000001;
428pub const LCS_GM_GRAPHICS: LCSGAMUTMATCH = 0x00000002;
429pub const LCS_GM_IMAGES: LCSGAMUTMATCH = 0x00000004;
430pub const LCS_GM_ABS_COLORIMETRIC: LCSGAMUTMATCH = 0x00000008;
431pub const CM_OUT_OF_GAMUT: BYTE = 255;
432pub const CM_IN_GAMUT: BYTE = 0;
433pub const ICM_ADDPROFILE: UINT = 1;
434pub const ICM_DELETEPROFILE: UINT = 2;
435pub const ICM_QUERYPROFILE: UINT = 3;
436pub const ICM_SETDEFAULTPROFILE: UINT = 4;
437pub const ICM_REGISTERICMATCHER: UINT = 5;
438pub const ICM_UNREGISTERICMATCHER: UINT = 6;
439pub const ICM_QUERYMATCH: UINT = 7;
440#[inline]
441pub fn GetKValue(cmyk: COLORREF) -> BYTE {
442    cmyk as BYTE
443}
444#[inline]
445pub fn GetYValue(cmyk: COLORREF) -> BYTE {
446    (cmyk >> 8) as BYTE
447}
448#[inline]
449pub fn GetMValue(cmyk: COLORREF) -> BYTE {
450    (cmyk >> 16) as BYTE
451}
452#[inline]
453pub fn GetCValue(cmyk: COLORREF) -> BYTE {
454    (cmyk >> 24) as BYTE
455}
456#[inline]
457pub fn CMYK(c: BYTE, m: BYTE, y: BYTE, k: BYTE) -> COLORREF {
458    (k as COLORREF) | ((y as COLORREF) << 8) | ((m as COLORREF) << 16) | ((c as COLORREF) << 24)
459}
460pub type FXPT16DOT16 = c_long;
461pub type LPFXPT16DOT16 = *mut c_long;
462pub type FXPT2DOT30 = c_long;
463pub type LPFXPT2DOT30 = *mut c_long;
464STRUCT!{#[debug] struct CIEXYZ {
465    ciexyzX: FXPT2DOT30,
466    ciexyzY: FXPT2DOT30,
467    ciexyzZ: FXPT2DOT30,
468}}
469pub type LPCIEXYZ = *mut CIEXYZ;
470STRUCT!{#[debug] struct CIEXYZTRIPLE {
471    ciexyzRed: CIEXYZ,
472    ciexyzGreen: CIEXYZ,
473    ciexyzBlue: CIEXYZ,
474}}
475pub type LPCIEXYZTRIPLE = *mut CIEXYZTRIPLE;
476STRUCT!{struct LOGCOLORSPACEA {
477    lcsSignature: DWORD,
478    lcsVersion: DWORD,
479    lcsSize: DWORD,
480    lcsCSType: LCSCSTYPE,
481    lcsIntent: LCSGAMUTMATCH,
482    lcsEndpoints: CIEXYZTRIPLE,
483    lcsGammaRed: DWORD,
484    lcsGammaGreen: DWORD,
485    lcsGammaBlue: DWORD,
486    lcsFilename: [CHAR; MAX_PATH],
487}}
488pub type LPLOGCOLORSPACEA = *mut LOGCOLORSPACEA;
489STRUCT!{struct LOGCOLORSPACEW {
490    lcsSignature: DWORD,
491    lcsVersion: DWORD,
492    lcsSize: DWORD,
493    lcsCSType: LCSCSTYPE,
494    lcsIntent: LCSGAMUTMATCH,
495    lcsEndpoints: CIEXYZTRIPLE,
496    lcsGammaRed: DWORD,
497    lcsGammaGreen: DWORD,
498    lcsGammaBlue: DWORD,
499    lcsFilename: [WCHAR; MAX_PATH],
500}}
501pub type LPLOGCOLORSPACEW = *mut LOGCOLORSPACEW;
502STRUCT!{#[debug] struct BITMAPCOREHEADER {
503    bcSize: DWORD,
504    bcWidth: WORD,
505    bcHeight: WORD,
506    bcPlanes: WORD,
507    bcBitCount: WORD,
508}}
509pub type LPBITMAPCOREHEADER = *mut BITMAPCOREHEADER;
510pub type PBITMAPCOREHEADER = *mut BITMAPCOREHEADER;
511STRUCT!{#[debug] struct BITMAPINFOHEADER {
512    biSize: DWORD,
513    biWidth: LONG,
514    biHeight: LONG,
515    biPlanes: WORD,
516    biBitCount: WORD,
517    biCompression: DWORD,
518    biSizeImage: DWORD,
519    biXPelsPerMeter: LONG,
520    biYPelsPerMeter: LONG,
521    biClrUsed: DWORD,
522    biClrImportant: DWORD,
523}}
524pub type LPBITMAPINFOHEADER = *mut BITMAPINFOHEADER;
525pub type PBITMAPINFOHEADER = *mut BITMAPINFOHEADER;
526STRUCT!{#[debug] struct BITMAPV4HEADER {
527    bV4Size: DWORD,
528    bV4Width: LONG,
529    bV4Height: LONG,
530    bV4Planes: WORD,
531    bV4BitCount: WORD,
532    bV4V4Compression: DWORD,
533    bV4SizeImage: DWORD,
534    bV4XPelsPerMeter: LONG,
535    bV4YPelsPerMeter: LONG,
536    bV4ClrUsed: DWORD,
537    bV4ClrImportant: DWORD,
538    bV4RedMask: DWORD,
539    bV4GreenMask: DWORD,
540    bV4BlueMask: DWORD,
541    bV4AlphaMask: DWORD,
542    bV4CSType: DWORD,
543    bV4Endpoints: CIEXYZTRIPLE,
544    bV4GammaRed: DWORD,
545    bV4GammaGreen: DWORD,
546    bV4GammaBlue: DWORD,
547}}
548pub type LPBITMAPV4HEADER = *mut BITMAPV4HEADER;
549pub type PBITMAPV4HEADER = *mut BITMAPV4HEADER;
550STRUCT!{#[debug] struct BITMAPV5HEADER {
551    bV5Size: DWORD,
552    bV5Width: LONG,
553    bV5Height: LONG,
554    bV5Planes: WORD,
555    bV5BitCount: WORD,
556    bV5Compression: DWORD,
557    bV5SizeImage: DWORD,
558    bV5XPelsPerMeter: LONG,
559    bV5YPelsPerMeter: LONG,
560    bV5ClrUsed: DWORD,
561    bV5ClrImportant: DWORD,
562    bV5RedMask: DWORD,
563    bV5GreenMask: DWORD,
564    bV5BlueMask: DWORD,
565    bV5AlphaMask: DWORD,
566    bV5CSType: DWORD,
567    bV5Endpoints: CIEXYZTRIPLE,
568    bV5GammaRed: DWORD,
569    bV5GammaGreen: DWORD,
570    bV5GammaBlue: DWORD,
571    bV5Intent: DWORD,
572    bV5ProfileData: DWORD,
573    bV5ProfileSize: DWORD,
574    bV5Reserved: DWORD,
575}}
576pub type LPBITMAPV5HEADER = *mut BITMAPV5HEADER;
577pub type PBITMAPV5HEADER = *mut BITMAPV5HEADER;
578pub const PROFILE_LINKED: LONG = 0x4C49_4E4B; // 'LINK'
579pub const PROFILE_EMBEDDED: LONG = 0x4D42_4544; // 'MBED'
580pub const BI_RGB: DWORD = 0;
581pub const BI_RLE8: DWORD = 1;
582pub const BI_RLE4: DWORD = 2;
583pub const BI_BITFIELDS: DWORD = 3;
584pub const BI_JPEG: DWORD = 4;
585pub const BI_PNG: DWORD = 5;
586STRUCT!{#[debug] struct BITMAPINFO {
587    bmiHeader: BITMAPINFOHEADER,
588    bmiColors: [RGBQUAD; 1],
589}}
590pub type LPBITMAPINFO = *mut BITMAPINFO;
591pub type PBITMAPINFO = *mut BITMAPINFO;
592STRUCT!{#[debug] struct BITMAPCOREINFO {
593    bmciHeader: BITMAPCOREHEADER,
594    bmciColors: [RGBTRIPLE; 1],
595}}
596pub type LPBITMAPCOREINFO = *mut BITMAPCOREINFO;
597pub type PBITMAPCOREINFO = *mut BITMAPCOREINFO;
598STRUCT!{#[debug] #[repr(packed)] struct BITMAPFILEHEADER {
599    bfType: WORD,
600    bfSize: DWORD,
601    bfReserved1: WORD,
602    bfReserved2: WORD,
603    bfOffBits: DWORD,
604}}
605pub type LPBITMAPFILEHEADER = *mut BITMAPFILEHEADER;
606pub type PBITMAPFILEHEADER = *mut BITMAPFILEHEADER;
607#[inline]
608pub fn MAKEPOINTS(l: DWORD) -> POINTS {
609    unsafe { ::core::mem::transmute::<DWORD, POINTS>(l) }
610}
611STRUCT!{#[debug] struct FONTSIGNATURE {
612    fsUsb: [DWORD; 4],
613    fsCsb: [DWORD; 2],
614}}
615pub type LPFONTSIGNATURE = *mut FONTSIGNATURE;
616pub type PFONTSIGNATURE = *mut FONTSIGNATURE;
617STRUCT!{#[debug] struct CHARSETINFO {
618    ciCharset: UINT,
619    ciACP: UINT,
620    fs: FONTSIGNATURE,
621}}
622pub type PCHARSETINFO = *mut CHARSETINFO;
623pub type NPCHARSETINFO = *mut CHARSETINFO;
624pub type LPCHARSETINFO = *mut CHARSETINFO;
625pub const TCI_SRCCHARSET: c_int = 1;
626pub const TCI_SRCCODEPAGE: c_int = 2;
627pub const TCI_SRCFONTSIG: c_int = 3;
628pub const TCI_SRCLOCALE: c_int = 0x1000;
629STRUCT!{#[debug] struct LOCALESIGNATURE {
630    lsUsb: [DWORD; 4],
631    lsCsbDefault: [DWORD; 2],
632    lsCsbSupported: [DWORD; 2],
633}}
634pub type PLOCALESIGNATURE = *mut LOCALESIGNATURE;
635pub type LPLOCALESIGNATURE = *mut LOCALESIGNATURE;
636STRUCT!{struct HANDLETABLE {
637    objectHandle: [HGDIOBJ; 1],
638}}
639pub type LPHANDLETABLE = *mut HANDLETABLE;
640pub type PHANDLETABLE = *mut HANDLETABLE;
641STRUCT!{struct METARECORD {
642    rdSize: DWORD,
643    rdFunction: WORD,
644    rdParm: [WORD; 1],
645}}
646pub type PMETARECORD = *mut METARECORD;
647pub type LPMETARECORD = *mut METARECORD;
648STRUCT!{struct METAFILEPICT {
649    mm: LONG,
650    xExt: LONG,
651    yExt: LONG,
652    hMF: HMETAFILE,
653}}
654pub type LPMETAFILEPICT = *mut METAFILEPICT;
655STRUCT!{struct METAHEADER {
656    mtType: WORD,
657    mtHeaderSize: WORD,
658    mtVersion: WORD,
659    mtSize: DWORD,
660    mtNoObjects: WORD,
661    mtMaxRecord: DWORD,
662    mtNoParameters: WORD,
663}}
664pub type PMETAHEADER = *mut METAHEADER;
665pub type LPMETAHEADER = *mut METAHEADER;
666STRUCT!{struct ENHMETARECORD {
667    iType: DWORD,
668    nSize: DWORD,
669    dParm: [DWORD; 1],
670}}
671pub type PENHMETARECORD = *mut ENHMETARECORD;
672pub type LPENHMETARECORD = *mut ENHMETARECORD;
673STRUCT!{struct ENHMETAHEADER {
674    iType: DWORD,
675    nSize: DWORD,
676    rclBounds: RECTL,
677    rclFrame: RECTL,
678    dSignature: DWORD,
679    nVersion: DWORD,
680    nBytes: DWORD,
681    nRecords: DWORD,
682    nHandles: WORD,
683    sReserved: WORD,
684    nDescription: DWORD,
685    offDescription: DWORD,
686    nPalEntries: DWORD,
687    szlDevice: SIZEL,
688    szlMillimeters: SIZEL,
689    cbPixelFormat: DWORD,
690    offPixelFormat: DWORD,
691    bOpenGL: DWORD,
692    szlMicrometers: SIZEL,
693}}
694pub type PENHMETAHEADER = *mut ENHMETAHEADER;
695pub type LPENHMETAHEADER = *mut ENHMETAHEADER;
696pub const TMPF_FIXED_PITCH: BYTE = 0x01;
697pub const TMPF_VECTOR: BYTE = 0x02;
698pub const TMPF_DEVICE: BYTE = 0x08;
699pub const TMPF_TRUETYPE: BYTE = 0x04;
700// BCHAR
701STRUCT!{struct TEXTMETRICA {
702    tmHeight: LONG,
703    tmAscent: LONG,
704    tmDescent: LONG,
705    tmInternalLeading: LONG,
706    tmExternalLeading: LONG,
707    tmAveCharWidth: LONG,
708    tmMaxCharWidth: LONG,
709    tmWeight: LONG,
710    tmOverhang: LONG,
711    tmDigitizedAspectX: LONG,
712    tmDigitizedAspectY: LONG,
713    tmFirstChar: BYTE,
714    tmLastChar: BYTE,
715    tmDefaultChar: BYTE,
716    tmBreakChar: BYTE,
717    tmItalic: BYTE,
718    tmUnderlined: BYTE,
719    tmStruckOut: BYTE,
720    tmPitchAndFamily: BYTE,
721    tmCharSet: BYTE,
722}}
723pub type PTEXTMETRICA = *mut TEXTMETRICA;
724pub type NPTEXTMETRICA = *mut TEXTMETRICA;
725pub type LPTEXTMETRICA = *mut TEXTMETRICA;
726STRUCT!{struct TEXTMETRICW {
727    tmHeight: LONG,
728    tmAscent: LONG,
729    tmDescent: LONG,
730    tmInternalLeading: LONG,
731    tmExternalLeading: LONG,
732    tmAveCharWidth: LONG,
733    tmMaxCharWidth: LONG,
734    tmWeight: LONG,
735    tmOverhang: LONG,
736    tmDigitizedAspectX: LONG,
737    tmDigitizedAspectY: LONG,
738    tmFirstChar: WCHAR,
739    tmLastChar: WCHAR,
740    tmDefaultChar: WCHAR,
741    tmBreakChar: WCHAR,
742    tmItalic: BYTE,
743    tmUnderlined: BYTE,
744    tmStruckOut: BYTE,
745    tmPitchAndFamily: BYTE,
746    tmCharSet: BYTE,
747}}
748pub type PTEXTMETRICW = *mut TEXTMETRICW;
749pub type NPTEXTMETRICW = *mut TEXTMETRICW;
750pub type LPTEXTMETRICW = *mut TEXTMETRICW;
751pub const NTM_REGULAR: DWORD = 0x00000040;
752pub const NTM_BOLD: DWORD = 0x00000020;
753pub const NTM_ITALIC: DWORD = 0x00000001;
754pub const NTM_NONNEGATIVE_AC: DWORD = 0x00010000;
755pub const NTM_PS_OPENTYPE: DWORD = 0x00020000;
756pub const NTM_TT_OPENTYPE: DWORD = 0x00040000;
757pub const NTM_MULTIPLEMASTER: DWORD = 0x00080000;
758pub const NTM_TYPE1: DWORD = 0x00100000;
759pub const NTM_DSIG: DWORD = 0x00200000;
760STRUCT!{struct NEWTEXTMETRICA {
761    tmHeight: LONG,
762    tmAscent: LONG,
763    tmDescent: LONG,
764    tmInternalLeading: LONG,
765    tmExternalLeading: LONG,
766    tmAveCharWidth: LONG,
767    tmMaxCharWidth: LONG,
768    tmWeight: LONG,
769    tmOverhang: LONG,
770    tmDigitizedAspectX: LONG,
771    tmDigitizedAspectY: LONG,
772    tmFirstChar: BYTE,
773    tmLastChar: BYTE,
774    tmDefaultChar: BYTE,
775    tmBreakChar: BYTE,
776    tmItalic: BYTE,
777    tmUnderlined: BYTE,
778    tmStruckOut: BYTE,
779    tmPitchAndFamily: BYTE,
780    tmCharSet: BYTE,
781    ntmFlags: DWORD,
782    ntmSizeEM: UINT,
783    ntmCellHeight: UINT,
784    ntmAvgWidth: UINT,
785}}
786pub type PNEWTEXTMETRICA = *mut NEWTEXTMETRICA;
787pub type NPNEWTEXTMETRICA = *mut NEWTEXTMETRICA;
788pub type LPNEWTEXTMETRICA = *mut NEWTEXTMETRICA;
789STRUCT!{struct NEWTEXTMETRICW {
790    tmHeight: LONG,
791    tmAscent: LONG,
792    tmDescent: LONG,
793    tmInternalLeading: LONG,
794    tmExternalLeading: LONG,
795    tmAveCharWidth: LONG,
796    tmMaxCharWidth: LONG,
797    tmWeight: LONG,
798    tmOverhang: LONG,
799    tmDigitizedAspectX: LONG,
800    tmDigitizedAspectY: LONG,
801    tmFirstChar: WCHAR,
802    tmLastChar: WCHAR,
803    tmDefaultChar: WCHAR,
804    tmBreakChar: WCHAR,
805    tmItalic: BYTE,
806    tmUnderlined: BYTE,
807    tmStruckOut: BYTE,
808    tmPitchAndFamily: BYTE,
809    tmCharSet: BYTE,
810    ntmFlags: DWORD,
811    ntmSizeEM: UINT,
812    ntmCellHeight: UINT,
813    ntmAvgWidth: UINT,
814}}
815pub type PNEWTEXTMETRICW = *mut NEWTEXTMETRICW;
816pub type NPNEWTEXTMETRICW = *mut NEWTEXTMETRICW;
817pub type LPNEWTEXTMETRICW = *mut NEWTEXTMETRICW;
818STRUCT!{struct NEWTEXTMETRICEXA {
819    ntmTm: NEWTEXTMETRICA,
820    ntmFontSig: FONTSIGNATURE,
821}}
822STRUCT!{struct NEWTEXTMETRICEXW {
823    ntmTm: NEWTEXTMETRICW,
824    ntmFontSig: FONTSIGNATURE,
825}}
826STRUCT!{struct PELARRAY {
827    paXCount: LONG,
828    paYCount: LONG,
829    paXExt: LONG,
830    paYExt: LONG,
831    paRGBs: BYTE,
832}}
833pub type PPELARRAY = *mut PELARRAY;
834pub type NPPELARRAY = *mut PELARRAY;
835pub type LPPELARRAY = *mut PELARRAY;
836STRUCT!{struct LOGBRUSH {
837    lbStyle: UINT,
838    lbColor: COLORREF,
839    lbHatch: ULONG_PTR,
840}}
841pub type PLOGBRUSH = *mut LOGBRUSH;
842pub type NPLOGBRUSH = *mut LOGBRUSH;
843pub type LPLOGBRUSH = *mut LOGBRUSH;
844STRUCT!{struct LOGBRUSH32 {
845    lbStyle: UINT,
846    lbColor: COLORREF,
847    lbHatch: ULONG,
848}}
849pub type PLOGBRUSH32 = *mut LOGBRUSH32;
850pub type NPLOGBRUSH32 = *mut LOGBRUSH32;
851pub type LPLOGBRUSH32 = *mut LOGBRUSH32;
852pub type PATTERN = LOGBRUSH;
853pub type PPATTERN = *mut PATTERN;
854pub type NPPATTERN = *mut PATTERN;
855pub type LPPATTERN = *mut PATTERN;
856STRUCT!{struct LOGPEN {
857    lopnStyle: UINT,
858    lopnWidth: POINT,
859    lopnColor: COLORREF,
860}}
861pub type PLOGPEN = *mut LOGPEN;
862pub type NPLOGPEN = *mut LOGPEN;
863pub type LPLOGPEN = *mut LOGPEN;
864STRUCT!{struct EXTLOGPEN {
865    elpPenStyle: DWORD,
866    elpWidth: DWORD,
867    elpBrushStyle: UINT,
868    elpColor: COLORREF,
869    elpHatch: ULONG_PTR,
870    elpNumEntries: DWORD,
871    elpStyleEntry: [DWORD; 1],
872}}
873pub type PEXTLOGPEN = *mut EXTLOGPEN;
874pub type NPEXTLOGPEN = *mut EXTLOGPEN;
875pub type LPEXTLOGPEN = *mut EXTLOGPEN;
876STRUCT!{struct EXTLOGPEN32 {
877    elpPenStyle: DWORD,
878    elpWidth: DWORD,
879    elpBrushStyle: UINT,
880    elpColor: COLORREF,
881    elpHatch: ULONG,
882    elpNumEntries: DWORD,
883    elpStyleEntry: [DWORD; 1],
884}}
885pub type PEXTLOGPEN32 = *mut EXTLOGPEN32;
886pub type NPEXTLOGPEN32 = *mut EXTLOGPEN32;
887pub type LPEXTLOGPEN32 = *mut EXTLOGPEN32;
888STRUCT!{struct PALETTEENTRY {
889    peRed: BYTE,
890    peGreen: BYTE,
891    peBlue: BYTE,
892    peFlags: BYTE,
893}}
894pub type PPALETTEENTRY = *mut PALETTEENTRY;
895pub type LPPALETTEENTRY = *mut PALETTEENTRY;
896STRUCT!{struct LOGPALETTE {
897    palVersion: WORD,
898    palNumEntries: WORD,
899    palPalEntry: [PALETTEENTRY; 1],
900}}
901pub type PLOGPALETTE = *mut LOGPALETTE;
902pub type NPLOGPALETTE = *mut LOGPALETTE;
903pub type LPLOGPALETTE = *mut LOGPALETTE;
904pub const LF_FACESIZE: usize = 32;
905STRUCT!{struct LOGFONTA {
906    lfHeight: LONG,
907    lfWidth: LONG,
908    lfEscapement: LONG,
909    lfOrientation: LONG,
910    lfWeight: LONG,
911    lfItalic: BYTE,
912    lfUnderline: BYTE,
913    lfStrikeOut: BYTE,
914    lfCharSet: BYTE,
915    lfOutPrecision: BYTE,
916    lfClipPrecision: BYTE,
917    lfQuality: BYTE,
918    lfPitchAndFamily: BYTE,
919    lfFaceName: [CHAR; LF_FACESIZE],
920}}
921pub type PLOGFONTA = *mut LOGFONTA;
922pub type NPLOGFONTA = *mut LOGFONTA;
923pub type LPLOGFONTA = *mut LOGFONTA;
924STRUCT!{struct LOGFONTW {
925    lfHeight: LONG,
926    lfWidth: LONG,
927    lfEscapement: LONG,
928    lfOrientation: LONG,
929    lfWeight: LONG,
930    lfItalic: BYTE,
931    lfUnderline: BYTE,
932    lfStrikeOut: BYTE,
933    lfCharSet: BYTE,
934    lfOutPrecision: BYTE,
935    lfClipPrecision: BYTE,
936    lfQuality: BYTE,
937    lfPitchAndFamily: BYTE,
938    lfFaceName: [WCHAR; LF_FACESIZE],
939}}
940pub type PLOGFONTW = *mut LOGFONTW;
941pub type NPLOGFONTW = *mut LOGFONTW;
942pub type LPLOGFONTW = *mut LOGFONTW;
943pub const LF_FULLFACESIZE: usize = 64;
944STRUCT!{struct ENUMLOGFONTA {
945    elfLogFont: LOGFONTA,
946    elfFullName: [BYTE; LF_FULLFACESIZE],
947    elfStyle: [BYTE; LF_FACESIZE],
948}}
949pub type LPENUMLOGFONTA = *mut ENUMLOGFONTA;
950STRUCT!{struct ENUMLOGFONTW {
951    elfLogFont: LOGFONTW,
952    elfFullName: [WCHAR; LF_FULLFACESIZE],
953    elfStyle: [WCHAR; LF_FACESIZE],
954}}
955pub type LPENUMLOGFONTW = *mut ENUMLOGFONTW;
956STRUCT!{struct ENUMLOGFONTEXA {
957    elfLogFont: LOGFONTA,
958    elfFullName: [BYTE; LF_FULLFACESIZE],
959    elfStyle: [BYTE; LF_FACESIZE],
960    elfScript: [BYTE; LF_FACESIZE],
961}}
962pub type LPENUMLOGFONTEXA = *mut ENUMLOGFONTEXA;
963STRUCT!{struct ENUMLOGFONTEXW {
964    elfLogFont: LOGFONTW,
965    elfFullName: [WCHAR; LF_FULLFACESIZE],
966    elfStyle: [WCHAR; LF_FACESIZE],
967    elfScript: [WCHAR; LF_FACESIZE],
968}}
969pub type LPENUMLOGFONTEXW = *mut ENUMLOGFONTEXW;
970pub const OUT_DEFAULT_PRECIS: DWORD = 0;
971pub const OUT_STRING_PRECIS: DWORD = 1;
972pub const OUT_CHARACTER_PRECIS: DWORD = 2;
973pub const OUT_STROKE_PRECIS: DWORD = 3;
974pub const OUT_TT_PRECIS: DWORD = 4;
975pub const OUT_DEVICE_PRECIS: DWORD = 5;
976pub const OUT_RASTER_PRECIS: DWORD = 6;
977pub const OUT_TT_ONLY_PRECIS: DWORD = 7;
978pub const OUT_OUTLINE_PRECIS: DWORD = 8;
979pub const OUT_SCREEN_OUTLINE_PRECIS: DWORD = 9;
980pub const OUT_PS_ONLY_PRECIS: DWORD = 10;
981pub const CLIP_DEFAULT_PRECIS: DWORD = 0;
982pub const CLIP_CHARACTER_PRECIS: DWORD = 1;
983pub const CLIP_STROKE_PRECIS: DWORD = 2;
984pub const CLIP_MASK: DWORD = 0xf;
985pub const CLIP_LH_ANGLES: DWORD = 1 << 4;
986pub const CLIP_TT_ALWAYS: DWORD = 2 << 4;
987pub const CLIP_DFA_DISABLE: DWORD = 4 << 4;
988pub const CLIP_EMBEDDED: DWORD = 8 << 4;
989pub const DEFAULT_QUALITY: DWORD = 0;
990pub const DRAFT_QUALITY: DWORD = 1;
991pub const PROOF_QUALITY: DWORD = 2;
992pub const NONANTIALIASED_QUALITY: DWORD = 3;
993pub const ANTIALIASED_QUALITY: DWORD = 4;
994pub const CLEARTYPE_QUALITY: DWORD = 5;
995pub const CLEARTYPE_NATURAL_QUALITY: DWORD = 6;
996pub const DEFAULT_PITCH: DWORD = 0;
997pub const FIXED_PITCH: DWORD = 1;
998pub const VARIABLE_PITCH: DWORD = 2;
999pub const MONO_FONT: DWORD = 8;
1000pub const ANSI_CHARSET: DWORD = 0;
1001pub const DEFAULT_CHARSET: DWORD = 1;
1002pub const SYMBOL_CHARSET: DWORD = 2;
1003pub const SHIFTJIS_CHARSET: DWORD = 128;
1004pub const HANGEUL_CHARSET: DWORD = 129;
1005pub const HANGUL_CHARSET: DWORD = 129;
1006pub const GB2312_CHARSET: DWORD = 134;
1007pub const CHINESEBIG5_CHARSET: DWORD = 136;
1008pub const OEM_CHARSET: DWORD = 255;
1009pub const JOHAB_CHARSET: DWORD = 130;
1010pub const HEBREW_CHARSET: DWORD = 177;
1011pub const ARABIC_CHARSET: DWORD = 178;
1012pub const GREEK_CHARSET: DWORD = 161;
1013pub const TURKISH_CHARSET: DWORD = 162;
1014pub const VIETNAMESE_CHARSET: DWORD = 163;
1015pub const THAI_CHARSET: DWORD = 222;
1016pub const EASTEUROPE_CHARSET: DWORD = 238;
1017pub const RUSSIAN_CHARSET: DWORD = 204;
1018pub const MAC_CHARSET: DWORD = 77;
1019pub const BALTIC_CHARSET: DWORD = 186;
1020pub const FS_LATIN1: DWORD = 0x00000001;
1021pub const FS_LATIN2: DWORD = 0x00000002;
1022pub const FS_CYRILLIC: DWORD = 0x00000004;
1023pub const FS_GREEK: DWORD = 0x00000008;
1024pub const FS_TURKISH: DWORD = 0x00000010;
1025pub const FS_HEBREW: DWORD = 0x00000020;
1026pub const FS_ARABIC: DWORD = 0x00000040;
1027pub const FS_BALTIC: DWORD = 0x00000080;
1028pub const FS_VIETNAMESE: DWORD = 0x00000100;
1029pub const FS_THAI: DWORD = 0x00010000;
1030pub const FS_JISJAPAN: DWORD = 0x00020000;
1031pub const FS_CHINESESIMP: DWORD = 0x00040000;
1032pub const FS_WANSUNG: DWORD = 0x00080000;
1033pub const FS_CHINESETRAD: DWORD = 0x00100000;
1034pub const FS_JOHAB: DWORD = 0x00200000;
1035pub const FS_SYMBOL: DWORD = 0x80000000;
1036pub const FF_DONTCARE: DWORD = 0 << 4;
1037pub const FF_ROMAN: DWORD = 1 << 4;
1038pub const FF_SWISS: DWORD = 2 << 4;
1039pub const FF_MODERN: DWORD = 3 << 4;
1040pub const FF_SCRIPT: DWORD = 4 << 4;
1041pub const FF_DECORATIVE: DWORD = 5 << 4;
1042pub const FW_DONTCARE: c_int = 0;
1043pub const FW_THIN: c_int = 100;
1044pub const FW_EXTRALIGHT: c_int = 200;
1045pub const FW_LIGHT: c_int = 300;
1046pub const FW_NORMAL: c_int = 400;
1047pub const FW_MEDIUM: c_int = 500;
1048pub const FW_SEMIBOLD: c_int = 600;
1049pub const FW_BOLD: c_int = 700;
1050pub const FW_EXTRABOLD: c_int = 800;
1051pub const FW_HEAVY: c_int = 900;
1052pub const FW_ULTRALIGHT: c_int = FW_EXTRALIGHT;
1053pub const FW_REGULAR: c_int = FW_NORMAL;
1054pub const FW_DEMIBOLD: c_int = FW_SEMIBOLD;
1055pub const FW_ULTRABOLD: c_int = FW_EXTRABOLD;
1056pub const FW_BLACK: c_int = FW_HEAVY;
1057pub const PANOSE_COUNT: DWORD = 10;
1058pub const PAN_FAMILYTYPE_INDEX: DWORD = 0;
1059pub const PAN_SERIFSTYLE_INDEX: DWORD = 1;
1060pub const PAN_WEIGHT_INDEX: DWORD = 2;
1061pub const PAN_PROPORTION_INDEX: DWORD = 3;
1062pub const PAN_CONTRAST_INDEX: DWORD = 4;
1063pub const PAN_STROKEVARIATION_INDEX: DWORD = 5;
1064pub const PAN_ARMSTYLE_INDEX: DWORD = 6;
1065pub const PAN_LETTERFORM_INDEX: DWORD = 7;
1066pub const PAN_MIDLINE_INDEX: DWORD = 8;
1067pub const PAN_XHEIGHT_INDEX: DWORD = 9;
1068pub const PAN_CULTURE_LATIN: DWORD = 0;
1069STRUCT!{struct PANOSE {
1070    bFamilyType: BYTE,
1071    bSerifStyle: BYTE,
1072    bWeight: BYTE,
1073    bProportion: BYTE,
1074    bContrast: BYTE,
1075    bStrokeVariation: BYTE,
1076    bArmStyle: BYTE,
1077    bLetterform: BYTE,
1078    bMidline: BYTE,
1079    bXHeight: BYTE,
1080}}
1081pub type LPPANOSE = *mut PANOSE;
1082pub const PAN_ANY: BYTE = 0;
1083pub const PAN_NO_FIT: BYTE = 1;
1084pub const PAN_FAMILY_TEXT_DISPLAY: BYTE = 2;
1085pub const PAN_FAMILY_SCRIPT: BYTE = 3;
1086pub const PAN_FAMILY_DECORATIVE: BYTE = 4;
1087pub const PAN_FAMILY_PICTORIAL: BYTE = 5;
1088pub const PAN_SERIF_COVE: BYTE = 2;
1089pub const PAN_SERIF_OBTUSE_COVE: BYTE = 3;
1090pub const PAN_SERIF_SQUARE_COVE: BYTE = 4;
1091pub const PAN_SERIF_OBTUSE_SQUARE_COVE: BYTE = 5;
1092pub const PAN_SERIF_SQUARE: BYTE = 6;
1093pub const PAN_SERIF_THIN: BYTE = 7;
1094pub const PAN_SERIF_BONE: BYTE = 8;
1095pub const PAN_SERIF_EXAGGERATED: BYTE = 9;
1096pub const PAN_SERIF_TRIANGLE: BYTE = 10;
1097pub const PAN_SERIF_NORMAL_SANS: BYTE = 11;
1098pub const PAN_SERIF_OBTUSE_SANS: BYTE = 12;
1099pub const PAN_SERIF_PERP_SANS: BYTE = 13;
1100pub const PAN_SERIF_FLARED: BYTE = 14;
1101pub const PAN_SERIF_ROUNDED: BYTE = 15;
1102pub const PAN_WEIGHT_VERY_LIGHT: BYTE = 2;
1103pub const PAN_WEIGHT_LIGHT: BYTE = 3;
1104pub const PAN_WEIGHT_THIN: BYTE = 4;
1105pub const PAN_WEIGHT_BOOK: BYTE = 5;
1106pub const PAN_WEIGHT_MEDIUM: BYTE = 6;
1107pub const PAN_WEIGHT_DEMI: BYTE = 7;
1108pub const PAN_WEIGHT_BOLD: BYTE = 8;
1109pub const PAN_WEIGHT_HEAVY: BYTE = 9;
1110pub const PAN_WEIGHT_BLACK: BYTE = 10;
1111pub const PAN_WEIGHT_NORD: BYTE = 11;
1112pub const PAN_PROP_OLD_STYLE: BYTE = 2;
1113pub const PAN_PROP_MODERN: BYTE = 3;
1114pub const PAN_PROP_EVEN_WIDTH: BYTE = 4;
1115pub const PAN_PROP_EXPANDED: BYTE = 5;
1116pub const PAN_PROP_CONDENSED: BYTE = 6;
1117pub const PAN_PROP_VERY_EXPANDED: BYTE = 7;
1118pub const PAN_PROP_VERY_CONDENSED: BYTE = 8;
1119pub const PAN_PROP_MONOSPACED: BYTE = 9;
1120pub const PAN_CONTRAST_NONE: BYTE = 2;
1121pub const PAN_CONTRAST_VERY_LOW: BYTE = 3;
1122pub const PAN_CONTRAST_LOW: BYTE = 4;
1123pub const PAN_CONTRAST_MEDIUM_LOW: BYTE = 5;
1124pub const PAN_CONTRAST_MEDIUM: BYTE = 6;
1125pub const PAN_CONTRAST_MEDIUM_HIGH: BYTE = 7;
1126pub const PAN_CONTRAST_HIGH: BYTE = 8;
1127pub const PAN_CONTRAST_VERY_HIGH: BYTE = 9;
1128pub const PAN_STROKE_GRADUAL_DIAG: BYTE = 2;
1129pub const PAN_STROKE_GRADUAL_TRAN: BYTE = 3;
1130pub const PAN_STROKE_GRADUAL_VERT: BYTE = 4;
1131pub const PAN_STROKE_GRADUAL_HORZ: BYTE = 5;
1132pub const PAN_STROKE_RAPID_VERT: BYTE = 6;
1133pub const PAN_STROKE_RAPID_HORZ: BYTE = 7;
1134pub const PAN_STROKE_INSTANT_VERT: BYTE = 8;
1135pub const PAN_STRAIGHT_ARMS_HORZ: BYTE = 2;
1136pub const PAN_STRAIGHT_ARMS_WEDGE: BYTE = 3;
1137pub const PAN_STRAIGHT_ARMS_VERT: BYTE = 4;
1138pub const PAN_STRAIGHT_ARMS_SINGLE_SERIF: BYTE = 5;
1139pub const PAN_STRAIGHT_ARMS_DOUBLE_SERIF: BYTE = 6;
1140pub const PAN_BENT_ARMS_HORZ: BYTE = 7;
1141pub const PAN_BENT_ARMS_WEDGE: BYTE = 8;
1142pub const PAN_BENT_ARMS_VERT: BYTE = 9;
1143pub const PAN_BENT_ARMS_SINGLE_SERIF: BYTE = 10;
1144pub const PAN_BENT_ARMS_DOUBLE_SERIF: BYTE = 11;
1145pub const PAN_LETT_NORMAL_CONTACT: BYTE = 2;
1146pub const PAN_LETT_NORMAL_WEIGHTED: BYTE = 3;
1147pub const PAN_LETT_NORMAL_BOXED: BYTE = 4;
1148pub const PAN_LETT_NORMAL_FLATTENED: BYTE = 5;
1149pub const PAN_LETT_NORMAL_ROUNDED: BYTE = 6;
1150pub const PAN_LETT_NORMAL_OFF_CENTER: BYTE = 7;
1151pub const PAN_LETT_NORMAL_SQUARE: BYTE = 8;
1152pub const PAN_LETT_OBLIQUE_CONTACT: BYTE = 9;
1153pub const PAN_LETT_OBLIQUE_WEIGHTED: BYTE = 10;
1154pub const PAN_LETT_OBLIQUE_BOXED: BYTE = 11;
1155pub const PAN_LETT_OBLIQUE_FLATTENED: BYTE = 12;
1156pub const PAN_LETT_OBLIQUE_ROUNDED: BYTE = 13;
1157pub const PAN_LETT_OBLIQUE_OFF_CENTER: BYTE = 14;
1158pub const PAN_LETT_OBLIQUE_SQUARE: BYTE = 15;
1159pub const PAN_MIDLINE_STANDARD_TRIMMED: BYTE = 2;
1160pub const PAN_MIDLINE_STANDARD_POINTED: BYTE = 3;
1161pub const PAN_MIDLINE_STANDARD_SERIFED: BYTE = 4;
1162pub const PAN_MIDLINE_HIGH_TRIMMED: BYTE = 5;
1163pub const PAN_MIDLINE_HIGH_POINTED: BYTE = 6;
1164pub const PAN_MIDLINE_HIGH_SERIFED: BYTE = 7;
1165pub const PAN_MIDLINE_CONSTANT_TRIMMED: BYTE = 8;
1166pub const PAN_MIDLINE_CONSTANT_POINTED: BYTE = 9;
1167pub const PAN_MIDLINE_CONSTANT_SERIFED: BYTE = 10;
1168pub const PAN_MIDLINE_LOW_TRIMMED: BYTE = 11;
1169pub const PAN_MIDLINE_LOW_POINTED: BYTE = 12;
1170pub const PAN_MIDLINE_LOW_SERIFED: BYTE = 13;
1171pub const PAN_XHEIGHT_CONSTANT_SMALL: BYTE = 2;
1172pub const PAN_XHEIGHT_CONSTANT_STD: BYTE = 3;
1173pub const PAN_XHEIGHT_CONSTANT_LARGE: BYTE = 4;
1174pub const PAN_XHEIGHT_DUCKING_SMALL: BYTE = 5;
1175pub const PAN_XHEIGHT_DUCKING_STD: BYTE = 6;
1176pub const PAN_XHEIGHT_DUCKING_LARGE: BYTE = 7;
1177pub const ELF_VENDOR_SIZE: usize = 4;
1178STRUCT!{struct EXTLOGFONTA {
1179    elfLogFont: LOGFONTA,
1180    elfFullName: [BYTE; LF_FULLFACESIZE],
1181    elfStyle: [BYTE; LF_FACESIZE],
1182    elfVersion: DWORD,
1183    elfStyleSize: DWORD,
1184    elfMatch: DWORD,
1185    elfReserved: DWORD,
1186    elfVendorId: [BYTE; ELF_VENDOR_SIZE],
1187    elfCulture: DWORD,
1188    elfPanose: PANOSE,
1189}}
1190pub type PEXTLOGFONTA = *mut EXTLOGFONTA;
1191pub type NPEXTLOGFONTA = *mut EXTLOGFONTA;
1192pub type LPEXTLOGFONTA = *mut EXTLOGFONTA;
1193STRUCT!{struct EXTLOGFONTW {
1194    elfLogFont: LOGFONTW,
1195    elfFullNam: [WCHAR; LF_FULLFACESIZE],
1196    elfStyle: [WCHAR; LF_FACESIZE],
1197    elfVersion: DWORD,
1198    elfStyleSize: DWORD,
1199    elfMatch: DWORD,
1200    elfReserved: DWORD,
1201    elfVendorId: [BYTE; ELF_VENDOR_SIZE],
1202    elfCulture: DWORD,
1203    elfPanose: PANOSE,
1204}}
1205pub type PEXTLOGFONTW = *mut EXTLOGFONTW;
1206pub type NPEXTLOGFONTW = *mut EXTLOGFONTW;
1207pub type LPEXTLOGFONTW = *mut EXTLOGFONTW;
1208pub const ELF_VERSION: DWORD = 0;
1209pub const ELF_CULTURE_LATIN: DWORD = 0;
1210pub const RASTER_FONTTYPE: DWORD = 0x0001;
1211pub const DEVICE_FONTTYPE: DWORD = 0x0002;
1212pub const TRUETYPE_FONTTYPE: DWORD = 0x0004;
1213#[inline]
1214pub fn RGB(r: BYTE, g: BYTE, b: BYTE) -> COLORREF {
1215    r as COLORREF | ((g as COLORREF) << 8) | ((b as COLORREF) << 16)
1216}
1217#[inline]
1218pub fn PALETTERGB(r: BYTE, g: BYTE, b: BYTE) -> COLORREF {
1219    0x02000000 | RGB(r, g, b)
1220}
1221#[inline]
1222pub fn PALETTEINDEX(i: WORD) -> COLORREF {
1223    0x01000000 | i as DWORD
1224}
1225pub const PC_RESERVED: DWORD = 0x01;
1226pub const PC_EXPLICIT: DWORD = 0x02;
1227pub const PC_NOCOLLAPSE: DWORD = 0x04;
1228#[inline]
1229pub fn GetRValue(rgb: COLORREF) -> BYTE {
1230    LOBYTE(rgb as WORD)
1231}
1232#[inline]
1233pub fn GetGValue(rgb: COLORREF) -> BYTE {
1234    LOBYTE((rgb as WORD) >> 8)
1235}
1236#[inline]
1237pub fn GetBValue(rgb: COLORREF) -> BYTE {
1238    LOBYTE((rgb >> 16) as WORD)
1239}
1240pub const TRANSPARENT: DWORD = 1;
1241pub const OPAQUE: DWORD = 2;
1242pub const BKMODE_LAST: DWORD = 2;
1243pub const GM_COMPATIBLE: DWORD = 1;
1244pub const GM_ADVANCED: DWORD = 2;
1245pub const GM_LAST: DWORD = 2;
1246pub const PT_CLOSEFIGURE: DWORD = 0x01;
1247pub const PT_LINETO: DWORD = 0x02;
1248pub const PT_BEZIERTO: DWORD = 0x04;
1249pub const PT_MOVETO: DWORD = 0x06;
1250pub const MM_TEXT: DWORD = 1;
1251pub const MM_LOMETRIC: DWORD = 2;
1252pub const MM_HIMETRIC: DWORD = 3;
1253pub const MM_LOENGLISH: DWORD = 4;
1254pub const MM_HIENGLISH: DWORD = 5;
1255pub const MM_TWIPS: DWORD = 6;
1256pub const MM_ISOTROPIC: DWORD = 7;
1257pub const MM_ANISOTROPIC: DWORD = 8;
1258pub const MM_MIN: DWORD = MM_TEXT;
1259pub const MM_MAX: DWORD = MM_ANISOTROPIC;
1260pub const MM_MAX_FIXEDSCALE: DWORD = MM_TWIPS;
1261pub const ABSOLUTE: DWORD = 1;
1262pub const RELATIVE: DWORD = 2;
1263pub const WHITE_BRUSH: DWORD = 0;
1264pub const LTGRAY_BRUSH: DWORD = 1;
1265pub const GRAY_BRUSH: DWORD = 2;
1266pub const DKGRAY_BRUSH: DWORD = 3;
1267pub const BLACK_BRUSH: DWORD = 4;
1268pub const NULL_BRUSH: DWORD = 5;
1269pub const HOLLOW_BRUSH: DWORD = NULL_BRUSH;
1270pub const WHITE_PEN: DWORD = 6;
1271pub const BLACK_PEN: DWORD = 7;
1272pub const NULL_PEN: DWORD = 8;
1273pub const OEM_FIXED_FONT: DWORD = 10;
1274pub const ANSI_FIXED_FONT: DWORD = 11;
1275pub const ANSI_VAR_FONT: DWORD = 12;
1276pub const SYSTEM_FONT: DWORD = 13;
1277pub const DEVICE_DEFAULT_FONT: DWORD = 14;
1278pub const DEFAULT_PALETTE: DWORD = 15;
1279pub const SYSTEM_FIXED_FONT: DWORD = 16;
1280pub const DEFAULT_GUI_FONT: DWORD = 17;
1281pub const DC_BRUSH: DWORD = 18;
1282pub const DC_PEN: DWORD = 19;
1283pub const STOCK_LAST: DWORD = 19;
1284pub const CLR_INVALID: COLORREF = 0xFFFFFFFF;
1285pub const BS_SOLID: DWORD = 0;
1286pub const BS_NULL: DWORD = 1;
1287pub const BS_HOLLOW: DWORD = BS_NULL;
1288pub const BS_HATCHED: DWORD = 2;
1289pub const BS_PATTERN: DWORD = 3;
1290pub const BS_INDEXED: DWORD = 4;
1291pub const BS_DIBPATTERN: DWORD = 5;
1292pub const BS_DIBPATTERNPT: DWORD = 6;
1293pub const BS_PATTERN8X8: DWORD = 7;
1294pub const BS_DIBPATTERN8X8: DWORD = 8;
1295pub const BS_MONOPATTERN: DWORD = 9;
1296pub const HS_HORIZONTAL: DWORD = 0;
1297pub const HS_VERTICAL: DWORD = 1;
1298pub const HS_FDIAGONAL: DWORD = 2;
1299pub const HS_BDIAGONAL: DWORD = 3;
1300pub const HS_CROSS: DWORD = 4;
1301pub const HS_DIAGCROSS: DWORD = 5;
1302pub const HS_API_MAX: DWORD = 12;
1303pub const PS_SOLID: DWORD = 0;
1304pub const PS_DASH: DWORD = 1;
1305pub const PS_DOT: DWORD = 2;
1306pub const PS_DASHDOT: DWORD = 3;
1307pub const PS_DASHDOTDOT: DWORD = 4;
1308pub const PS_NULL: DWORD = 5;
1309pub const PS_INSIDEFRAME: DWORD = 6;
1310pub const PS_USERSTYLE: DWORD = 7;
1311pub const PS_ALTERNATE: DWORD = 8;
1312pub const PS_STYLE_MASK: DWORD = 0x0000000F;
1313pub const PS_ENDCAP_ROUND: DWORD = 0x00000000;
1314pub const PS_ENDCAP_SQUARE: DWORD = 0x00000100;
1315pub const PS_ENDCAP_FLAT: DWORD = 0x00000200;
1316pub const PS_ENDCAP_MASK: DWORD = 0x00000F00;
1317pub const PS_JOIN_ROUND: DWORD = 0x00000000;
1318pub const PS_JOIN_BEVEL: DWORD = 0x00001000;
1319pub const PS_JOIN_MITER: DWORD = 0x00002000;
1320pub const PS_JOIN_MASK: DWORD = 0x0000F000;
1321pub const PS_COSMETIC: DWORD = 0x00000000;
1322pub const PS_GEOMETRIC: DWORD = 0x00010000;
1323pub const PS_TYPE_MASK: DWORD = 0x000F0000;
1324pub const AD_COUNTERCLOCKWISE: DWORD = 1;
1325pub const AD_CLOCKWISE: DWORD = 2;
1326pub const DRIVERVERSION: c_int = 0;
1327pub const TECHNOLOGY: c_int = 2;
1328pub const HORZSIZE: c_int = 4;
1329pub const VERTSIZE: c_int = 6;
1330pub const HORZRES: c_int = 8;
1331pub const VERTRES: c_int = 10;
1332pub const BITSPIXEL: c_int = 12;
1333pub const PLANES: c_int = 14;
1334pub const NUMBRUSHES: c_int = 16;
1335pub const NUMPENS: c_int = 18;
1336pub const NUMMARKERS: c_int = 20;
1337pub const NUMFONTS: c_int = 22;
1338pub const NUMCOLORS: c_int = 24;
1339pub const PDEVICESIZE: c_int = 26;
1340pub const CURVECAPS: c_int = 28;
1341pub const LINECAPS: c_int = 30;
1342pub const POLYGONALCAPS: c_int = 32;
1343pub const TEXTCAPS: c_int = 34;
1344pub const CLIPCAPS: c_int = 36;
1345pub const RASTERCAPS: c_int = 38;
1346pub const ASPECTX: c_int = 40;
1347pub const ASPECTY: c_int = 42;
1348pub const ASPECTXY: c_int = 44;
1349pub const LOGPIXELSX: c_int = 88;
1350pub const LOGPIXELSY: c_int = 90;
1351pub const SIZEPALETTE: c_int = 104;
1352pub const NUMRESERVED: c_int = 106;
1353pub const COLORRES: c_int = 108;
1354pub const PHYSICALWIDTH: c_int = 110;
1355pub const PHYSICALHEIGHT: c_int = 111;
1356pub const PHYSICALOFFSETX: c_int = 112;
1357pub const PHYSICALOFFSETY: c_int = 113;
1358pub const SCALINGFACTORX: c_int = 114;
1359pub const SCALINGFACTORY: c_int = 115;
1360pub const VREFRESH: c_int = 116;
1361pub const DESKTOPVERTRES: c_int = 117;
1362pub const DESKTOPHORZRES: c_int = 118;
1363pub const BLTALIGNMENT: c_int = 119;
1364pub const SHADEBLENDCAPS: c_int = 120;
1365pub const COLORMGMTCAPS: c_int = 121;
1366pub const DT_PLOTTER: DWORD = 0;
1367pub const DT_RASDISPLAY: DWORD = 1;
1368pub const DT_RASPRINTER: DWORD = 2;
1369pub const DT_RASCAMERA: DWORD = 3;
1370pub const DT_CHARSTREAM: DWORD = 4;
1371pub const DT_METAFILE: DWORD = 5;
1372pub const DT_DISPFILE: DWORD = 6;
1373pub const CC_NONE: DWORD = 0;
1374pub const CC_CIRCLES: DWORD = 1;
1375pub const CC_PIE: DWORD = 2;
1376pub const CC_CHORD: DWORD = 4;
1377pub const CC_ELLIPSES: DWORD = 8;
1378pub const CC_WIDE: DWORD = 16;
1379pub const CC_STYLED: DWORD = 32;
1380pub const CC_WIDESTYLED: DWORD = 64;
1381pub const CC_INTERIORS: DWORD = 128;
1382pub const CC_ROUNDRECT: DWORD = 256;
1383pub const LC_NONE: DWORD = 0;
1384pub const LC_POLYLINE: DWORD = 2;
1385pub const LC_MARKER: DWORD = 4;
1386pub const LC_POLYMARKER: DWORD = 8;
1387pub const LC_WIDE: DWORD = 16;
1388pub const LC_STYLED: DWORD = 32;
1389pub const LC_WIDESTYLED: DWORD = 64;
1390pub const LC_INTERIORS: DWORD = 128;
1391pub const PC_NONE: DWORD = 0;
1392pub const PC_POLYGON: DWORD = 1;
1393pub const PC_RECTANGLE: DWORD = 2;
1394pub const PC_WINDPOLYGON: DWORD = 4;
1395pub const PC_TRAPEZOID: DWORD = 4;
1396pub const PC_SCANLINE: DWORD = 8;
1397pub const PC_WIDE: DWORD = 16;
1398pub const PC_STYLED: DWORD = 32;
1399pub const PC_WIDESTYLED: DWORD = 64;
1400pub const PC_INTERIORS: DWORD = 128;
1401pub const PC_POLYPOLYGON: DWORD = 256;
1402pub const PC_PATHS: DWORD = 512;
1403pub const CP_NONE: DWORD = 0;
1404pub const CP_RECTANGLE: DWORD = 1;
1405pub const CP_REGION: DWORD = 2;
1406pub const TC_OP_CHARACTER: DWORD = 0x00000001;
1407pub const TC_OP_STROKE: DWORD = 0x00000002;
1408pub const TC_CP_STROKE: DWORD = 0x00000004;
1409pub const TC_CR_90: DWORD = 0x00000008;
1410pub const TC_CR_ANY: DWORD = 0x00000010;
1411pub const TC_SF_X_YINDEP: DWORD = 0x00000020;
1412pub const TC_SA_DOUBLE: DWORD = 0x00000040;
1413pub const TC_SA_INTEGER: DWORD = 0x00000080;
1414pub const TC_SA_CONTIN: DWORD = 0x00000100;
1415pub const TC_EA_DOUBLE: DWORD = 0x00000200;
1416pub const TC_IA_ABLE: DWORD = 0x00000400;
1417pub const TC_UA_ABLE: DWORD = 0x00000800;
1418pub const TC_SO_ABLE: DWORD = 0x00001000;
1419pub const TC_RA_ABLE: DWORD = 0x00002000;
1420pub const TC_VA_ABLE: DWORD = 0x00004000;
1421pub const TC_RESERVED: DWORD = 0x00008000;
1422pub const TC_SCROLLBLT: DWORD = 0x00010000;
1423pub const RC_BITBLT: DWORD = 1;
1424pub const RC_BANDING: DWORD = 2;
1425pub const RC_SCALING: DWORD = 4;
1426pub const RC_BITMAP64: DWORD = 8;
1427pub const RC_GDI20_OUTPUT: DWORD = 0x0010;
1428pub const RC_GDI20_STATE: DWORD = 0x0020;
1429pub const RC_SAVEBITMAP: DWORD = 0x0040;
1430pub const RC_DI_BITMAP: DWORD = 0x0080;
1431pub const RC_PALETTE: DWORD = 0x0100;
1432pub const RC_DIBTODEV: DWORD = 0x0200;
1433pub const RC_BIGFONT: DWORD = 0x0400;
1434pub const RC_STRETCHBLT: DWORD = 0x0800;
1435pub const RC_FLOODFILL: DWORD = 0x1000;
1436pub const RC_STRETCHDIB: DWORD = 0x2000;
1437pub const RC_OP_DX_OUTPUT: DWORD = 0x4000;
1438pub const RC_DEVBITS: DWORD = 0x8000;
1439pub const SB_NONE: DWORD = 0x00000000;
1440pub const SB_CONST_ALPHA: DWORD = 0x00000001;
1441pub const SB_PIXEL_ALPHA: DWORD = 0x00000002;
1442pub const SB_PREMULT_ALPHA: DWORD = 0x00000004;
1443pub const SB_GRAD_RECT: DWORD = 0x00000010;
1444pub const SB_GRAD_TRI: DWORD = 0x00000020;
1445pub const CM_NONE: DWORD = 0x00000000;
1446pub const CM_DEVICE_ICM: DWORD = 0x00000001;
1447pub const CM_GAMMA_RAMP: DWORD = 0x00000002;
1448pub const CM_CMYK_COLOR: DWORD = 0x00000004;
1449pub const DIB_RGB_COLORS: DWORD = 0;
1450pub const DIB_PAL_COLORS: DWORD = 1;
1451pub const SYSPAL_ERROR: DWORD = 0;
1452pub const SYSPAL_STATIC: DWORD = 1;
1453pub const SYSPAL_NOSTATIC: DWORD = 2;
1454pub const SYSPAL_NOSTATIC256: DWORD = 3;
1455pub const CBM_INIT: DWORD = 0x04;
1456pub const FLOODFILLBORDER: DWORD = 0;
1457pub const FLOODFILLSURFACE: DWORD = 1;
1458pub const CCHDEVICENAME: usize = 32;
1459pub const CCHFORMNAME: usize = 32;
1460STRUCT!{struct DEVMODE_u1_s1 {
1461    dmOrientation: c_short,
1462    dmPaperSize: c_short,
1463    dmPaperLength: c_short,
1464    dmPaperWidth: c_short,
1465    dmScale: c_short,
1466    dmCopies: c_short,
1467    dmDefaultSource: c_short,
1468    dmPrintQuality: c_short,
1469}}
1470STRUCT!{struct DEVMODE_u1_s2 {
1471    dmPosition: POINTL,
1472    dmDisplayOrientation: DWORD,
1473    dmDisplayFixedOutput: DWORD,
1474}}
1475UNION!{union DEVMODE_u1 {
1476    [u32; 4],
1477    s1 s1_mut: DEVMODE_u1_s1,
1478    s2 s2_mut: DEVMODE_u1_s2,
1479}}
1480UNION!{union DEVMODE_u2 {
1481    [u32; 1],
1482    dmDisplayFlags dmDisplayFlags_mut: DWORD,
1483    dmNup dmNup_mut: DWORD,
1484}}
1485STRUCT!{struct DEVMODEA {
1486    dmDeviceName: [CHAR; CCHDEVICENAME],
1487    dmSpecVersion: WORD,
1488    dmDriverVersion: WORD,
1489    dmSize: WORD,
1490    dmDriverExtra: WORD,
1491    dmFields: DWORD,
1492    u1: DEVMODE_u1,
1493    dmColor: c_short,
1494    dmDuplex: c_short,
1495    dmYResolution: c_short,
1496    dmTTOption: c_short,
1497    dmCollate: c_short,
1498    dmFormName: [CHAR; CCHFORMNAME],
1499    dmLogPixels: WORD,
1500    dmBitsPerPel: DWORD,
1501    dmPelsWidth: DWORD,
1502    dmPelsHeight: DWORD,
1503    u2: DEVMODE_u2,
1504    dmDisplayFrequency: DWORD,
1505    dmICMMethod: DWORD,
1506    dmICMIntent: DWORD,
1507    dmMediaType: DWORD,
1508    dmDitherType: DWORD,
1509    dmReserved1: DWORD,
1510    dmReserved2: DWORD,
1511    dmPanningWidth: DWORD,
1512    dmPanningHeight: DWORD,
1513}}
1514pub type PDEVMODEA = *mut DEVMODEA;
1515pub type NPDEVMODEA = *mut DEVMODEA;
1516pub type LPDEVMODEA = *mut DEVMODEA;
1517STRUCT!{struct DEVMODEW {
1518    dmDeviceName: [WCHAR; CCHDEVICENAME],
1519    dmSpecVersion: WORD,
1520    dmDriverVersion: WORD,
1521    dmSize: WORD,
1522    dmDriverExtra: WORD,
1523    dmFields: DWORD,
1524    u1: DEVMODE_u1,
1525    dmColor: c_short,
1526    dmDuplex: c_short,
1527    dmYResolution: c_short,
1528    dmTTOption: c_short,
1529    dmCollate: c_short,
1530    dmFormName: [WCHAR; CCHFORMNAME],
1531    dmLogPixels: WORD,
1532    dmBitsPerPel: DWORD,
1533    dmPelsWidth: DWORD,
1534    dmPelsHeight: DWORD,
1535    u2: DEVMODE_u2,
1536    dmDisplayFrequency: DWORD,
1537    dmICMMethod: DWORD,
1538    dmICMIntent: DWORD,
1539    dmMediaType: DWORD,
1540    dmDitherType: DWORD,
1541    dmReserved1: DWORD,
1542    dmReserved2: DWORD,
1543    dmPanningWidth: DWORD,
1544    dmPanningHeight: DWORD,
1545}}
1546pub type PDEVMODEW = *mut DEVMODEW;
1547pub type NPDEVMODEW = *mut DEVMODEW;
1548pub type LPDEVMODEW = *mut DEVMODEW;
1549pub const DM_SPECVERSION: DWORD = 0x0401;
1550pub const DM_ORIENTATION: DWORD = 0x00000001;
1551pub const DM_PAPERSIZE: DWORD = 0x00000002;
1552pub const DM_PAPERLENGTH: DWORD = 0x00000004;
1553pub const DM_PAPERWIDTH: DWORD = 0x00000008;
1554pub const DM_SCALE: DWORD = 0x00000010;
1555pub const DM_POSITION: DWORD = 0x00000020;
1556pub const DM_NUP: DWORD = 0x00000040;
1557pub const DM_DISPLAYORIENTATION: DWORD = 0x00000080;
1558pub const DM_COPIES: DWORD = 0x00000100;
1559pub const DM_DEFAULTSOURCE: DWORD = 0x00000200;
1560pub const DM_PRINTQUALITY: DWORD = 0x00000400;
1561pub const DM_COLOR: DWORD = 0x00000800;
1562pub const DM_DUPLEX: DWORD = 0x00001000;
1563pub const DM_YRESOLUTION: DWORD = 0x00002000;
1564pub const DM_TTOPTION: DWORD = 0x00004000;
1565pub const DM_COLLATE: DWORD = 0x00008000;
1566pub const DM_FORMNAME: DWORD = 0x00010000;
1567pub const DM_LOGPIXELS: DWORD = 0x00020000;
1568pub const DM_BITSPERPEL: DWORD = 0x00040000;
1569pub const DM_PELSWIDTH: DWORD = 0x00080000;
1570pub const DM_PELSHEIGHT: DWORD = 0x00100000;
1571pub const DM_DISPLAYFLAGS: DWORD = 0x00200000;
1572pub const DM_DISPLAYFREQUENCY: DWORD = 0x00400000;
1573pub const DM_ICMMETHOD: DWORD = 0x00800000;
1574pub const DM_ICMINTENT: DWORD = 0x01000000;
1575pub const DM_MEDIATYPE: DWORD = 0x02000000;
1576pub const DM_DITHERTYPE: DWORD = 0x04000000;
1577pub const DM_PANNINGWIDTH: DWORD = 0x08000000;
1578pub const DM_PANNINGHEIGHT: DWORD = 0x10000000;
1579pub const DM_DISPLAYFIXEDOUTPUT: DWORD = 0x20000000;
1580pub const DMORIENT_PORTRAIT: DWORD = 1;
1581pub const DMORIENT_LANDSCAPE: DWORD = 2;
1582pub const DMPAPER_FIRST: DWORD = DMPAPER_LETTER;
1583pub const DMPAPER_LETTER: DWORD = 1;
1584pub const DMPAPER_LETTERSMALL: DWORD = 2;
1585pub const DMPAPER_TABLOID: DWORD = 3;
1586pub const DMPAPER_LEDGER: DWORD = 4;
1587pub const DMPAPER_LEGAL: DWORD = 5;
1588pub const DMPAPER_STATEMENT: DWORD = 6;
1589pub const DMPAPER_EXECUTIVE: DWORD = 7;
1590pub const DMPAPER_A3: DWORD = 8;
1591pub const DMPAPER_A4: DWORD = 9;
1592pub const DMPAPER_A4SMALL: DWORD = 10;
1593pub const DMPAPER_A5: DWORD = 11;
1594pub const DMPAPER_B4: DWORD = 12;
1595pub const DMPAPER_B5: DWORD = 13;
1596pub const DMPAPER_FOLIO: DWORD = 14;
1597pub const DMPAPER_QUARTO: DWORD = 15;
1598pub const DMPAPER_10X14: DWORD = 16;
1599pub const DMPAPER_11X17: DWORD = 17;
1600pub const DMPAPER_NOTE: DWORD = 18;
1601pub const DMPAPER_ENV_9: DWORD = 19;
1602pub const DMPAPER_ENV_10: DWORD = 20;
1603pub const DMPAPER_ENV_11: DWORD = 21;
1604pub const DMPAPER_ENV_12: DWORD = 22;
1605pub const DMPAPER_ENV_14: DWORD = 23;
1606pub const DMPAPER_CSHEET: DWORD = 24;
1607pub const DMPAPER_DSHEET: DWORD = 25;
1608pub const DMPAPER_ESHEET: DWORD = 26;
1609pub const DMPAPER_ENV_DL: DWORD = 27;
1610pub const DMPAPER_ENV_C5: DWORD = 28;
1611pub const DMPAPER_ENV_C3: DWORD = 29;
1612pub const DMPAPER_ENV_C4: DWORD = 30;
1613pub const DMPAPER_ENV_C6: DWORD = 31;
1614pub const DMPAPER_ENV_C65: DWORD = 32;
1615pub const DMPAPER_ENV_B4: DWORD = 33;
1616pub const DMPAPER_ENV_B5: DWORD = 34;
1617pub const DMPAPER_ENV_B6: DWORD = 35;
1618pub const DMPAPER_ENV_ITALY: DWORD = 36;
1619pub const DMPAPER_ENV_MONARCH: DWORD = 37;
1620pub const DMPAPER_ENV_PERSONAL: DWORD = 38;
1621pub const DMPAPER_FANFOLD_US: DWORD = 39;
1622pub const DMPAPER_FANFOLD_STD_GERMAN: DWORD = 40;
1623pub const DMPAPER_FANFOLD_LGL_GERMAN: DWORD = 41;
1624pub const DMPAPER_ISO_B4: DWORD = 42;
1625pub const DMPAPER_JAPANESE_POSTCARD: DWORD = 43;
1626pub const DMPAPER_9X11: DWORD = 44;
1627pub const DMPAPER_10X11: DWORD = 45;
1628pub const DMPAPER_15X11: DWORD = 46;
1629pub const DMPAPER_ENV_INVITE: DWORD = 47;
1630pub const DMPAPER_RESERVED_48: DWORD = 48;
1631pub const DMPAPER_RESERVED_49: DWORD = 49;
1632pub const DMPAPER_LETTER_EXTRA: DWORD = 50;
1633pub const DMPAPER_LEGAL_EXTRA: DWORD = 51;
1634pub const DMPAPER_TABLOID_EXTRA: DWORD = 52;
1635pub const DMPAPER_A4_EXTRA: DWORD = 53;
1636pub const DMPAPER_LETTER_TRANSVERSE: DWORD = 54;
1637pub const DMPAPER_A4_TRANSVERSE: DWORD = 55;
1638pub const DMPAPER_LETTER_EXTRA_TRANSVERSE: DWORD = 56;
1639pub const DMPAPER_A_PLUS: DWORD = 57;
1640pub const DMPAPER_B_PLUS: DWORD = 58;
1641pub const DMPAPER_LETTER_PLUS: DWORD = 59;
1642pub const DMPAPER_A4_PLUS: DWORD = 60;
1643pub const DMPAPER_A5_TRANSVERSE: DWORD = 61;
1644pub const DMPAPER_B5_TRANSVERSE: DWORD = 62;
1645pub const DMPAPER_A3_EXTRA: DWORD = 63;
1646pub const DMPAPER_A5_EXTRA: DWORD = 64;
1647pub const DMPAPER_B5_EXTRA: DWORD = 65;
1648pub const DMPAPER_A2: DWORD = 66;
1649pub const DMPAPER_A3_TRANSVERSE: DWORD = 67;
1650pub const DMPAPER_A3_EXTRA_TRANSVERSE: DWORD = 68;
1651pub const DMPAPER_DBL_JAPANESE_POSTCARD: DWORD = 69;
1652pub const DMPAPER_A6: DWORD = 70;
1653pub const DMPAPER_JENV_KAKU2: DWORD = 71;
1654pub const DMPAPER_JENV_KAKU3: DWORD = 72;
1655pub const DMPAPER_JENV_CHOU3: DWORD = 73;
1656pub const DMPAPER_JENV_CHOU4: DWORD = 74;
1657pub const DMPAPER_LETTER_ROTATED: DWORD = 75;
1658pub const DMPAPER_A3_ROTATED: DWORD = 76;
1659pub const DMPAPER_A4_ROTATED: DWORD = 77;
1660pub const DMPAPER_A5_ROTATED: DWORD = 78;
1661pub const DMPAPER_B4_JIS_ROTATED: DWORD = 79;
1662pub const DMPAPER_B5_JIS_ROTATED: DWORD = 80;
1663pub const DMPAPER_JAPANESE_POSTCARD_ROTATED: DWORD = 81;
1664pub const DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED: DWORD = 82;
1665pub const DMPAPER_A6_ROTATED: DWORD = 83;
1666pub const DMPAPER_JENV_KAKU2_ROTATED: DWORD = 84;
1667pub const DMPAPER_JENV_KAKU3_ROTATED: DWORD = 85;
1668pub const DMPAPER_JENV_CHOU3_ROTATED: DWORD = 86;
1669pub const DMPAPER_JENV_CHOU4_ROTATED: DWORD = 87;
1670pub const DMPAPER_B6_JIS: DWORD = 88;
1671pub const DMPAPER_B6_JIS_ROTATED: DWORD = 89;
1672pub const DMPAPER_12X11: DWORD = 90;
1673pub const DMPAPER_JENV_YOU4: DWORD = 91;
1674pub const DMPAPER_JENV_YOU4_ROTATED: DWORD = 92;
1675pub const DMPAPER_P16K: DWORD = 93;
1676pub const DMPAPER_P32K: DWORD = 94;
1677pub const DMPAPER_P32KBIG: DWORD = 95;
1678pub const DMPAPER_PENV_1: DWORD = 96;
1679pub const DMPAPER_PENV_2: DWORD = 97;
1680pub const DMPAPER_PENV_3: DWORD = 98;
1681pub const DMPAPER_PENV_4: DWORD = 99;
1682pub const DMPAPER_PENV_5: DWORD = 100;
1683pub const DMPAPER_PENV_6: DWORD = 101;
1684pub const DMPAPER_PENV_7: DWORD = 102;
1685pub const DMPAPER_PENV_8: DWORD = 103;
1686pub const DMPAPER_PENV_9: DWORD = 104;
1687pub const DMPAPER_PENV_10: DWORD = 105;
1688pub const DMPAPER_P16K_ROTATED: DWORD = 106;
1689pub const DMPAPER_P32K_ROTATED: DWORD = 107;
1690pub const DMPAPER_P32KBIG_ROTATED: DWORD = 108;
1691pub const DMPAPER_PENV_1_ROTATED: DWORD = 109;
1692pub const DMPAPER_PENV_2_ROTATED: DWORD = 110;
1693pub const DMPAPER_PENV_3_ROTATED: DWORD = 111;
1694pub const DMPAPER_PENV_4_ROTATED: DWORD = 112;
1695pub const DMPAPER_PENV_5_ROTATED: DWORD = 113;
1696pub const DMPAPER_PENV_6_ROTATED: DWORD = 114;
1697pub const DMPAPER_PENV_7_ROTATED: DWORD = 115;
1698pub const DMPAPER_PENV_8_ROTATED: DWORD = 116;
1699pub const DMPAPER_PENV_9_ROTATED: DWORD = 117;
1700pub const DMPAPER_PENV_10_ROTATED: DWORD = 118;
1701pub const DMPAPER_LAST: DWORD = DMPAPER_PENV_10_ROTATED;
1702pub const DMPAPER_USER: DWORD = 256;
1703pub const DMBIN_FIRST: DWORD = DMBIN_UPPER;
1704pub const DMBIN_UPPER: DWORD = 1;
1705pub const DMBIN_ONLYONE: DWORD = 1;
1706pub const DMBIN_LOWER: DWORD = 2;
1707pub const DMBIN_MIDDLE: DWORD = 3;
1708pub const DMBIN_MANUAL: DWORD = 4;
1709pub const DMBIN_ENVELOPE: DWORD = 5;
1710pub const DMBIN_ENVMANUAL: DWORD = 6;
1711pub const DMBIN_AUTO: DWORD = 7;
1712pub const DMBIN_TRACTOR: DWORD = 8;
1713pub const DMBIN_SMALLFMT: DWORD = 9;
1714pub const DMBIN_LARGEFMT: DWORD = 10;
1715pub const DMBIN_LARGECAPACITY: DWORD = 11;
1716pub const DMBIN_CASSETTE: DWORD = 14;
1717pub const DMBIN_FORMSOURCE: DWORD = 15;
1718pub const DMBIN_LAST: DWORD = DMBIN_FORMSOURCE;
1719pub const DMBIN_USER: DWORD = 256;
1720pub const DMRES_DRAFT: c_int = -1;
1721pub const DMRES_LOW: c_int = -2;
1722pub const DMRES_MEDIUM: c_int = -3;
1723pub const DMRES_HIGH: c_int = -4;
1724pub const DMCOLOR_MONOCHROME: DWORD = 1;
1725pub const DMCOLOR_COLOR: DWORD = 2;
1726pub const DMDUP_SIMPLEX: DWORD = 1;
1727pub const DMDUP_VERTICAL: DWORD = 2;
1728pub const DMDUP_HORIZONTAL: DWORD = 3;
1729pub const DMTT_BITMAP: DWORD = 1;
1730pub const DMTT_DOWNLOAD: DWORD = 2;
1731pub const DMTT_SUBDEV: DWORD = 3;
1732pub const DMTT_DOWNLOAD_OUTLINE: DWORD = 4;
1733pub const DMCOLLATE_FALSE: DWORD = 0;
1734pub const DMCOLLATE_TRUE: DWORD = 1;
1735pub const DMDO_DEFAULT: DWORD = 0;
1736pub const DMDO_90: DWORD = 1;
1737pub const DMDO_180: DWORD = 2;
1738pub const DMDO_270: DWORD = 3;
1739pub const DMDFO_DEFAULT: DWORD = 0;
1740pub const DMDFO_STRETCH: DWORD = 1;
1741pub const DMDFO_CENTER: DWORD = 2;
1742pub const DM_INTERLACED: DWORD = 0x00000002;
1743pub const DMDISPLAYFLAGS_TEXTMODE: DWORD = 0x00000004;
1744pub const DMNUP_SYSTEM: DWORD = 1;
1745pub const DMNUP_ONEUP: DWORD = 2;
1746pub const DMICMMETHOD_NONE: DWORD = 1;
1747pub const DMICMMETHOD_SYSTEM: DWORD = 2;
1748pub const DMICMMETHOD_DRIVER: DWORD = 3;
1749pub const DMICMMETHOD_DEVICE: DWORD = 4;
1750pub const DMICMMETHOD_USER: DWORD = 256;
1751pub const DMICM_SATURATE: DWORD = 1;
1752pub const DMICM_CONTRAST: DWORD = 2;
1753pub const DMICM_COLORIMETRIC: DWORD = 3;
1754pub const DMICM_ABS_COLORIMETRIC: DWORD = 4;
1755pub const DMICM_USER: DWORD = 256;
1756pub const DMMEDIA_STANDARD: DWORD = 1;
1757pub const DMMEDIA_TRANSPARENCY: DWORD = 2;
1758pub const DMMEDIA_GLOSSY: DWORD = 3;
1759pub const DMMEDIA_USER: DWORD = 256;
1760pub const DMDITHER_NONE: DWORD = 1;
1761pub const DMDITHER_COARSE: DWORD = 2;
1762pub const DMDITHER_FINE: DWORD = 3;
1763pub const DMDITHER_LINEART: DWORD = 4;
1764pub const DMDITHER_ERRORDIFFUSION: DWORD = 5;
1765pub const DMDITHER_RESERVED6: DWORD = 6;
1766pub const DMDITHER_RESERVED7: DWORD = 7;
1767pub const DMDITHER_RESERVED8: DWORD = 8;
1768pub const DMDITHER_RESERVED9: DWORD = 9;
1769pub const DMDITHER_GRAYSCALE: DWORD = 10;
1770pub const DMDITHER_USER: DWORD = 256;
1771STRUCT!{struct DISPLAY_DEVICEA {
1772    cb: DWORD,
1773    DeviceName: [CHAR; 32],
1774    DeviceString: [CHAR; 128],
1775    StateFlags: DWORD,
1776    DeviceID: [CHAR; 128],
1777    DeviceKey: [CHAR; 128],
1778}}
1779pub type PDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA;
1780pub type LPDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA;
1781STRUCT!{struct DISPLAY_DEVICEW {
1782    cb: DWORD,
1783    DeviceName: [WCHAR; 32],
1784    DeviceString: [WCHAR; 128],
1785    StateFlags: DWORD,
1786    DeviceID: [WCHAR; 128],
1787    DeviceKey: [WCHAR; 128],
1788}}
1789pub type PDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW;
1790pub type LPDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW;
1791pub const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP: DWORD = 0x00000001;
1792pub const DISPLAY_DEVICE_MULTI_DRIVER: DWORD = 0x00000002;
1793pub const DISPLAY_DEVICE_PRIMARY_DEVICE: DWORD = 0x00000004;
1794pub const DISPLAY_DEVICE_MIRRORING_DRIVER: DWORD = 0x00000008;
1795pub const DISPLAY_DEVICE_VGA_COMPATIBLE: DWORD = 0x00000010;
1796pub const DISPLAY_DEVICE_REMOVABLE: DWORD = 0x00000020;
1797pub const DISPLAY_DEVICE_ACC_DRIVER: DWORD = 0x00000040;
1798pub const DISPLAY_DEVICE_MODESPRUNED: DWORD = 0x08000000;
1799pub const DISPLAY_DEVICE_RDPUDD: DWORD = 0x01000000;
1800pub const DISPLAY_DEVICE_REMOTE: DWORD = 0x04000000;
1801pub const DISPLAY_DEVICE_DISCONNECT: DWORD = 0x02000000;
1802pub const DISPLAY_DEVICE_TS_COMPATIBLE: DWORD = 0x00200000;
1803pub const DISPLAY_DEVICE_UNSAFE_MODES_ON: DWORD = 0x00080000;
1804pub const DISPLAY_DEVICE_ACTIVE: DWORD = 0x00000001;
1805pub const DISPLAY_DEVICE_ATTACHED: DWORD = 0x00000002;
1806pub const DISPLAYCONFIG_MAXPATH: usize = 1024;
1807STRUCT!{struct DISPLAYCONFIG_RATIONAL {
1808    Numerator: UINT32,
1809    Denominator: UINT32,
1810}}
1811ENUM!{enum DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY {
1812    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1i32 as u32,
1813    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0,
1814    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1,
1815    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2,
1816    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3,
1817    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4,
1818    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5,
1819    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6,
1820    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8,
1821    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9,
1822    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,
1823    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,
1824    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,
1825    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,
1826    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,
1827    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15,
1828    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INDIRECT_WIRED = 16,
1829    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000,
1830    DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xFFFFFFFF,
1831}}
1832ENUM!{enum DISPLAYCONFIG_SCANLINE_ORDERING {
1833    DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0,
1834    DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1,
1835    DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2,
1836    DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST =
1837        DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED,
1838    DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3,
1839    DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xFFFFFFFF,
1840}}
1841STRUCT!{struct DISPLAYCONFIG_2DREGION {
1842    cx: UINT32,
1843    cy: UINT32,
1844}}
1845STRUCT!{struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo {
1846    bitfield: UINT32,
1847}}
1848BITFIELD!{DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo bitfield: UINT32 [
1849    videoStandard set_videoStandard[0..16],
1850    vSyncFreqDivider set_vSyncFreqDivider[16..22],
1851]}
1852UNION!{union DISPLAYCONFIG_VIDEO_SIGNAL_INFO_u {
1853    [u32; 1],
1854    AdditionalSignalInfo AdditionalSignalInfo_mut:
1855        DISPLAYCONFIG_VIDEO_SIGNAL_INFO_AdditionalSignalInfo,
1856    videoStandard videoStandard_mut: UINT32,
1857}}
1858STRUCT!{struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO {
1859    pixelRate: UINT64,
1860    hSyncFreq: DISPLAYCONFIG_RATIONAL,
1861    vSyncFreq: DISPLAYCONFIG_RATIONAL,
1862    activeSize: DISPLAYCONFIG_2DREGION,
1863    totalSize: DISPLAYCONFIG_2DREGION,
1864    u: DISPLAYCONFIG_VIDEO_SIGNAL_INFO_u,
1865    scanLineOrdering: DISPLAYCONFIG_SCANLINE_ORDERING,
1866}}
1867ENUM!{enum DISPLAYCONFIG_SCALING {
1868    DISPLAYCONFIG_SCALING_IDENTITY = 1,
1869    DISPLAYCONFIG_SCALING_CENTERED = 2,
1870    DISPLAYCONFIG_SCALING_STRETCHED = 3,
1871    DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4,
1872    DISPLAYCONFIG_SCALING_CUSTOM = 5,
1873    DISPLAYCONFIG_SCALING_PREFERRED = 128,
1874    DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xFFFFFFFF,
1875}}
1876ENUM!{enum DISPLAYCONFIG_ROTATION {
1877    DISPLAYCONFIG_ROTATION_IDENTITY = 1,
1878    DISPLAYCONFIG_ROTATION_ROTATE90 = 2,
1879    DISPLAYCONFIG_ROTATION_ROTATE180 = 3,
1880    DISPLAYCONFIG_ROTATION_ROTATE270 = 4,
1881    DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xFFFFFFFF,
1882}}
1883ENUM!{enum DISPLAYCONFIG_MODE_INFO_TYPE {
1884    DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1,
1885    DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2,
1886    DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3,
1887    DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xFFFFFFFF,
1888}}
1889ENUM!{enum DISPLAYCONFIG_PIXELFORMAT {
1890    DISPLAYCONFIG_PIXELFORMAT_8BPP = 1,
1891    DISPLAYCONFIG_PIXELFORMAT_16BPP = 2,
1892    DISPLAYCONFIG_PIXELFORMAT_24BPP = 3,
1893    DISPLAYCONFIG_PIXELFORMAT_32BPP = 4,
1894    DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5,
1895    DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff,
1896}}
1897STRUCT!{struct DISPLAYCONFIG_SOURCE_MODE {
1898    width: UINT32,
1899    height: UINT32,
1900    pixelFormat: DISPLAYCONFIG_PIXELFORMAT,
1901    position: POINTL,
1902}}
1903STRUCT!{struct DISPLAYCONFIG_TARGET_MODE {
1904    targetVideoSignalInfo: DISPLAYCONFIG_VIDEO_SIGNAL_INFO,
1905}}
1906STRUCT!{struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO {
1907    PathSourceSize: POINTL,
1908    DesktopImageRegion: RECTL,
1909    DesktopImageClip: RECTL,
1910}}
1911UNION!{union DISPLAYCONFIG_MODE_INFO_u {
1912    [u64; 6],
1913    targetMode targetMode_mut: DISPLAYCONFIG_TARGET_MODE,
1914    sourceMode sourceMode_mut: DISPLAYCONFIG_SOURCE_MODE,
1915    desktopImageInfo desktopImageInfo_mut: DISPLAYCONFIG_DESKTOP_IMAGE_INFO,
1916}}
1917STRUCT!{struct DISPLAYCONFIG_MODE_INFO {
1918    infoType: DISPLAYCONFIG_MODE_INFO_TYPE,
1919    id: UINT32,
1920    adapterId: LUID,
1921    u: DISPLAYCONFIG_MODE_INFO_u,
1922}}
1923pub const DISPLAYCONFIG_PATH_MODE_IDX_INVALID: DWORD = 0xffffffff;
1924pub const DISPLAYCONFIG_PATH_TARGET_MODE_IDX_INVALID: DWORD = 0xffff;
1925pub const DISPLAYCONFIG_PATH_DESKTOP_IMAGE_IDX_INVALID: DWORD = 0xffff;
1926pub const DISPLAYCONFIG_PATH_SOURCE_MODE_IDX_INVALID: DWORD = 0xffff;
1927pub const DISPLAYCONFIG_PATH_CLONE_GROUP_INVALID: DWORD = 0xffff;
1928STRUCT!{struct DISPLAYCONFIG_PATH_SOURCE_INFO {
1929    adapterId: LUID,
1930    id: UINT32,
1931    modeInfoIdx: UINT32,
1932    statusFlags: UINT32,
1933}}
1934BITFIELD!{DISPLAYCONFIG_PATH_SOURCE_INFO modeInfoIdx: UINT32 [
1935    cloneGroupId set_cloneGroupId[0..16],
1936    sourceModeInfoIdx set_sourceModeInfoIdx[16..32],
1937]}
1938pub const DISPLAYCONFIG_SOURCE_IN_USE: DWORD = 0x00000001;
1939STRUCT!{struct DISPLAYCONFIG_PATH_TARGET_INFO {
1940    adapterId: LUID,
1941    id: UINT32,
1942    modeInfoIdx: UINT32,
1943    outputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY,
1944    rotation: DISPLAYCONFIG_ROTATION,
1945    scaling: DISPLAYCONFIG_SCALING,
1946    refreshRate: DISPLAYCONFIG_RATIONAL,
1947    scanLineOrdering: DISPLAYCONFIG_SCANLINE_ORDERING,
1948    targetAvailable: BOOL,
1949    statusFlags: UINT32,
1950}}
1951BITFIELD!{DISPLAYCONFIG_PATH_TARGET_INFO modeInfoIdx: UINT32 [
1952    desktopModeInfoIdx set_desktopModeInfoIdx[0..16],
1953    targetModeInfoIdx set_targetModeInfoIdx[16..32],
1954]}
1955pub const DISPLAYCONFIG_TARGET_IN_USE: DWORD = 0x00000001;
1956pub const DISPLAYCONFIG_TARGET_FORCIBLE: DWORD = 0x00000002;
1957pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_BOOT: DWORD = 0x00000004;
1958pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_PATH: DWORD = 0x00000008;
1959pub const DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_SYSTEM: DWORD = 0x00000010;
1960pub const DISPLAYCONFIG_TARGET_IS_HMD: DWORD = 0x00000020;
1961STRUCT!{struct DISPLAYCONFIG_PATH_INFO {
1962    sourceInfo: DISPLAYCONFIG_PATH_SOURCE_INFO,
1963    targetInfo: DISPLAYCONFIG_PATH_TARGET_INFO,
1964    flags: UINT32,
1965}}
1966pub const DISPLAYCONFIG_PATH_ACTIVE: DWORD = 0x00000001;
1967pub const DISPLAYCONFIG_PATH_PREFERRED_UNSCALED: DWORD = 0x00000004;
1968pub const DISPLAYCONFIG_PATH_SUPPORT_VIRTUAL_MODE: DWORD = 0x00000008;
1969pub const DISPLAYCONFIG_PATH_VALID_FLAGS: DWORD = 0x0000000D;
1970ENUM!{enum DISPLAYCONFIG_TOPOLOGY_ID {
1971    DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001,
1972    DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002,
1973    DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004,
1974    DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008,
1975    DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xFFFFFFFF,
1976}}
1977ENUM!{enum DISPLAYCONFIG_DEVICE_INFO_TYPE {
1978    DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1,
1979    DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2,
1980    DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3,
1981    DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4,
1982    DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5,
1983    DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6,
1984    DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7,
1985    DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8,
1986    DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO = 9,
1987    DISPLAYCONFIG_DEVICE_INFO_SET_ADVANCED_COLOR_STATE = 10,
1988    DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xFFFFFFFF,
1989}}
1990STRUCT!{struct DISPLAYCONFIG_DEVICE_INFO_HEADER {
1991    _type: DISPLAYCONFIG_DEVICE_INFO_TYPE,
1992    size: UINT32,
1993    adapterId: LUID,
1994    id: UINT32,
1995}}
1996STRUCT!{struct DISPLAYCONFIG_SOURCE_DEVICE_NAME {
1997    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
1998    viewGdiDeviceName: [WCHAR; CCHDEVICENAME],
1999}}
2000STRUCT!{struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS {
2001    value: UINT32,
2002}}
2003BITFIELD!{DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS value: UINT32 [
2004    friendlyNameFromEdid set_friendlyNameFromEdid[0..1],
2005    friendlyNameForced set_friendlyNameForced[1..2],
2006    edidIdsValid set_edidIdsValid[2..3],
2007]}
2008STRUCT!{struct DISPLAYCONFIG_TARGET_DEVICE_NAME {
2009    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2010    flags: DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS,
2011    outputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY,
2012    edidManufactureId: UINT16,
2013    edidProductCodeId: UINT16,
2014    connectorInstance: UINT32,
2015    monitorFriendlyDeviceName: [WCHAR; 64],
2016    monitorDevicePath: [WCHAR; 128],
2017}}
2018STRUCT!{struct DISPLAYCONFIG_TARGET_PREFERRED_MODE {
2019    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2020    width: UINT32,
2021    height: UINT32,
2022    targetMode: DISPLAYCONFIG_TARGET_MODE,
2023}}
2024STRUCT!{struct DISPLAYCONFIG_ADAPTER_NAME {
2025    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2026    adapterDevicePath: [WCHAR; 128],
2027}}
2028STRUCT!{struct DISPLAYCONFIG_TARGET_BASE_TYPE {
2029    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2030    baseOutputTechnology: DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY,
2031}}
2032STRUCT!{struct DISPLAYCONFIG_SET_TARGET_PERSISTENCE {
2033    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2034    value: UINT32,
2035}}
2036BITFIELD!{DISPLAYCONFIG_SET_TARGET_PERSISTENCE value: UINT32 [
2037    bootPersistenceOn set_bootPersistenceOn[0..1],
2038]}
2039STRUCT!{struct DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION {
2040    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2041    value: UINT32,
2042}}
2043BITFIELD!{DISPLAYCONFIG_SUPPORT_VIRTUAL_RESOLUTION value: UINT32 [
2044    disableMonitorVirtualResolution set_disableMonitorVirtualResolution[0..1],
2045]}
2046ENUM!{enum DISPLAYCONFIG_COLOR_ENCODING {
2047    DISPLAYCONFIG_COLOR_ENCODING_RGB = 0,
2048    DISPLAYCONFIG_COLOR_ENCODING_YCBCR444 = 1,
2049    DISPLAYCONFIG_COLOR_ENCODING_YCBCR422 = 2,
2050    DISPLAYCONFIG_COLOR_ENCODING_YCBCR420 = 3,
2051    DISPLAYCONFIG_COLOR_ENCODING_INTENSITY = 4,
2052    DISPLAYCONFIG_COLOR_ENCODING_FORCE_UINT32 = 0xFFFFFFFF,
2053}}
2054STRUCT!{struct DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO {
2055    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2056    value: UINT32,
2057    colorEncoding: DISPLAYCONFIG_COLOR_ENCODING,
2058    bitsPerColorChannel: UINT32,
2059}}
2060BITFIELD!{DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO value: UINT32 [
2061    advancedColorSupported set_advancedColorSupported[0..1],
2062    advancedColorEnabled set_advancedColorEnabled[1..2],
2063    reserved set_reserved[2..32],
2064]}
2065STRUCT!{struct DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE {
2066    header: DISPLAYCONFIG_DEVICE_INFO_HEADER,
2067    value: UINT32,
2068}}
2069BITFIELD!{DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE value: UINT32 [
2070    enableAdvancedColor set_enableAdvancedColor[0..1],
2071    reserved set_reserved[1..32],
2072]}
2073pub const QDC_ALL_PATHS: DWORD = 0x00000001;
2074pub const QDC_ONLY_ACTIVE_PATHS: DWORD = 0x00000002;
2075pub const QDC_DATABASE_CURRENT: DWORD = 0x00000004;
2076pub const QDC_VIRTUAL_MODE_AWARE: DWORD = 0x00000010;
2077pub const QDC_INCLUDE_HMD: DWORD = 0x00000020;
2078pub const SDC_TOPOLOGY_INTERNAL: DWORD = 0x00000001;
2079pub const SDC_TOPOLOGY_CLONE: DWORD = 0x00000002;
2080pub const SDC_TOPOLOGY_EXTEND: DWORD = 0x00000004;
2081pub const SDC_TOPOLOGY_EXTERNAL: DWORD = 0x00000008;
2082pub const SDC_TOPOLOGY_SUPPLIED: DWORD = 0x00000010;
2083pub const SDC_USE_DATABASE_CURRENT: DWORD = SDC_TOPOLOGY_INTERNAL | SDC_TOPOLOGY_CLONE
2084    | SDC_TOPOLOGY_EXTEND | SDC_TOPOLOGY_EXTERNAL;
2085pub const SDC_USE_SUPPLIED_DISPLAY_CONFIG: DWORD = 0x00000020;
2086pub const SDC_VALIDATE: DWORD = 0x00000040;
2087pub const SDC_APPLY: DWORD = 0x00000080;
2088pub const SDC_NO_OPTIMIZATION: DWORD = 0x00000100;
2089pub const SDC_SAVE_TO_DATABASE: DWORD = 0x00000200;
2090pub const SDC_ALLOW_CHANGES: DWORD = 0x00000400;
2091pub const SDC_PATH_PERSIST_IF_REQUIRED: DWORD = 0x00000800;
2092pub const SDC_FORCE_MODE_ENUMERATION: DWORD = 0x00001000;
2093pub const SDC_ALLOW_PATH_ORDER_CHANGES: DWORD = 0x00002000;
2094pub const SDC_VIRTUAL_MODE_AWARE: DWORD = 0x00008000;
2095pub const RDH_RECTANGLES: DWORD = 1;
2096STRUCT!{struct RGNDATAHEADER {
2097    dwSize: DWORD,
2098    iType: DWORD,
2099    nCount: DWORD,
2100    nRgnSize: DWORD,
2101    rcBound: RECT,
2102}}
2103pub type PRGNDATAHEADER = *mut RGNDATAHEADER;
2104STRUCT!{struct RGNDATA {
2105    rdh: RGNDATAHEADER,
2106    Buffer: [c_char; 1],
2107}}
2108pub type PRGNDATA = *mut RGNDATA;
2109pub type NPRGNDATA = *mut RGNDATA;
2110pub type LPRGNDATA = *mut RGNDATA;
2111pub const SYSRGN: INT = 4;
2112STRUCT!{struct ABC {
2113    abcA: c_int,
2114    abcB: UINT,
2115    abcC: c_int,
2116}}
2117pub type PABC = *mut ABC;
2118pub type NPABC = *mut ABC;
2119pub type LPABC = *mut ABC;
2120STRUCT!{struct ABCFLOAT {
2121    abcfA: FLOAT,
2122    abcfB: FLOAT,
2123    abcfC: FLOAT,
2124}}
2125pub type PABCFLOAT = *mut ABCFLOAT;
2126pub type NPABCFLOAT = *mut ABCFLOAT;
2127pub type LPABCFLOAT = *mut ABCFLOAT;
2128STRUCT!{struct OUTLINETEXTMETRICA {
2129    otmSize: UINT,
2130    otmTextMetrics: TEXTMETRICA,
2131    otmFiller: BYTE,
2132    otmPanoseNumber: PANOSE,
2133    otmfsSelection: UINT,
2134    otmfsType: UINT,
2135    otmsCharSlopeRise: c_int,
2136    otmsCharSlopeRun: c_int,
2137    otmItalicAngle: c_int,
2138    otmEMSquare: UINT,
2139    otmAscent: c_int,
2140    otmDescent: c_int,
2141    otmLineGap: UINT,
2142    otmsCapEmHeight: UINT,
2143    otmsXHeight: UINT,
2144    otmrcFontBox: RECT,
2145    otmMacAscent: c_int,
2146    otmMacDescent: c_int,
2147    otmMacLineGap: UINT,
2148    otmusMinimumPPEM: UINT,
2149    otmptSubscriptSize: POINT,
2150    otmptSubscriptOffset: POINT,
2151    otmptSuperscriptSize: POINT,
2152    otmptSuperscriptOffset: POINT,
2153    otmsStrikeoutSize: UINT,
2154    otmsStrikeoutPosition: c_int,
2155    otmsUnderscoreSize: c_int,
2156    otmsUnderscorePosition: c_int,
2157    otmpFamilyName: PSTR,
2158    otmpFaceName: PSTR,
2159    otmpStyleName: PSTR,
2160    otmpFullName: PSTR,
2161}}
2162pub type POUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
2163pub type NPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
2164pub type LPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
2165STRUCT!{struct OUTLINETEXTMETRICW {
2166    otmSize: UINT,
2167    otmTextMetrics: TEXTMETRICW,
2168    otmFiller: BYTE,
2169    otmPanoseNumber: PANOSE,
2170    otmfsSelection: UINT,
2171    otmfsType: UINT,
2172    otmsCharSlopeRise: c_int,
2173    otmsCharSlopeRun: c_int,
2174    otmItalicAngle: c_int,
2175    otmEMSquare: UINT,
2176    otmAscent: c_int,
2177    otmDescent: c_int,
2178    otmLineGap: UINT,
2179    otmsCapEmHeight: UINT,
2180    otmsXHeight: UINT,
2181    otmrcFontBox: RECT,
2182    otmMacAscent: c_int,
2183    otmMacDescent: c_int,
2184    otmMacLineGap: UINT,
2185    otmusMinimumPPEM: UINT,
2186    otmptSubscriptSize: POINT,
2187    otmptSubscriptOffset: POINT,
2188    otmptSuperscriptSize: POINT,
2189    otmptSuperscriptOffset: POINT,
2190    otmsStrikeoutSize: UINT,
2191    otmsStrikeoutPosition: c_int,
2192    otmsUnderscoreSize: c_int,
2193    otmsUnderscorePosition: c_int,
2194    otmpFamilyName: PSTR,
2195    otmpFaceName: PSTR,
2196    otmpStyleName: PSTR,
2197    otmpFullName: PSTR,
2198}}
2199pub type POUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
2200pub type NPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
2201pub type LPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
2202STRUCT!{struct POLYTEXTA {
2203    x: c_int,
2204    y: c_int,
2205    n: UINT,
2206    lpstr: LPCSTR,
2207    uiFlags: UINT,
2208    rcl: RECT,
2209    pdx: *mut c_int,
2210}}
2211pub type PPOLYTEXTA = *mut POLYTEXTA;
2212pub type NPPOLYTEXTA = *mut POLYTEXTA;
2213pub type LPPOLYTEXTA = *mut POLYTEXTA;
2214STRUCT!{struct POLYTEXTW {
2215    x: c_int,
2216    y: c_int,
2217    n: UINT,
2218    lpstr: LPCWSTR,
2219    uiFlags: UINT,
2220    rcl: RECT,
2221    pdx: *mut c_int,
2222}}
2223pub type PPOLYTEXTW = *mut POLYTEXTW;
2224pub type NPPOLYTEXTW = *mut POLYTEXTW;
2225pub type LPPOLYTEXTW = *mut POLYTEXTW;
2226STRUCT!{struct FIXED {
2227    fract: WORD,
2228    value: c_short,
2229}}
2230STRUCT!{struct MAT2 {
2231    eM11: FIXED,
2232    eM12: FIXED,
2233    eM21: FIXED,
2234    eM22: FIXED,
2235}}
2236pub type LPMAT2 = *mut MAT2;
2237STRUCT!{struct GLYPHMETRICS {
2238    gmBlackBoxX: UINT,
2239    gmBlackBoxY: UINT,
2240    gmptGlyphOrigin: POINT,
2241    gmCellIncX: c_short,
2242    gmCellIncY: c_short,
2243}}
2244pub type LPGLYPHMETRICS = *mut GLYPHMETRICS;
2245pub const GGO_METRICS: DWORD = 0;
2246pub const GGO_BITMAP: DWORD = 1;
2247pub const GGO_NATIVE: DWORD = 2;
2248pub const GGO_BEZIER: DWORD = 3;
2249pub const GGO_GRAY2_BITMAP: DWORD = 4;
2250pub const GGO_GRAY4_BITMAP: DWORD = 5;
2251pub const GGO_GRAY8_BITMAP: DWORD = 6;
2252pub const GGO_GLYPH_INDEX: DWORD = 0x0080;
2253pub const GGO_UNHINTED: DWORD = 0x0100;
2254pub const TT_POLYGON_TYPE: DWORD = 24;
2255pub const TT_PRIM_LINE: DWORD = 1;
2256pub const TT_PRIM_QSPLINE: DWORD = 2;
2257pub const TT_PRIM_CSPLINE: DWORD = 3;
2258STRUCT!{struct POINTFX {
2259    x: FIXED,
2260    y: FIXED,
2261}}
2262pub type LPPOINTFX = *mut POINTFX;
2263STRUCT!{struct TTPOLYCURVE {
2264    wType: WORD,
2265    cpfx: WORD,
2266    apfx: [POINTFX; 1],
2267}}
2268pub type LPTTPOLYCURVE = *mut TTPOLYCURVE;
2269STRUCT!{struct TTPOLYGONHEADER {
2270    cb: DWORD,
2271    dwType: DWORD,
2272    pfxStart: POINTFX,
2273}}
2274pub type LPTTPOLYGONHEADER = *mut TTPOLYGONHEADER;
2275pub const GCP_DBCS: DWORD = 0x0001;
2276pub const GCP_REORDER: DWORD = 0x0002;
2277pub const GCP_USEKERNING: DWORD = 0x0008;
2278pub const GCP_GLYPHSHAPE: DWORD = 0x0010;
2279pub const GCP_LIGATE: DWORD = 0x0020;
2280pub const GCP_DIACRITIC: DWORD = 0x0100;
2281pub const GCP_KASHIDA: DWORD = 0x0400;
2282pub const GCP_ERROR: DWORD = 0x8000;
2283pub const FLI_MASK: DWORD = 0x103B;
2284pub const GCP_JUSTIFY: DWORD = 0x00010000;
2285pub const FLI_GLYPHS: DWORD = 0x00040000;
2286pub const GCP_CLASSIN: DWORD = 0x00080000;
2287pub const GCP_MAXEXTENT: DWORD = 0x00100000;
2288pub const GCP_JUSTIFYIN: DWORD = 0x00200000;
2289pub const GCP_DISPLAYZWG: DWORD = 0x00400000;
2290pub const GCP_SYMSWAPOFF: DWORD = 0x00800000;
2291pub const GCP_NUMERICOVERRIDE: DWORD = 0x01000000;
2292pub const GCP_NEUTRALOVERRIDE: DWORD = 0x02000000;
2293pub const GCP_NUMERICSLATIN: DWORD = 0x04000000;
2294pub const GCP_NUMERICSLOCAL: DWORD = 0x08000000;
2295pub const GCPCLASS_LATIN: DWORD = 1;
2296pub const GCPCLASS_HEBREW: DWORD = 2;
2297pub const GCPCLASS_ARABIC: DWORD = 2;
2298pub const GCPCLASS_NEUTRAL: DWORD = 3;
2299pub const GCPCLASS_LOCALNUMBER: DWORD = 4;
2300pub const GCPCLASS_LATINNUMBER: DWORD = 5;
2301pub const GCPCLASS_LATINNUMERICTERMINATOR: DWORD = 6;
2302pub const GCPCLASS_LATINNUMERICSEPARATOR: DWORD = 7;
2303pub const GCPCLASS_NUMERICSEPARATOR: DWORD = 8;
2304pub const GCPCLASS_PREBOUNDLTR: DWORD = 0x80;
2305pub const GCPCLASS_PREBOUNDRTL: DWORD = 0x40;
2306pub const GCPCLASS_POSTBOUNDLTR: DWORD = 0x20;
2307pub const GCPCLASS_POSTBOUNDRTL: DWORD = 0x10;
2308pub const GCPGLYPH_LINKBEFORE: DWORD = 0x8000;
2309pub const GCPGLYPH_LINKAFTER: DWORD = 0x4000;
2310STRUCT!{struct GCP_RESULTSA {
2311    lStructSize: DWORD,
2312    lpOutString: LPSTR,
2313    lpOrder: *mut UINT,
2314    lpDx: *mut c_int,
2315    lpCaretPos: *mut c_int,
2316    lpClass: LPSTR,
2317    lpGlyphs: LPWSTR,
2318    nGlyphs: UINT,
2319    nMaxFit: c_int,
2320}}
2321pub type LPGCP_RESULTSA = *mut GCP_RESULTSA;
2322STRUCT!{struct GCP_RESULTSW {
2323    lStructSize: DWORD,
2324    lpOutString: LPWSTR,
2325    lpOrder: *mut UINT,
2326    lpDx: *mut c_int,
2327    lpCaretPos: *mut c_int,
2328    lpClass: LPSTR,
2329    lpGlyphs: LPWSTR,
2330    nGlyphs: UINT,
2331    nMaxFit: c_int,
2332}}
2333pub type LPGCP_RESULTSW = *mut GCP_RESULTSW;
2334STRUCT!{struct RASTERIZER_STATUS {
2335    nSize: c_short,
2336    wFlags: c_short,
2337    nLanguageID: c_short,
2338}}
2339pub type LPRASTERIZER_STATUS = *mut RASTERIZER_STATUS;
2340pub const TT_AVAILABLE: DWORD = 0x0001;
2341pub const TT_ENABLED: DWORD = 0x0002;
2342STRUCT!{struct PIXELFORMATDESCRIPTOR {
2343    nSize: WORD,
2344    nVersion: WORD,
2345    dwFlags: DWORD,
2346    iPixelType: BYTE,
2347    cColorBits: BYTE,
2348    cRedBits: BYTE,
2349    cRedShift: BYTE,
2350    cGreenBits: BYTE,
2351    cGreenShift: BYTE,
2352    cBlueBits: BYTE,
2353    cBlueShift: BYTE,
2354    cAlphaBits: BYTE,
2355    cAlphaShift: BYTE,
2356    cAccumBits: BYTE,
2357    cAccumRedBits: BYTE,
2358    cAccumGreenBits: BYTE,
2359    cAccumBlueBits: BYTE,
2360    cAccumAlphaBits: BYTE,
2361    cDepthBits: BYTE,
2362    cStencilBits: BYTE,
2363    cAuxBuffers: BYTE,
2364    iLayerType: BYTE,
2365    bReserved: BYTE,
2366    dwLayerMask: DWORD,
2367    dwVisibleMask: DWORD,
2368    dwDamageMask: DWORD,
2369}}
2370pub type PPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR;
2371pub type LPPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR;
2372pub const PFD_TYPE_RGBA: BYTE = 0;
2373pub const PFD_TYPE_COLORINDEX: BYTE = 1;
2374pub const PFD_MAIN_PLANE: BYTE = 0;
2375pub const PFD_OVERLAY_PLANE: BYTE = 1;
2376pub const PFD_UNDERLAY_PLANE: BYTE = -1i8 as u8;
2377pub const PFD_DOUBLEBUFFER: DWORD = 0x00000001;
2378pub const PFD_STEREO: DWORD = 0x00000002;
2379pub const PFD_DRAW_TO_WINDOW: DWORD = 0x00000004;
2380pub const PFD_DRAW_TO_BITMAP: DWORD = 0x00000008;
2381pub const PFD_SUPPORT_GDI: DWORD = 0x00000010;
2382pub const PFD_SUPPORT_OPENGL: DWORD = 0x00000020;
2383pub const PFD_GENERIC_FORMAT: DWORD = 0x00000040;
2384pub const PFD_NEED_PALETTE: DWORD = 0x00000080;
2385pub const PFD_NEED_SYSTEM_PALETTE: DWORD = 0x00000100;
2386pub const PFD_SWAP_EXCHANGE: DWORD = 0x00000200;
2387pub const PFD_SWAP_COPY: DWORD = 0x00000400;
2388pub const PFD_SWAP_LAYER_BUFFERS: DWORD = 0x00000800;
2389pub const PFD_GENERIC_ACCELERATED: DWORD = 0x00001000;
2390pub const PFD_SUPPORT_DIRECTDRAW: DWORD = 0x00002000;
2391pub const PFD_DIRECT3D_ACCELERATED: DWORD = 0x00004000;
2392pub const PFD_SUPPORT_COMPOSITION: DWORD = 0x00008000;
2393pub const PFD_DEPTH_DONTCARE: DWORD = 0x20000000;
2394pub const PFD_DOUBLEBUFFER_DONTCARE: DWORD = 0x40000000;
2395pub const PFD_STEREO_DONTCARE: DWORD = 0x80000000;
2396FN!{stdcall OLDFONTENUMPROCA(
2397    *const LOGFONTA,
2398    *const TEXTMETRICA,
2399    DWORD,
2400    LPARAM,
2401) -> c_int}
2402FN!{stdcall OLDFONTENUMPROCW(
2403    *const LOGFONTW,
2404    *const TEXTMETRICW,
2405    DWORD,
2406    LPARAM,
2407) -> c_int}
2408pub type FONTENUMPROCA = OLDFONTENUMPROCA;
2409pub type FONTENUMPROCW = OLDFONTENUMPROCW;
2410FN!{stdcall GOBJENUMPROC(
2411    LPVOID,
2412    LPARAM,
2413) -> c_int}
2414FN!{stdcall LINEDDAPROC(
2415    c_int,
2416    c_int,
2417    LPARAM,
2418) -> ()}
2419extern "system" {
2420    pub fn AddFontResourceA(
2421        _: LPCSTR,
2422    ) -> c_int;
2423    pub fn AddFontResourceW(
2424        _: LPCWSTR,
2425    ) -> c_int;
2426    pub fn AnimatePalette(
2427        hPal: HPALETTE,
2428        iStartIndex: UINT,
2429        cEntries: UINT,
2430        ppe: *const PALETTEENTRY,
2431    ) -> BOOL;
2432    pub fn Arc(
2433        hdc: HDC,
2434        x1: c_int,
2435        y1: c_int,
2436        x2: c_int,
2437        y2: c_int,
2438        x3: c_int,
2439        y3: c_int,
2440        x4: c_int,
2441        y4: c_int,
2442    ) -> BOOL;
2443    pub fn BitBlt(
2444        hdc: HDC,
2445        x: c_int,
2446        y: c_int,
2447        cx: c_int,
2448        cy: c_int,
2449        hdcSrc: HDC,
2450        x1: c_int,
2451        y1: c_int,
2452        rop: DWORD,
2453    ) -> BOOL;
2454    pub fn CancelDC(
2455        hdc: HDC,
2456    ) -> BOOL;
2457    pub fn Chord(
2458        hdc: HDC,
2459        x1: c_int,
2460        y1: c_int,
2461        x2: c_int,
2462        y2: c_int,
2463        x3: c_int,
2464        y3: c_int,
2465        x4: c_int,
2466        y4: c_int,
2467    ) -> BOOL;
2468    pub fn ChoosePixelFormat(
2469        hdc: HDC,
2470        ppfd: *const PIXELFORMATDESCRIPTOR,
2471    ) -> c_int;
2472    pub fn CloseMetaFile(
2473        hdc: HDC,
2474    ) -> HMETAFILE;
2475    pub fn CombineRgn(
2476        hrgnDst: HRGN,
2477        hrgnSrc1: HRGN,
2478        hrgnSrc2: HRGN,
2479        iMode: c_int,
2480    ) -> c_int;
2481    pub fn CopyMetaFileA(
2482        _: HMETAFILE,
2483        _: LPCSTR,
2484    ) -> HMETAFILE;
2485    pub fn CopyMetaFileW(
2486        _: HMETAFILE,
2487        _: LPCWSTR,
2488    ) -> HMETAFILE;
2489    pub fn CreateBitmap(
2490        nWidth: c_int,
2491        nHeight: c_int,
2492        nPlanes: UINT,
2493        nBitCount: UINT,
2494        lpBits: *const c_void,
2495    ) -> HBITMAP;
2496    pub fn CreateBitmapIndirect(
2497        pbm: *const BITMAP,
2498    ) -> HBITMAP;
2499    pub fn CreateBrushIndirect(
2500        plbrush: *const LOGBRUSH,
2501    ) -> HBRUSH;
2502    pub fn CreateCompatibleBitmap(
2503        hdc: HDC,
2504        cx: c_int,
2505        cy: c_int,
2506    ) -> HBITMAP;
2507    pub fn CreateDiscardableBitmap(
2508        hdc: HDC,
2509        cx: c_int,
2510        cy: c_int,
2511    ) -> HBITMAP;
2512    pub fn CreateCompatibleDC(
2513        hdc: HDC,
2514    ) -> HDC;
2515    pub fn CreateDCA(
2516        pwszDriver: LPCSTR,
2517        pwszDevice: LPCSTR,
2518        pszPort: LPCSTR,
2519        pdm: *const DEVMODEA,
2520    ) -> HDC;
2521    pub fn CreateDCW(
2522        pwszDriver: LPCWSTR,
2523        pwszDevice: LPCWSTR,
2524        pszPort: LPCWSTR,
2525        pdm: *const DEVMODEW,
2526    ) -> HDC;
2527    pub fn CreateDIBitmap(
2528        hdc: HDC,
2529        pbmih: *const BITMAPINFOHEADER,
2530        flInit: DWORD,
2531        pjBits: *const c_void,
2532        pbmi: *const BITMAPINFO,
2533        iUsage: UINT,
2534    ) -> HBITMAP;
2535    pub fn CreateDIBPatternBrush(
2536        h: HGLOBAL,
2537        iUsage: UINT,
2538    ) -> HBRUSH;
2539    pub fn CreateDIBPatternBrushPt(
2540        lpPackedDIB: *const c_void,
2541        iUsage: UINT,
2542    ) -> HBRUSH;
2543    pub fn CreateEllipticRgn(
2544        x1: c_int,
2545        y1: c_int,
2546        x2: c_int,
2547        y2: c_int,
2548    ) -> HRGN;
2549    pub fn CreateEllipticRgnIndirect(
2550        lprect: *const RECT,
2551    ) -> HRGN;
2552    pub fn CreateFontIndirectA(
2553        lplf: *const LOGFONTA,
2554    ) -> HFONT;
2555    pub fn CreateFontIndirectW(
2556        lplf: *const LOGFONTW,
2557    ) -> HFONT;
2558    pub fn CreateFontA(
2559        cHeight: c_int,
2560        cWidth: c_int,
2561        cEscapement: c_int,
2562        cOrientation: c_int,
2563        cWeight: c_int,
2564        bItalic: DWORD,
2565        bUnderline: DWORD,
2566        bStrikeOut: DWORD,
2567        iCharSet: DWORD,
2568        iOutPrecision: DWORD,
2569        iClipPrecision: DWORD,
2570        iQuality: DWORD,
2571        iPitchAndFamily: DWORD,
2572        pszFaceName: LPCSTR,
2573    ) -> HFONT;
2574    pub fn CreateFontW(
2575        cHeight: c_int,
2576        cWidth: c_int,
2577        cEscapement: c_int,
2578        cOrientation: c_int,
2579        cWeight: c_int,
2580        bItalic: DWORD,
2581        bUnderline: DWORD,
2582        bStrikeOut: DWORD,
2583        iCharSet: DWORD,
2584        iOutPrecision: DWORD,
2585        iClipPrecision: DWORD,
2586        iQuality: DWORD,
2587        iPitchAndFamily: DWORD,
2588        pszFaceName: LPCWSTR,
2589    ) -> HFONT;
2590    pub fn CreateHatchBrush(
2591        iHatch: c_int,
2592        color: COLORREF,
2593    ) -> HBRUSH;
2594    pub fn CreateICA(
2595        pszDriver: LPCSTR,
2596        pszDevice: LPCSTR,
2597        pszPort: LPCSTR,
2598        pdm: *const DEVMODEA,
2599    ) -> HDC;
2600    pub fn CreateICW(
2601        pszDriver: LPCWSTR,
2602        pszDevice: LPCWSTR,
2603        pszPort: LPCWSTR,
2604        pdm: *const DEVMODEW,
2605    ) -> HDC;
2606    pub fn CreateMetaFileA(
2607        pszFile: LPCSTR,
2608    ) -> HDC;
2609    pub fn CreateMetaFileW(
2610        pszFile: LPCWSTR,
2611    ) -> HDC;
2612    pub fn CreatePalette(
2613        plpal: *const LOGPALETTE,
2614    ) -> HPALETTE;
2615    pub fn CreatePen(
2616        iStyle: c_int,
2617        cWidth: c_int,
2618        color: COLORREF,
2619    ) -> HPEN;
2620    pub fn CreatePenIndirect(
2621        plpen: *const LOGPEN,
2622    ) -> HPEN;
2623    pub fn CreatePolyPolygonRgn(
2624        pptl: *const POINT,
2625        pc: *const INT,
2626        cPoly: c_int,
2627        iMode: c_int,
2628    ) -> HRGN;
2629    pub fn CreatePatternBrush(
2630        hbm: HBITMAP,
2631    ) -> HBRUSH;
2632    pub fn CreateRectRgn(
2633        x1: c_int,
2634        y1: c_int,
2635        x2: c_int,
2636        y2: c_int,
2637    ) -> HRGN;
2638    pub fn CreateRectRgnIndirect(
2639        lprect: *const RECT,
2640    ) -> HRGN;
2641    pub fn CreateRoundRectRgn(
2642        x1: c_int,
2643        y1: c_int,
2644        x2: c_int,
2645        y2: c_int,
2646        w: c_int,
2647        h: c_int,
2648    ) -> HRGN;
2649    pub fn CreateScalableFontResourceA(
2650        fdwHidden: DWORD,
2651        lpszFont: LPCSTR,
2652        lpszFile: LPCSTR,
2653        lpszPath: LPCSTR,
2654    ) -> BOOL;
2655    pub fn CreateScalableFontResourceW(
2656        fdwHidden: DWORD,
2657        lpszFont: LPCWSTR,
2658        lpszFile: LPCWSTR,
2659        lpszPath: LPCWSTR,
2660    ) -> BOOL;
2661    pub fn CreateSolidBrush(
2662        color: COLORREF,
2663    ) -> HBRUSH;
2664    pub fn DeleteDC(
2665        hdc: HDC,
2666    ) -> BOOL;
2667    pub fn DeleteMetaFile(
2668        hmf: HMETAFILE,
2669    ) -> BOOL;
2670    pub fn DeleteObject(
2671        ho: HGDIOBJ,
2672    ) -> BOOL;
2673    pub fn DescribePixelFormat(
2674        hdc: HDC,
2675        iPixelFormat: c_int,
2676        nBytes: UINT,
2677        ppfd: LPPIXELFORMATDESCRIPTOR,
2678    ) -> c_int;
2679}
2680FN!{stdcall LPFNDEVMODE(
2681    HWND,
2682    HMODULE,
2683    LPDEVMODEA,
2684    LPSTR,
2685    LPSTR,
2686    LPDEVMODEA,
2687    LPSTR,
2688    UINT,
2689) -> UINT}
2690FN!{stdcall LPFNDEVCAPS(
2691    LPSTR,
2692    LPSTR,
2693    UINT,
2694    LPSTR,
2695    LPDEVMODEA,
2696) -> DWORD}
2697pub const DM_UPDATE: DWORD = 1;
2698pub const DM_COPY: DWORD = 2;
2699pub const DM_PROMPT: DWORD = 4;
2700pub const DM_MODIFY: DWORD = 8;
2701pub const DM_IN_BUFFER: DWORD = DM_MODIFY;
2702pub const DM_IN_PROMPT: DWORD = DM_PROMPT;
2703pub const DM_OUT_BUFFER: DWORD = DM_COPY;
2704pub const DM_OUT_DEFAULT: DWORD = DM_UPDATE;
2705pub const DC_FIELDS: WORD = 1;
2706pub const DC_PAPERS: WORD = 2;
2707pub const DC_PAPERSIZE: WORD = 3;
2708pub const DC_MINEXTENT: WORD = 4;
2709pub const DC_MAXEXTENT: WORD = 5;
2710pub const DC_BINS: WORD = 6;
2711pub const DC_DUPLEX: WORD = 7;
2712pub const DC_SIZE: WORD = 8;
2713pub const DC_EXTRA: WORD = 9;
2714pub const DC_VERSION: WORD = 10;
2715pub const DC_DRIVER: WORD = 11;
2716pub const DC_BINNAMES: WORD = 12;
2717pub const DC_ENUMRESOLUTIONS: WORD = 13;
2718pub const DC_FILEDEPENDENCIES: WORD = 14;
2719pub const DC_TRUETYPE: WORD = 15;
2720pub const DC_PAPERNAMES: WORD = 16;
2721pub const DC_ORIENTATION: WORD = 17;
2722pub const DC_COPIES: WORD = 18;
2723pub const DC_BINADJUST: WORD = 19;
2724pub const DC_EMF_COMPLIANT: WORD = 20;
2725pub const DC_DATATYPE_PRODUCED: WORD = 21;
2726pub const DC_COLLATE: WORD = 22;
2727pub const DC_MANUFACTURER: WORD = 23;
2728pub const DC_MODEL: WORD = 24;
2729pub const DC_PERSONALITY: WORD = 25;
2730pub const DC_PRINTRATE: WORD = 26;
2731pub const DC_PRINTRATEUNIT: WORD = 27;
2732pub const PRINTRATEUNIT_PPM: WORD = 1;
2733pub const PRINTRATEUNIT_CPS: WORD = 2;
2734pub const PRINTRATEUNIT_LPM: WORD = 3;
2735pub const PRINTRATEUNIT_IPM: WORD = 4;
2736pub const DC_PRINTERMEM: WORD = 28;
2737pub const DC_MEDIAREADY: WORD = 29;
2738pub const DC_STAPLE: WORD = 30;
2739pub const DC_PRINTRATEPPM: WORD = 31;
2740pub const DC_COLORDEVICE: WORD = 32;
2741pub const DC_NUP: WORD = 33;
2742pub const DC_MEDIATYPENAMES: WORD = 34;
2743pub const DC_MEDIATYPES: WORD = 35;
2744pub const DCTT_BITMAP: DWORD = 0x0000001;
2745pub const DCTT_DOWNLOAD: DWORD = 0x0000002;
2746pub const DCTT_SUBDEV: DWORD = 0x0000004;
2747pub const DCTT_DOWNLOAD_OUTLINE: DWORD = 0x0000008;
2748pub const DCBA_FACEUPNONE: DWORD = 0x0000;
2749pub const DCBA_FACEUPCENTER: DWORD = 0x0001;
2750pub const DCBA_FACEUPLEFT: DWORD = 0x0002;
2751pub const DCBA_FACEUPRIGHT: DWORD = 0x0003;
2752pub const DCBA_FACEDOWNNONE: DWORD = 0x0100;
2753pub const DCBA_FACEDOWNCENTER: DWORD = 0x0101;
2754pub const DCBA_FACEDOWNLEFT: DWORD = 0x0102;
2755pub const DCBA_FACEDOWNRIGHT: DWORD = 0x0103;
2756extern "system" {
2757    pub fn DeviceCapabilitiesA(
2758        pDevice: LPCSTR,
2759        pPort: LPCSTR,
2760        fwCapability: WORD,
2761        pOutput: LPSTR,
2762        pDevMode: *const DEVMODEA,
2763    ) -> c_int;
2764    pub fn DeviceCapabilitiesW(
2765        pDevice: LPCWSTR,
2766        pPort: LPCWSTR,
2767        fwCapability: WORD,
2768        pOutput: LPWSTR,
2769        pDevMode: *const DEVMODEW,
2770    ) -> c_int;
2771    pub fn DrawEscape(
2772        hdc: HDC,
2773        iEscape: c_int,
2774        cjIn: c_int,
2775        lpIn: LPCSTR,
2776    ) -> c_int;
2777    pub fn Ellipse(
2778        hdc: HDC,
2779        left: c_int,
2780        top: c_int,
2781        right: c_int,
2782        bottom: c_int,
2783    ) -> BOOL;
2784    pub fn EnumFontFamiliesExA(
2785        hdc: HDC,
2786        lpLogfont: LPLOGFONTA,
2787        lpProc: FONTENUMPROCA,
2788        lParam: LPARAM,
2789        dwFlags: DWORD,
2790    ) -> c_int;
2791    pub fn EnumFontFamiliesExW(
2792        hdc: HDC,
2793        lpLogfont: LPLOGFONTW,
2794        lpProc: FONTENUMPROCW,
2795        lParam: LPARAM,
2796        dwFlags: DWORD,
2797    ) -> c_int;
2798    pub fn EnumFontFamiliesA(
2799        hdc: HDC,
2800        lpLogfont: LPCSTR,
2801        lpProc: FONTENUMPROCA,
2802        lParam: LPARAM,
2803    ) -> c_int;
2804    pub fn EnumFontFamiliesW(
2805        hdc: HDC,
2806        lpLogfont: LPCWSTR,
2807        lpProc: FONTENUMPROCW,
2808        lParam: LPARAM,
2809    ) -> c_int;
2810    pub fn EnumFontsA(
2811        hdc: HDC,
2812        lpLogfont: LPCSTR,
2813        lpProc: FONTENUMPROCA,
2814        lParam: LPARAM,
2815    ) -> c_int;
2816    pub fn EnumFontsW(
2817        hdc: HDC,
2818        lpLogfont: LPCWSTR,
2819        lpProc: FONTENUMPROCW,
2820        lParam: LPARAM,
2821    ) -> c_int;
2822    pub fn EnumObjects(
2823        hdc: HDC,
2824        nType: c_int,
2825        lpFunc: GOBJENUMPROC,
2826        lParam: LPARAM,
2827    ) -> c_int;
2828    pub fn EqualRgn(
2829        hrgn1: HRGN,
2830        hrgn2: HRGN,
2831    ) -> BOOL;
2832    pub fn Escape(
2833        hdc: HDC,
2834        iEscape: c_int,
2835        cjIn: c_int,
2836        pvIn: LPCSTR,
2837        pvOut: LPVOID,
2838    ) -> c_int;
2839    pub fn ExtEscape(
2840        hdc: HDC,
2841        iEscape: c_int,
2842        cjInput: c_int,
2843        lpInData: LPCSTR,
2844        cjOutput: c_int,
2845        lpOutData: LPSTR,
2846    ) -> c_int;
2847    pub fn ExcludeClipRect(
2848        hdc: HDC,
2849        left: c_int,
2850        top: c_int,
2851        right: c_int,
2852        bottom: c_int,
2853    ) -> c_int;
2854    pub fn ExtCreateRegion(
2855        lpx: *const XFORM,
2856        nCount: DWORD,
2857        lpData: *const RGNDATA,
2858    ) -> HRGN;
2859    pub fn ExtFloodFill(
2860        hdc: HDC,
2861        x: c_int,
2862        y: c_int,
2863        color: COLORREF,
2864        utype: UINT,
2865    ) -> BOOL;
2866    pub fn FillRgn(
2867        hdc: HDC,
2868        hrgn: HRGN,
2869        hbr: HBRUSH,
2870    ) -> BOOL;
2871    pub fn FloodFill(
2872        hdc: HDC,
2873        x: c_int,
2874        y: c_int,
2875        color: COLORREF,
2876    ) -> BOOL;
2877    pub fn FrameRgn(
2878        hdc: HDC,
2879        hrgn: HRGN,
2880        hbr: HBRUSH,
2881        w: c_int,
2882        h: c_int,
2883    ) -> BOOL;
2884    pub fn GetROP2(
2885        hdc: HDC,
2886    ) -> c_int;
2887    pub fn GetAspectRatioFilterEx(
2888        hdc: HDC,
2889        lpsize: LPSIZE,
2890    ) -> BOOL;
2891    pub fn GetBkColor(
2892        hdc: HDC,
2893    ) -> COLORREF;
2894    pub fn GetDCBrushColor(
2895        hdc: HDC,
2896    ) -> COLORREF;
2897    pub fn GetDCPenColor(
2898        hdc: HDC,
2899    ) -> COLORREF;
2900    pub fn GetBkMode(
2901        hdc: HDC,
2902    ) -> c_int;
2903    pub fn GetBitmapBits(
2904        hbit: HBITMAP,
2905        cb: LONG,
2906        lpvBits: LPVOID,
2907    ) -> LONG;
2908    pub fn GetBitmapDimensionEx(
2909        hbit: HBITMAP,
2910        lpsize: LPSIZE,
2911    ) -> BOOL;
2912    pub fn GetBoundsRect(
2913        hdc: HDC,
2914        lprect: LPRECT,
2915        flags: UINT,
2916    ) -> UINT;
2917    pub fn GetBrushOrgEx(
2918        hdc: HDC,
2919        lppt: LPPOINT,
2920    ) -> BOOL;
2921    pub fn GetCharWidthA(
2922        hdc: HDC,
2923        iFirst: UINT,
2924        iLast: UINT,
2925        lpBuffer: LPINT,
2926    ) -> BOOL;
2927    pub fn GetCharWidthW(
2928        hdc: HDC,
2929        iFirst: UINT,
2930        iLast: UINT,
2931        lpBuffer: LPINT,
2932    ) -> BOOL;
2933    pub fn GetCharWidth32A(
2934        hdc: HDC,
2935        iFirst: UINT,
2936        iLast: UINT,
2937        lpBuffer: LPINT,
2938    ) -> BOOL;
2939    pub fn GetCharWidth32W(
2940        hdc: HDC,
2941        iFirst: UINT,
2942        iLast: UINT,
2943        lpBuffer: LPINT,
2944    ) -> BOOL;
2945    pub fn GetCharWidthFloatA(
2946        hdc: HDC,
2947        iFirst: UINT,
2948        iLast: UINT,
2949        lpBuffer: PFLOAT,
2950    ) -> BOOL;
2951    pub fn GetCharWidthFloatW(
2952        hdc: HDC,
2953        iFirst: UINT,
2954        iLast: UINT,
2955        lpBuffer: PFLOAT,
2956    ) -> BOOL;
2957    pub fn GetCharABCWidthsA(
2958        hdc: HDC,
2959        wFirst: UINT,
2960        wLast: UINT,
2961        lpABC: LPABC,
2962    ) -> BOOL;
2963    pub fn GetCharABCWidthsW(
2964        hdc: HDC,
2965        wFirst: UINT,
2966        wLast: UINT,
2967        lpABC: LPABC,
2968    ) -> BOOL;
2969    pub fn GetCharABCWidthsFloatA(
2970        hdc: HDC,
2971        iFirst: UINT,
2972        iLast: UINT,
2973        lpABC: LPABCFLOAT,
2974    ) -> BOOL;
2975    pub fn GetCharABCWidthsFloatW(
2976        hdc: HDC,
2977        iFirst: UINT,
2978        iLast: UINT,
2979        lpABC: LPABCFLOAT,
2980    ) -> BOOL;
2981    pub fn GetClipBox(
2982        hdc: HDC,
2983        lprect: LPRECT,
2984    ) -> c_int;
2985    pub fn GetClipRgn(
2986        hdc: HDC,
2987        hrgn: HRGN,
2988    ) -> c_int;
2989    pub fn GetMetaRgn(
2990        hdc: HDC,
2991        hrgn: HRGN,
2992    ) -> c_int;
2993    pub fn GetCurrentObject(
2994        hdc: HDC,
2995        tp: UINT,
2996    ) -> HGDIOBJ;
2997    pub fn GetCurrentPositionEx(
2998        hdc: HDC,
2999        lppt: LPPOINT,
3000    ) -> BOOL;
3001    pub fn GetDeviceCaps(
3002        hdc: HDC,
3003        nIndex: c_int,
3004    ) -> c_int;
3005    pub fn GetDIBits(
3006        hdc: HDC,
3007        hbm: HBITMAP,
3008        start: UINT,
3009        cLines: UINT,
3010        lpvBits: LPVOID,
3011        lpbmi: LPBITMAPINFO,
3012        usage: UINT,
3013    ) -> c_int;
3014    pub fn GetFontData(
3015        hdc: HDC,
3016        dwTable: DWORD,
3017        dwOffset: DWORD,
3018        pvBuffer: PVOID,
3019        cjBuffer: DWORD,
3020    ) -> DWORD;
3021    pub fn GetGlyphOutlineA(
3022        hdc: HDC,
3023        uChar: UINT,
3024        fuFormat: UINT,
3025        lpgm: LPGLYPHMETRICS,
3026        cjBuffer: DWORD,
3027        pvBuffer: LPVOID,
3028        lpmat2: *const MAT2,
3029    ) -> DWORD;
3030    pub fn GetGlyphOutlineW(
3031        hdc: HDC,
3032        uChar: UINT,
3033        fuFormat: UINT,
3034        lpgm: LPGLYPHMETRICS,
3035        cjBuffer: DWORD,
3036        pvBuffer: LPVOID,
3037        lpmat2: *const MAT2,
3038    ) -> DWORD;
3039    pub fn GetGraphicsMode(
3040        hdc: HDC,
3041    ) -> c_int;
3042    pub fn GetMapMode(
3043        hdc: HDC,
3044    ) -> c_int;
3045    pub fn GetMetaFileBitsEx(
3046        hMF: HMETAFILE,
3047        cbBuffer: UINT,
3048        lpData: LPVOID,
3049    ) -> UINT;
3050    pub fn GetMetaFileA(
3051        lpName: LPCSTR,
3052    ) -> HMETAFILE;
3053    pub fn GetMetaFileW(
3054        lpName: LPCWSTR,
3055    ) -> HMETAFILE;
3056    pub fn GetNearestColor(
3057        hdc: HDC,
3058        color: COLORREF,
3059    ) -> COLORREF;
3060    pub fn GetNearestPaletteIndex(
3061        h: HPALETTE,
3062        color: COLORREF,
3063    ) -> UINT;
3064    pub fn GetObjectType(
3065        h: HGDIOBJ,
3066    ) -> DWORD;
3067    pub fn GetOutlineTextMetricsA(
3068        hdc: HDC,
3069        cjCopy: UINT,
3070        potm: LPOUTLINETEXTMETRICA,
3071    ) -> UINT;
3072    pub fn GetOutlineTextMetricsW(
3073        hdc: HDC,
3074        cjCopy: UINT,
3075        potm: LPOUTLINETEXTMETRICW,
3076    ) -> UINT;
3077    pub fn GetPaletteEntries(
3078        hpal: HPALETTE,
3079        iStart: UINT,
3080        cEntries: UINT,
3081        pPalEntries: LPPALETTEENTRY,
3082    ) -> UINT;
3083    pub fn GetPixel(
3084        hdc: HDC,
3085        x: c_int,
3086        y: c_int,
3087    ) -> COLORREF;
3088    pub fn GetPixelFormat(
3089        hdc: HDC,
3090    ) -> c_int;
3091    pub fn GetPolyFillMode(
3092        hdc: HDC,
3093    ) -> c_int;
3094    pub fn GetRasterizerCaps(
3095        lpraststat: LPRASTERIZER_STATUS,
3096        cjBytes: UINT,
3097    ) -> BOOL;
3098    pub fn GetRandomRgn (
3099        hdc: HDC,
3100        hrgn: HRGN,
3101        i: INT,
3102    ) -> c_int;
3103    pub fn GetRegionData(
3104        hrgn: HRGN,
3105        nCount: DWORD,
3106        lpRgnData: LPRGNDATA,
3107    ) -> DWORD;
3108    pub fn GetRgnBox(
3109        hrgn: HRGN,
3110        lprc: LPRECT,
3111    ) -> c_int;
3112    pub fn GetStockObject(
3113        i: c_int,
3114    ) -> HGDIOBJ;
3115    pub fn GetStretchBltMode(
3116        hdc: HDC,
3117    ) -> c_int;
3118    pub fn GetSystemPaletteEntries(
3119        hdc: HDC,
3120        iStart: UINT,
3121        cEntries: UINT,
3122        pPalEntries: LPPALETTEENTRY,
3123    ) -> UINT;
3124    pub fn GetSystemPaletteUse(
3125        hdc: HDC,
3126    ) -> UINT;
3127    pub fn GetTextCharacterExtra(
3128        hdc: HDC,
3129    ) -> c_int;
3130    pub fn GetTextAlign(
3131        hdc: HDC,
3132    ) -> UINT;
3133    pub fn GetTextColor(
3134        hdc: HDC,
3135    ) -> COLORREF;
3136    pub fn GetTextExtentPointA(
3137        hdc: HDC,
3138        lpString: LPCSTR,
3139        c: c_int,
3140        lpsz: LPSIZE,
3141    ) -> BOOL;
3142    pub fn GetTextExtentPointW(
3143        hdc: HDC,
3144        lpString: LPCWSTR,
3145        c: c_int,
3146        lpsz: LPSIZE,
3147    ) -> BOOL;
3148    pub fn GetTextExtentPoint32A(
3149        hdc: HDC,
3150        lpString: LPCSTR,
3151        c: c_int,
3152        psizl: LPSIZE,
3153    ) -> BOOL;
3154    pub fn GetTextExtentPoint32W(
3155        hdc: HDC,
3156        lpString: LPCWSTR,
3157        c: c_int,
3158        psizl: LPSIZE,
3159    ) -> BOOL;
3160    pub fn GetTextExtentExPointA(
3161        hdc: HDC,
3162        lpszString: LPCSTR,
3163        cchString: c_int,
3164        nMaxExtent: c_int,
3165        lpnFit: LPINT,
3166        lpnDx: LPINT,
3167        lpSize: LPSIZE,
3168    ) -> BOOL;
3169    pub fn GetTextExtentExPointW(
3170        hdc: HDC,
3171        lpszString: LPCWSTR,
3172        cchString: c_int,
3173        nMaxExtent: c_int,
3174        lpnFit: LPINT,
3175        lpnDx: LPINT,
3176        lpSize: LPSIZE,
3177    ) -> BOOL;
3178    pub fn GetTextCharset(
3179        hdc: HDC,
3180    ) -> c_int;
3181    pub fn GetTextCharsetInfo(
3182        hdc: HDC,
3183        lpSig: LPFONTSIGNATURE,
3184        dwFlags: DWORD,
3185    ) -> c_int;
3186    pub fn TranslateCharsetInfo(
3187        lpSrc: *const DWORD,
3188        lpCs: LPCHARSETINFO,
3189        dwFlags: DWORD,
3190    ) -> BOOL;
3191    pub fn GetFontLanguageInfo(
3192        hdc: HDC,
3193    ) -> DWORD;
3194    pub fn GetCharacterPlacementA(
3195        hdc: HDC,
3196        lpString: LPCSTR,
3197        nCount: c_int,
3198        nMexExtent: c_int,
3199        lpResults: LPGCP_RESULTSA,
3200        dwFlags: DWORD,
3201    ) -> DWORD;
3202    pub fn GetCharacterPlacementW(
3203        hdc: HDC,
3204        lpString: LPCWSTR,
3205        nCount: c_int,
3206        nMexExtent: c_int,
3207        lpResults: LPGCP_RESULTSW,
3208        dwFlags: DWORD,
3209    ) -> DWORD;
3210}
3211STRUCT!{struct WCRANGE {
3212    wcLow: WCHAR,
3213    cGlyphs: USHORT,
3214}}
3215pub type PWCRANGE = *mut WCRANGE;
3216pub type LPWCRANGE = *mut WCRANGE;
3217STRUCT!{struct GLYPHSET {
3218    cbThis: DWORD,
3219    flAccel: DWORD,
3220    cGlyphsSupported: DWORD,
3221    cRanges: DWORD,
3222    ranges: [WCRANGE;1],
3223}}
3224pub type PGLYPHSET = *mut GLYPHSET;
3225pub type LPGLYPHSET = *mut GLYPHSET;
3226pub const GS_8BIT_INDICES: DWORD = 0x00000001;
3227pub const GGI_MARK_NONEXISTING_GLYPHS: DWORD = 0x0001;
3228extern "system" {
3229    pub fn GetFontUnicodeRanges(
3230        hdc: HDC,
3231        lpgs: LPGLYPHSET,
3232    ) -> DWORD;
3233    pub fn GetGlyphIndicesA(
3234        hdc: HDC,
3235        lpstr: LPCSTR,
3236        c: c_int,
3237        pgi: LPWORD,
3238        fl: DWORD,
3239    ) -> DWORD;
3240    pub fn GetGlyphIndicesW(
3241        hdc: HDC,
3242        lpstr: LPCWSTR,
3243        c: c_int,
3244        pgi: LPWORD,
3245        fl: DWORD,
3246    ) -> DWORD;
3247    pub fn GetTextExtentPointI(
3248        hdc: HDC,
3249        pgiIn: LPWORD,
3250        cgi: c_int,
3251        psize: LPSIZE,
3252    ) -> BOOL;
3253    pub fn GetTextExtentExPointI(
3254        hdc: HDC,
3255        lpwszString: LPWORD,
3256        cwchString: c_int,
3257        nMaxExtent: c_int,
3258        lpnFit: LPINT,
3259        lpnDx: LPINT,
3260        lpSize: LPSIZE,
3261    ) -> BOOL;
3262    pub fn GetCharWidthI(
3263        hdc: HDC,
3264        giFirst: UINT,
3265        cgi: UINT,
3266        pgi: LPWORD,
3267        piWidths: LPINT,
3268    ) -> BOOL;
3269    pub fn GetCharABCWidthsI(
3270        hdc: HDC,
3271        giFirst: UINT,
3272        cgi: UINT,
3273        pgi: LPWORD,
3274        pabc: LPABC,
3275    ) -> BOOL;
3276}
3277pub const STAMP_DESIGNVECTOR: DWORD = 0x8000000 + 0x64 + (0x76 << 8);
3278pub const STAMP_AXESLIST: DWORD = 0x8000000 + 0x61 + (0x6c << 8);
3279pub const STAMP_TRUETYPE_VARIATION: DWORD = 0x8000000 + 0x74 + (0x76 << 8);
3280pub const MM_MAX_NUMAXES: usize = 16;
3281STRUCT!{struct DESIGNVECTOR {
3282    dvReserved: DWORD,
3283    dvNumAxes: DWORD,
3284    dvValues: [LONG; MM_MAX_NUMAXES],
3285}}
3286pub type PDESIGNVECTOR = *mut DESIGNVECTOR;
3287pub type LPDESIGNVECTOR = *mut DESIGNVECTOR;
3288extern "system" {
3289    pub fn AddFontResourceExA(
3290        lpszFilename: LPCSTR,
3291        fl: DWORD,
3292        pdv: PVOID,
3293    ) -> c_int;
3294    pub fn AddFontResourceExW(
3295        lpszFilename: LPCWSTR,
3296        fl: DWORD,
3297        pdv: PVOID,
3298    ) -> c_int;
3299    pub fn RemoveFontResourceExA(
3300        name: LPCSTR,
3301        fl: DWORD,
3302        pdv: PVOID,
3303    ) -> BOOL;
3304    pub fn RemoveFontResourceExW(
3305        name: LPCWSTR,
3306        fl: DWORD,
3307        pdv: PVOID,
3308    ) -> BOOL;
3309    pub fn AddFontMemResourceEx(
3310        pbFont: PVOID,
3311        cbSize: DWORD,
3312        pdv: PVOID,
3313        pcFonts: *mut DWORD,
3314    ) -> HANDLE;
3315    pub fn RemoveFontMemResourceEx(
3316        h: HANDLE,
3317    ) -> BOOL;
3318}
3319pub const FR_PRIVATE: DWORD = 0x10;
3320pub const FR_NOT_ENUM: DWORD = 0x20;
3321pub const MM_MAX_AXES_NAMELEN: usize = 16;
3322STRUCT!{struct AXISINFOA {
3323    axMinValue: LONG,
3324    axMaxValue: LONG,
3325    axAxisName: [BYTE; MM_MAX_AXES_NAMELEN],
3326}}
3327pub type PAXISINFOA = *mut AXISINFOA;
3328pub type LPAXISINFOA = *mut AXISINFOA;
3329STRUCT!{struct AXISINFOW {
3330    axMinValue: LONG,
3331    axMaxValue: LONG,
3332    axAxisName: [WCHAR; MM_MAX_AXES_NAMELEN],
3333}}
3334pub type PAXISINFOW = *mut AXISINFOW;
3335pub type LPAXISINFOW = *mut AXISINFOW;
3336STRUCT!{struct AXESLISTA {
3337    axlReserved: DWORD,
3338    axlNumAxes: DWORD,
3339    axlAxisInfo: [AXISINFOA; MM_MAX_AXES_NAMELEN],
3340}}
3341pub type PAXESLISTA = *mut AXESLISTA;
3342pub type LPAXESLISTA = *mut AXESLISTA;
3343STRUCT!{struct AXESLISTW {
3344    axlReserved: DWORD,
3345    axlNumAxes: DWORD,
3346    axlAxisInfo: [AXISINFOW; MM_MAX_AXES_NAMELEN],
3347}}
3348pub type PAXESLISTW = *mut AXESLISTW;
3349pub type LPAXESLISTW = *mut AXESLISTW;
3350STRUCT!{struct ENUMLOGFONTEXDVA {
3351    elfEnumLogfontEx: ENUMLOGFONTEXA,
3352    elfDesignVector: DESIGNVECTOR,
3353}}
3354pub type PENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA;
3355pub type LPENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA;
3356STRUCT!{struct ENUMLOGFONTEXDVW {
3357    elfEnumLogfontEx: ENUMLOGFONTEXW,
3358    elfDesignVector: DESIGNVECTOR,
3359}}
3360pub type PENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW;
3361pub type LPENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW;
3362extern "system" {
3363    pub fn CreateFontIndirectExA(
3364        penumlfex: *const ENUMLOGFONTEXDVA,
3365    ) -> HFONT;
3366    pub fn CreateFontIndirectExW(
3367        penumlfex: *const ENUMLOGFONTEXDVW,
3368    ) -> HFONT;
3369}
3370STRUCT!{struct ENUMTEXTMETRICA {
3371    etmNewTextMetricEx: NEWTEXTMETRICEXA,
3372    etmAxesList: AXESLISTA,
3373}}
3374pub type PENUMTEXTMETRICA = *mut ENUMTEXTMETRICA;
3375pub type LPENUMTEXTMETRICA = *mut ENUMTEXTMETRICA;
3376STRUCT!{struct ENUMTEXTMETRICW {
3377    etmNewTextMetricEx: NEWTEXTMETRICEXW,
3378    etmAxesList: AXESLISTW,
3379}}
3380pub type PENUMTEXTMETRICW = *mut ENUMTEXTMETRICW;
3381pub type LPENUMTEXTMETRICW = *mut ENUMTEXTMETRICW;
3382extern "system" {
3383    pub fn GetViewportExtEx(
3384        hdc: HDC,
3385        lpsize: LPSIZE,
3386    ) -> BOOL;
3387    pub fn GetViewportOrgEx(
3388        hdc: HDC,
3389        lppoint: LPPOINT,
3390    ) -> BOOL;
3391    pub fn GetWindowExtEx(
3392        hdc: HDC,
3393        lpsize: LPSIZE,
3394    ) -> BOOL;
3395    pub fn GetWindowOrgEx(
3396        hdc: HDC,
3397        lppoint: LPPOINT,
3398    ) -> BOOL;
3399    pub fn IntersectClipRect(
3400        hdc: HDC,
3401        left: c_int,
3402        top: c_int,
3403        right: c_int,
3404        bottom: c_int,
3405    ) -> c_int;
3406    pub fn InvertRgn(
3407        hdc: HDC,
3408        hrgn: HRGN,
3409    ) -> BOOL;
3410    pub fn LineDDA(
3411        nXStart: c_int,
3412        nYStart: c_int,
3413        nXEnd: c_int,
3414        nYEnd: c_int,
3415        lpLineFunc: LINEDDAPROC,
3416        lpData: LPARAM,
3417    ) -> BOOL;
3418    pub fn LineTo(
3419        hdc: HDC,
3420        nXEnd: c_int,
3421        nYEnd: c_int,
3422    ) -> BOOL;
3423    pub fn MaskBlt(
3424        hdcDest: HDC,
3425        xDest: c_int,
3426        yDest: c_int,
3427        width: c_int,
3428        height: c_int,
3429        hdcSrc: HDC,
3430        xSrc: c_int,
3431        ySrc: c_int,
3432        hbmMask: HBITMAP,
3433        xMask: c_int,
3434        yMask: c_int,
3435        rop: DWORD,
3436    ) -> BOOL;
3437    pub fn PlgBlt(
3438        hdcDest: HDC,
3439        lpPoint: *const POINT,
3440        hdcSrc: HDC,
3441        xSrc: c_int,
3442        ySrc: c_int,
3443        width: c_int,
3444        height: c_int,
3445        hbmMask: HBITMAP,
3446        xMask: c_int,
3447        yMask: c_int,
3448    ) -> BOOL;
3449    pub fn OffsetClipRgn(
3450        hdc: HDC,
3451        x: c_int,
3452        y: c_int,
3453    ) -> c_int;
3454    pub fn OffsetRgn(
3455        hrgn: HRGN,
3456        x: c_int,
3457        y: c_int,
3458    ) -> c_int;
3459    pub fn PatBlt(
3460        hdc: HDC,
3461        nXLeft: c_int,
3462        nYLeft: c_int,
3463        nWidth: c_int,
3464        nHeight: c_int,
3465        dwRop: DWORD,
3466    ) -> BOOL;
3467    pub fn Pie(
3468        hdc: HDC,
3469        nLeftRect: c_int,
3470        nTopRect: c_int,
3471        nRightRect: c_int,
3472        nBottomRect: c_int,
3473        nXRadial1: c_int,
3474        nYRadial1: c_int,
3475        nXRadial2: c_int,
3476        nYRadial2: c_int,
3477    ) -> BOOL;
3478    pub fn PlayMetaFile(
3479        hdc: HDC,
3480        hmf: HMETAFILE,
3481    ) -> BOOL;
3482    pub fn PaintRgn(
3483        hdc: HDC,
3484        hrgn: HRGN,
3485    ) -> BOOL;
3486    pub fn PolyPolygon(
3487        hdc: HDC,
3488        lpPoints: *const POINT,
3489        lpPolyCounts: *const INT,
3490        cCount: DWORD,
3491    ) -> BOOL;
3492    pub fn PtInRegion(
3493        hrgn: HRGN,
3494        x: c_int,
3495        y: c_int,
3496    ) -> BOOL;
3497    pub fn PtVisible(
3498        hdc: HDC,
3499        x: c_int,
3500        y: c_int,
3501    ) -> BOOL;
3502    pub fn RectInRegion(
3503        hrgn: HRGN,
3504        lprect: *const RECT,
3505    ) -> BOOL;
3506    pub fn RectVisible(
3507        hdc: HDC,
3508        lprect: *const RECT,
3509    ) -> BOOL;
3510    pub fn Rectangle(
3511        hdc: HDC,
3512        left: c_int,
3513        top: c_int,
3514        right: c_int,
3515        bottom: c_int,
3516    ) -> BOOL;
3517    pub fn RestoreDC(
3518        hdc: HDC,
3519        nSavedDC: c_int,
3520    ) -> BOOL;
3521    pub fn ResetDCA(
3522        hdc: HDC,
3523        lpdm: *const DEVMODEA,
3524    ) -> HDC;
3525    pub fn ResetDCW(
3526        hdc: HDC,
3527        lpdm: *const DEVMODEW,
3528    ) -> HDC;
3529    pub fn RealizePalette(
3530        hdc: HDC,
3531    ) -> UINT;
3532    pub fn RemoveFontResourceA(
3533        lpFileName: LPCSTR,
3534    ) -> BOOL;
3535    pub fn RemoveFontResourceW(
3536        lpFileName: LPCWSTR,
3537    ) -> BOOL;
3538    pub fn RoundRect(
3539        hdc: HDC,
3540        nLeftRect: c_int,
3541        nTopRect: c_int,
3542        nRightRect: c_int,
3543        nBottomRect: c_int,
3544        nWidth: c_int,
3545        nHeight: c_int,
3546    ) -> BOOL;
3547    pub fn ResizePalette(
3548        hpal: HPALETTE,
3549        n: UINT,
3550    ) -> BOOL;
3551    pub fn SaveDC(
3552        hdc: HDC,
3553    ) -> c_int;
3554    pub fn SelectClipRgn(
3555        hdc: HDC,
3556        hrgn: HRGN,
3557    ) -> c_int;
3558    pub fn ExtSelectClipRgn(
3559        hdc: HDC,
3560        hrgn: HRGN,
3561        mode: c_int,
3562    ) -> c_int;
3563    pub fn SetMetaRgn(
3564        hdc: HDC,
3565    ) -> c_int;
3566    pub fn SelectObject(
3567        hdc: HDC,
3568        h: HGDIOBJ,
3569    ) -> HGDIOBJ;
3570    pub fn SelectPalette(
3571        hdc: HDC,
3572        hPal: HPALETTE,
3573        bForceBkgd: BOOL,
3574    ) -> HPALETTE;
3575    pub fn SetBkColor(
3576        hdc: HDC,
3577        color: COLORREF,
3578    ) -> COLORREF;
3579    pub fn SetDCBrushColor(
3580        hdc: HDC,
3581        color: COLORREF,
3582    ) -> COLORREF;
3583    pub fn SetDCPenColor(
3584        hdc: HDC,
3585        color: COLORREF,
3586    ) -> COLORREF;
3587    pub fn SetBkMode(
3588        hdc: HDC,
3589        mode: c_int,
3590    ) -> c_int;
3591    pub fn SetBitmapBits(
3592        hbm: HBITMAP,
3593        cb: DWORD,
3594        pvBits: *const VOID,
3595    ) -> LONG;
3596    pub fn SetBoundsRect(
3597        hdc: HDC,
3598        lprect: *const RECT,
3599        flags: UINT,
3600    ) -> UINT;
3601    pub fn SetDIBits(
3602        hdc: HDC,
3603        hbm: HBITMAP,
3604        start: UINT,
3605        cLines: UINT,
3606        lpBits: *const VOID,
3607        lpbmi: *const BITMAPINFO,
3608        ColorUse: UINT,
3609    ) -> c_int;
3610    pub fn SetDIBitsToDevice(
3611        hdc: HDC,
3612        xDest: c_int,
3613        yDest: c_int,
3614        w: DWORD,
3615        h: DWORD,
3616        xSrc: c_int,
3617        ySrc: c_int,
3618        StartScan: UINT,
3619        cLines: UINT,
3620        lpvBits: *const VOID,
3621        lpbmi: *const BITMAPINFO,
3622        ColorUse: UINT,
3623    ) -> c_int;
3624    pub fn SetMapperFlags(
3625        hdc: HDC,
3626        flags: DWORD,
3627    ) -> DWORD;
3628    pub fn SetGraphicsMode(
3629        hdc: HDC,
3630        iMode: c_int,
3631    ) -> c_int;
3632    pub fn SetMapMode(
3633        hdc: HDC,
3634        mode: c_int,
3635    ) -> c_int;
3636    pub fn SetLayout(
3637        hdc: HDC,
3638        l: DWORD,
3639    ) -> DWORD;
3640    pub fn GetLayout(
3641        hdc: HDC,
3642    ) -> DWORD;
3643    pub fn SetMetaFileBitsEx(
3644        cbBuffer: UINT,
3645        lpData: *const BYTE,
3646    ) -> HMETAFILE;
3647    pub fn SetPaletteEntries(
3648        hpal: HPALETTE,
3649        iStart: UINT,
3650        cEntries: UINT,
3651        pPalEntries: *const PALETTEENTRY,
3652    ) -> UINT;
3653    pub fn SetPixel(
3654        hdc: HDC,
3655        x: c_int,
3656        y: c_int,
3657        color: COLORREF,
3658    ) -> COLORREF;
3659    pub fn SetPixelV(
3660        hdc: HDC,
3661        x: c_int,
3662        y: c_int,
3663        color: COLORREF,
3664    ) -> BOOL;
3665    pub fn SetPixelFormat(
3666        hdc: HDC,
3667        iPixelFormat: c_int,
3668        ppfd: *const PIXELFORMATDESCRIPTOR,
3669    ) -> BOOL;
3670    pub fn SetPolyFillMode(
3671        hdc: HDC,
3672        iPolyFillMode: c_int,
3673    ) -> c_int;
3674    pub fn StretchBlt(
3675        hdcDest: HDC,
3676        xDest: c_int,
3677        yDest: c_int,
3678        wDest: c_int,
3679        hDest: c_int,
3680        hdcSrc: HDC,
3681        xSrc: c_int,
3682        ySrc: c_int,
3683        wSrc: c_int,
3684        hSrc: c_int,
3685        rop: DWORD,
3686    ) -> BOOL;
3687    pub fn SetRectRgn(
3688        hrgn: HRGN,
3689        left: c_int,
3690        top: c_int,
3691        right: c_int,
3692        bottom: c_int,
3693    ) -> BOOL;
3694    pub fn StretchDIBits(
3695        hdc: HDC,
3696        XDest: c_int,
3697        YDest: c_int,
3698        nDestWidth: c_int,
3699        nDestHeight: c_int,
3700        XSrc: c_int,
3701        YSrc: c_int,
3702        nSrcWidth: c_int,
3703        nSrcHeight: c_int,
3704        lpBits: *const VOID,
3705        lpBitsInfo: *const BITMAPINFO,
3706        iUsage: UINT,
3707        dwRop: DWORD,
3708    ) -> c_int;
3709    pub fn SetROP2(
3710        hdc: HDC,
3711        rop2: c_int,
3712    ) -> c_int;
3713    pub fn SetStretchBltMode(
3714        hdc: HDC,
3715        mode: c_int,
3716    ) -> c_int;
3717    pub fn SetSystemPaletteUse(
3718        hdc: HDC,
3719        uuse: UINT,
3720    ) -> UINT;
3721    pub fn SetTextCharacterExtra(
3722        hdc: HDC,
3723        extra: c_int,
3724    ) -> c_int;
3725    pub fn SetTextColor(
3726        hdc: HDC,
3727        color: COLORREF,
3728    ) -> COLORREF;
3729    pub fn SetTextAlign(
3730        hdc: HDC,
3731        align: UINT,
3732    ) -> UINT;
3733    pub fn SetTextJustification(
3734        hdc: HDC,
3735        extra: c_int,
3736        count: c_int,
3737    ) -> BOOL;
3738    pub fn UpdateColors(
3739        hdc: HDC,
3740    ) -> BOOL;
3741}
3742pub type COLOR16 = c_ushort;
3743STRUCT!{struct TRIVERTEX {
3744    x: LONG,
3745    y: LONG,
3746    Red: COLOR16,
3747    Green: COLOR16,
3748    Blue: COLOR16,
3749    Alpha: COLOR16,
3750}}
3751pub type PTRIVERTEX = *mut TRIVERTEX;
3752pub type LPTRIVERTEX = *mut TRIVERTEX;
3753STRUCT!{struct GRADIENT_RECT {
3754    UpperLeft: ULONG,
3755    LowerRight: ULONG,
3756}}
3757pub type PGRADIENT_RECT = *mut GRADIENT_RECT;
3758pub type LPGRADIENT_RECT = *mut GRADIENT_RECT;
3759STRUCT!{struct BLENDFUNCTION {
3760    BlendOp: BYTE,
3761    BlendFlags: BYTE,
3762    SourceConstantAlpha: BYTE,
3763    AlphaFormat: BYTE,
3764}}
3765pub type PBLENDFUNCTION = *mut BLENDFUNCTION;
3766pub const AC_SRC_OVER: BYTE = 0x00;
3767pub const AC_SRC_ALPHA: BYTE = 0x01;
3768extern "system" {
3769    pub fn AlphaBlend(
3770        hdcDest: HDC,
3771        xoriginDest: c_int,
3772        yoriginDest: c_int,
3773        wDest: c_int,
3774        hDest: c_int,
3775        hdcSrc: HDC,
3776        xoriginSrc: c_int,
3777        yoriginSrc: c_int,
3778        wSrc: c_int,
3779        hSrc: c_int,
3780        ftn: BLENDFUNCTION,
3781    ) -> BOOL;
3782    pub fn TransparentBlt(
3783        hdcDest: HDC,
3784        xoriginDest: c_int,
3785        yoriginDest: c_int,
3786        wDest: c_int,
3787        hDest: c_int,
3788        hdcSrc: HDC,
3789        xoriginSrc: c_int,
3790        yoriginSrc: c_int,
3791        wSrc: c_int,
3792        hSrc: c_int,
3793        crTransparent: UINT,
3794    ) -> BOOL;
3795}
3796pub const GRADIENT_FILL_RECT_H: ULONG = 0x00000000;
3797pub const GRADIENT_FILL_RECT_V: ULONG = 0x00000001;
3798pub const GRADIENT_FILL_TRIANGLE: ULONG = 0x00000002;
3799pub const GRADIENT_FILL_OP_FLAG: ULONG = 0x000000ff;
3800extern "system" {
3801    pub fn GradientFill(
3802        hdc: HDC,
3803        pVertex: PTRIVERTEX,
3804        nVertex: ULONG,
3805        pMesh: PVOID,
3806        nMesh: ULONG,
3807        ulMode: ULONG,
3808    ) -> BOOL;
3809    pub fn GdiAlphaBlend(
3810        hdcDest: HDC,
3811        xoriginDest: c_int,
3812        yoriginDest: c_int,
3813        wDest: c_int,
3814        hDest: c_int,
3815        hdcSrc: HDC,
3816        xoriginSrc: c_int,
3817        yoriginSrc: c_int,
3818        wSrc: c_int,
3819        hSrc: c_int,
3820        ftn: BLENDFUNCTION,
3821    ) -> BOOL;
3822    pub fn GdiTransparentBlt(
3823        hdcDest: HDC,
3824        xoriginDest: c_int,
3825        yoriginDest: c_int,
3826        wDest: c_int,
3827        hDest: c_int,
3828        hdcSrc: HDC,
3829        xoriginSrc: c_int,
3830        yoriginSrc: c_int,
3831        wSrc: c_int,
3832        hSrc: c_int,
3833        crTransparent: UINT,
3834    ) -> BOOL;
3835    pub fn GdiGradientFill(
3836        hdc: HDC,
3837        pVertex: PTRIVERTEX,
3838        nVertex: ULONG,
3839        pMesh: PVOID,
3840        nCount: ULONG,
3841        ulMode: ULONG,
3842    ) -> BOOL;
3843    pub fn PlayMetaFileRecord(
3844        hdc: HDC,
3845        lpHandleTable: LPHANDLETABLE,
3846        lpMR: LPMETARECORD,
3847        noObjs: UINT,
3848    ) -> BOOL;
3849}
3850FN!{stdcall MFENUMPROC(
3851    hdc: HDC,
3852    lpht: *mut HANDLETABLE,
3853    lpMR: *mut METARECORD,
3854    nObj: c_int,
3855    param: LPARAM,
3856) -> c_int}
3857extern "system" {
3858    pub fn EnumMetaFile(
3859        hdc: HDC,
3860        hmf: HMETAFILE,
3861        mproc: MFENUMPROC,
3862        param: LPARAM,
3863    ) -> BOOL;
3864}
3865FN!{stdcall ENHMFENUMPROC(
3866    hdc: HDC,
3867    lpht: *mut HANDLETABLE,
3868    lpmr: *const ENHMETARECORD,
3869    nHandles: c_int,
3870    data: LPARAM,
3871) -> c_int}
3872extern "system" {
3873    pub fn CloseEnhMetaFile(
3874        hdc: HDC,
3875    ) -> HENHMETAFILE;
3876    pub fn CopyEnhMetaFileA(
3877        hemfSrc: HENHMETAFILE,
3878        lpszFile: LPCSTR,
3879    ) -> HENHMETAFILE;
3880    pub fn CopyEnhMetaFileW(
3881        hemfSrc: HENHMETAFILE,
3882        lpszFile: LPCWSTR,
3883    ) -> HENHMETAFILE;
3884    pub fn CreateEnhMetaFileA(
3885        hdcRef: HDC,
3886        lpFilename: LPCSTR,
3887        lpRect: *const RECT,
3888        lpDescription: LPCSTR,
3889    ) -> HDC;
3890    pub fn CreateEnhMetaFileW(
3891        hdcRef: HDC,
3892        lpFilename: LPCWSTR,
3893        lpRect: *const RECT,
3894        lpDescription: LPCWSTR,
3895    ) -> HDC;
3896    pub fn DeleteEnhMetaFile(
3897        hmf: HENHMETAFILE,
3898    ) -> BOOL;
3899    pub fn EnumEnhMetaFile(
3900        hdc: HDC,
3901        hmf: HENHMETAFILE,
3902        lpProc: ENHMFENUMPROC,
3903        param: LPVOID,
3904        lpRect: *const RECT,
3905    ) -> BOOL;
3906    pub fn GetEnhMetaFileA(
3907        lpName: LPCSTR,
3908    ) -> HENHMETAFILE;
3909    pub fn GetEnhMetaFileW(
3910        lpName: LPCWSTR,
3911    ) -> HENHMETAFILE;
3912    pub fn GetEnhMetaFileBits(
3913        hEMF: HENHMETAFILE,
3914        nSize: UINT,
3915        lpData: LPBYTE,
3916    ) -> UINT;
3917    pub fn GetEnhMetaFileDescriptionA(
3918        hemf: HENHMETAFILE,
3919        cchBuffer: UINT,
3920        lpDescription: LPSTR,
3921    ) -> UINT;
3922    pub fn GetEnhMetaFileDescriptionW(
3923        hemf: HENHMETAFILE,
3924        cchBuffer: UINT,
3925        lpDescription: LPWSTR,
3926    ) -> UINT;
3927    pub fn GetEnhMetaFileHeader(
3928        hemf: HENHMETAFILE,
3929        nSize: UINT,
3930        lpEnhMetaHeader: LPENHMETAHEADER,
3931    ) -> UINT;
3932    pub fn GetEnhMetaFilePaletteEntries(
3933        hemf: HENHMETAFILE,
3934        nNumEntries: UINT,
3935        lpPaletteEntries: LPPALETTEENTRY,
3936    ) -> UINT;
3937    pub fn GetEnhMetaFilePixelFormat(
3938        hemf: HENHMETAFILE,
3939        cbBuffer: UINT,
3940        ppfd: *mut PIXELFORMATDESCRIPTOR,
3941    ) -> UINT;
3942    pub fn GetWinMetaFileBits(
3943        hemf: HENHMETAFILE,
3944        cbData16: UINT,
3945        pData16: LPBYTE,
3946        iMapMode: INT,
3947        hdcRef: HDC,
3948    ) -> UINT;
3949    pub fn PlayEnhMetaFile(
3950        hdc: HDC,
3951        hmf: HENHMETAFILE,
3952        lprect: *const RECT,
3953    ) -> BOOL;
3954    pub fn PlayEnhMetaFileRecord(
3955        hdc: HDC,
3956        pht: LPHANDLETABLE,
3957        pmr: *const ENHMETARECORD,
3958        cht: UINT,
3959    ) -> BOOL;
3960    pub fn SetEnhMetaFileBits(
3961        nSize: UINT,
3962        pb: *const BYTE,
3963    ) -> HENHMETAFILE;
3964    pub fn SetWinMetaFileBits(
3965        nSize: UINT,
3966        lpMeta16Data: *const BYTE,
3967        hdcRef: HDC,
3968        lpMFP: *const METAFILEPICT,
3969    ) -> HENHMETAFILE;
3970    pub fn GdiComment(
3971        hdc: HDC,
3972        nSize: UINT,
3973        lpData: *const BYTE,
3974    ) -> BOOL;
3975    pub fn GetTextMetricsA(
3976        hdc: HDC,
3977        lptm: LPTEXTMETRICA,
3978    ) -> BOOL;
3979    pub fn GetTextMetricsW(
3980        hdc: HDC,
3981        lptm: *mut TEXTMETRICW,
3982    ) -> BOOL;
3983}
3984STRUCT!{struct DIBSECTION {
3985    dsBm: BITMAP,
3986    dsBmih: BITMAPINFOHEADER,
3987    dsBitfields: [DWORD; 3],
3988    dshSection: HANDLE,
3989    dsOffset: DWORD,
3990}}
3991pub type PDIBSECTION = *mut DIBSECTION;
3992pub type LPDIBSECTION = *mut DIBSECTION;
3993extern "system" {
3994    pub fn AngleArc(
3995        hdc: HDC,
3996        X: c_int,
3997        Y: c_int,
3998        dwRadius: DWORD,
3999        eStartAngle: FLOAT,
4000        eSweepAngle: FLOAT,
4001    ) -> BOOL;
4002    pub fn PolyPolyline(
4003        hdc: HDC,
4004        lppt: *const POINT,
4005        lpdwPolyPoints: *const DWORD,
4006        cCount: DWORD,
4007    ) -> BOOL;
4008    pub fn GetWorldTransform(
4009        hdc: HDC,
4010        lpxf: LPXFORM,
4011    ) -> BOOL;
4012    pub fn SetWorldTransform(
4013        hdc: HDC,
4014        lpxf: *const XFORM,
4015    ) -> BOOL;
4016    pub fn ModifyWorldTransform(
4017        hdc: HDC,
4018        lpxf: *const XFORM,
4019        mode: DWORD,
4020    ) -> BOOL;
4021    pub fn CombineTransform(
4022        lpxformResult: LPXFORM,
4023        lpxform1: *const XFORM,
4024        lpxform2: *const XFORM,
4025    ) -> BOOL;
4026}
4027#[inline]
4028pub fn GDI_WIDTHBYTES(bits: DWORD) -> DWORD {
4029    ((bits + 31) & !31) / 8
4030}
4031#[inline]
4032pub fn GDI_DIBWIDTHBYTES(bi: &BITMAPINFOHEADER) -> DWORD {
4033    GDI_WIDTHBYTES((bi.biWidth as DWORD) * (bi.biBitCount as DWORD))
4034}
4035#[inline]
4036pub fn GDI__DIBSIZE(bi: &BITMAPINFOHEADER) -> DWORD {
4037    GDI_DIBWIDTHBYTES(bi) * bi.biHeight as DWORD
4038}
4039#[inline]
4040pub fn GDI_DIBSIZE(bi: &BITMAPINFOHEADER) -> DWORD {
4041    if bi.biHeight < 0 {
4042        GDI__DIBSIZE(bi) * -1i32 as u32
4043    } else {
4044        GDI__DIBSIZE(bi)
4045    }
4046}
4047extern "system" {
4048    pub fn CreateDIBSection(
4049        hdc: HDC,
4050        lpbmi: *const BITMAPINFO,
4051        usage: UINT,
4052        ppvBits: *mut *mut c_void,
4053        hSection: HANDLE,
4054        offset: DWORD,
4055    ) -> HBITMAP;
4056    pub fn GetDIBColorTable(
4057        hdc: HDC,
4058        iStart: UINT,
4059        cEntries: UINT,
4060        prgbq: *mut RGBQUAD,
4061    ) -> UINT;
4062    pub fn SetDIBColorTable(
4063        hdc: HDC,
4064        iStart: UINT,
4065        cEntries: UINT,
4066        prgbq: *const RGBQUAD,
4067    ) -> UINT;
4068}
4069pub const CA_NEGATIVE: WORD = 0x0001;
4070pub const CA_LOG_FILTER: WORD = 0x0002;
4071pub const ILLUMINANT_DEVICE_DEFAULT: WORD = 0;
4072pub const ILLUMINANT_A: WORD = 1;
4073pub const ILLUMINANT_B: WORD = 2;
4074pub const ILLUMINANT_C: WORD = 3;
4075pub const ILLUMINANT_D50: WORD = 4;
4076pub const ILLUMINANT_D55: WORD = 5;
4077pub const ILLUMINANT_D65: WORD = 6;
4078pub const ILLUMINANT_D75: WORD = 7;
4079pub const ILLUMINANT_F2: WORD = 8;
4080pub const ILLUMINANT_MAX_INDEX: WORD = ILLUMINANT_F2;
4081pub const ILLUMINANT_TUNGSTEN: WORD = ILLUMINANT_A;
4082pub const ILLUMINANT_DAYLIGHT: WORD = ILLUMINANT_C;
4083pub const ILLUMINANT_FLUORESCENT: WORD = ILLUMINANT_F2;
4084pub const ILLUMINANT_NTSC: WORD = ILLUMINANT_C;
4085pub const RGB_GAMMA_MIN: WORD = 0o2500; // FIXME It is octal in the headers but are the headers actually right?
4086pub const RGB_GAMMA_MAX: WORD = 65000;
4087pub const REFERENCE_WHITE_MIN: WORD = 6000;
4088pub const REFERENCE_WHITE_MAX: WORD = 10000;
4089pub const REFERENCE_BLACK_MIN: WORD = 0;
4090pub const REFERENCE_BLACK_MAX: WORD = 4000;
4091pub const COLOR_ADJ_MIN: SHORT = -100;
4092pub const COLOR_ADJ_MAX: SHORT = 100;
4093STRUCT!{struct COLORADJUSTMENT {
4094    caSize: WORD,
4095    caFlags: WORD,
4096    caIlluminantIndex: WORD,
4097    caRedGamma: WORD,
4098    caGreenGamma: WORD,
4099    caBlueGamma: WORD,
4100    caReferenceBlack: WORD,
4101    caReferenceWhite: WORD,
4102    caContrast: SHORT,
4103    caBrightness: SHORT,
4104    caColorfulness: SHORT,
4105    caRedGreenTint: SHORT,
4106}}
4107pub type PCOLORADJUSTMENT = *mut COLORADJUSTMENT;
4108pub type LPCOLORADJUSTMENT = *mut COLORADJUSTMENT;
4109extern "system" {
4110    pub fn SetColorAdjustment(
4111        hdc: HDC,
4112        lpca: *const COLORADJUSTMENT,
4113    ) -> BOOL;
4114    pub fn GetColorAdjustment(
4115        hdc: HDC,
4116        lpca: LPCOLORADJUSTMENT,
4117    ) -> BOOL;
4118    pub fn CreateHalftonePalette(
4119        hdc: HDC,
4120    ) -> HPALETTE;
4121}
4122FN!{stdcall ABORTPROC(
4123    HDC,
4124    c_int,
4125) -> BOOL}
4126STRUCT!{struct DOCINFOA {
4127    cbSize: c_int,
4128    lpszDocName: LPCSTR,
4129    lpszOutput: LPCSTR,
4130    lpszDatatype: LPCSTR,
4131    fwType: DWORD,
4132}}
4133pub type LPDOCINFOA = *mut DOCINFOA;
4134STRUCT!{struct DOCINFOW {
4135    cbSize: c_int,
4136    lpszDocName: LPCWSTR,
4137    lpszOutput: LPCWSTR,
4138    lpszDatatype: LPCWSTR,
4139    fwType: DWORD,
4140}}
4141pub type LPDOCINFOW = *mut DOCINFOW;
4142pub const DI_APPBANDING: DWORD = 0x00000001;
4143pub const DI_ROPS_READ_DESTINATION: DWORD = 0x00000002;
4144extern "system" {
4145    pub fn StartDocA(
4146        hdc: HDC,
4147        lpdi: *const DOCINFOA,
4148    ) -> c_int;
4149    pub fn StartDocW(
4150        hdc: HDC,
4151        lpdi: *const DOCINFOW,
4152    ) -> c_int;
4153    pub fn EndDoc(
4154        hdc: HDC,
4155    ) -> c_int;
4156    pub fn StartPage(
4157        hdc: HDC,
4158    ) -> c_int;
4159    pub fn EndPage(
4160        hdc: HDC,
4161    ) -> c_int;
4162    pub fn AbortDoc(
4163        hdc: HDC,
4164    ) -> c_int;
4165    pub fn SetAbortProc(
4166        hdc: HDC,
4167        aproc: ABORTPROC,
4168    ) -> c_int;
4169    pub fn AbortPath(
4170        hdc: HDC,
4171    ) -> BOOL;
4172    pub fn ArcTo(
4173        hdc: HDC,
4174        nLeftRect: c_int,
4175        nTopRect: c_int,
4176        nRightRect: c_int,
4177        nBottomRect: c_int,
4178        nXRadial1: c_int,
4179        nYRadial1: c_int,
4180        nXRadial2: c_int,
4181        nYRadial2: c_int,
4182    ) -> BOOL;
4183    pub fn BeginPath(
4184        hdc: HDC,
4185    ) -> BOOL;
4186    pub fn CloseFigure(
4187        hdc: HDC,
4188    ) -> BOOL;
4189    pub fn EndPath(
4190        hdc: HDC,
4191    ) -> BOOL;
4192    pub fn FillPath(
4193        hdc: HDC,
4194    ) -> BOOL;
4195    pub fn FlattenPath(
4196        hdc: HDC,
4197    ) -> BOOL;
4198    pub fn GetPath(
4199        hdc: HDC,
4200        apt: LPPOINT,
4201        aj: LPBYTE,
4202        cpt: c_int,
4203    ) -> c_int;
4204    pub fn PathToRegion(
4205        hdc: HDC,
4206    ) -> HRGN;
4207    pub fn PolyDraw(
4208        hdc: HDC,
4209        lppt: *const POINT,
4210        lpbTypes: *const BYTE,
4211        cCount: c_int,
4212    ) -> BOOL;
4213    pub fn SelectClipPath(
4214        hdc: HDC,
4215        mode: c_int,
4216    ) -> BOOL;
4217    pub fn SetArcDirection(
4218        hdc: HDC,
4219        ArcDirection: c_int,
4220    ) -> c_int;
4221    pub fn SetMiterLimit(
4222        hdc: HDC,
4223        limit: FLOAT,
4224        old: PFLOAT,
4225    ) -> BOOL;
4226    pub fn StrokeAndFillPath(
4227        hdc: HDC,
4228    ) -> BOOL;
4229    pub fn StrokePath(
4230        hdc: HDC,
4231    ) -> BOOL;
4232    pub fn WidenPath(
4233        hdc: HDC,
4234    ) -> BOOL;
4235    pub fn ExtCreatePen(
4236        iPenStyle: DWORD,
4237        cWidth: DWORD,
4238        plbrush: *const LOGBRUSH,
4239        cStyle: DWORD,
4240        pstyle: *const DWORD,
4241    ) -> HPEN;
4242    pub fn GetMiterLimit(
4243        hdc: HDC,
4244        plimit: PFLOAT,
4245    ) -> BOOL;
4246    pub fn GetArcDirection(
4247        hdc: HDC,
4248    ) -> c_int;
4249    pub fn GetObjectA(
4250        h: HANDLE,
4251        c: c_int,
4252        pv: LPVOID,
4253    ) -> c_int;
4254    pub fn GetObjectW(
4255        h: HANDLE,
4256        c: c_int,
4257        pv: LPVOID,
4258    ) -> c_int;
4259    pub fn MoveToEx(
4260        hdc: HDC,
4261        X: c_int,
4262        Y: c_int,
4263        lpPoint:LPPOINT,
4264    ) -> BOOL;
4265    pub fn TextOutA(
4266        hdc: HDC,
4267        x: c_int,
4268        y: c_int,
4269        lpString: LPCSTR,
4270        c: c_int,
4271    ) -> BOOL;
4272    pub fn TextOutW(
4273        hdc: HDC,
4274        x: c_int,
4275        y: c_int,
4276        lpString: LPCWSTR,
4277        c: c_int,
4278    ) -> BOOL;
4279    pub fn ExtTextOutA(
4280        hdc: HDC,
4281        x: c_int,
4282        y: c_int,
4283        options: UINT,
4284        lprect: *const RECT,
4285        lpString: LPCSTR,
4286        c: UINT,
4287        lpDx: *const INT,
4288    ) -> BOOL;
4289    pub fn ExtTextOutW(
4290        hdc: HDC,
4291        x: c_int,
4292        y: c_int,
4293        options: UINT,
4294        lprect: *const RECT,
4295        lpString: LPCWSTR,
4296        c: UINT,
4297        lpDx: *const INT,
4298    ) -> BOOL;
4299    pub fn PolyTextOutA(
4300        hdc: HDC,
4301        ppt: *const POLYTEXTA,
4302        nstrings: c_int,
4303    ) -> BOOL;
4304    pub fn PolyTextOutW(
4305        hdc: HDC,
4306        ppt: *const POLYTEXTW,
4307        nstrings: c_int,
4308    ) -> BOOL;
4309    pub fn CreatePolygonRgn(
4310        lppt: *const POINT,
4311        cPoints: c_int,
4312        fnPolyFillMode: c_int,
4313    ) -> HRGN;
4314    pub fn DPtoLP(
4315        hdc: HDC,
4316        lppt: *mut POINT,
4317        c: c_int,
4318    ) -> BOOL;
4319    pub fn LPtoDP(
4320        hdc: HDC,
4321        lppt: LPPOINT,
4322        c: c_int,
4323    ) -> BOOL;
4324    pub fn Polygon(
4325        hdc: HDC,
4326        lpPoints: *const POINT,
4327        nCount: c_int,
4328    ) -> BOOL;
4329    pub fn Polyline(
4330        hdc: HDC,
4331        lppt: *const POINT,
4332        cCount: c_int,
4333    ) -> BOOL;
4334    pub fn PolyBezier(
4335        hdc: HDC,
4336        lppt: *const POINT,
4337        cPoints: DWORD,
4338    ) -> BOOL;
4339    pub fn PolyBezierTo(
4340        hdc: HDC,
4341        lppt: *const POINT,
4342        cPoints: DWORD,
4343    ) -> BOOL;
4344    pub fn PolylineTo(
4345        hdc: HDC,
4346        lppt: *const POINT,
4347        cCount: DWORD,
4348    ) -> BOOL;
4349    pub fn SetViewportExtEx(
4350        hdc: HDC,
4351        x: c_int,
4352        y: c_int,
4353        lpsz: LPSIZE,
4354    ) -> BOOL;
4355    pub fn SetViewportOrgEx(
4356        hdc: HDC,
4357        x: c_int,
4358        y: c_int,
4359        lppt: *mut POINT,
4360    ) -> BOOL;
4361    pub fn SetWindowExtEx(
4362        hdc: HDC,
4363        x: c_int,
4364        y: c_int,
4365        lppt: LPSIZE,
4366    ) -> BOOL;
4367    pub fn SetWindowOrgEx(
4368        hdc: HDC,
4369        x: c_int,
4370        y: c_int,
4371        lppt: LPPOINT,
4372    ) -> BOOL;
4373    pub fn OffsetViewportOrgEx(
4374        hdc: HDC,
4375        x: c_int,
4376        y: c_int,
4377        lppt: LPPOINT,
4378    ) -> BOOL;
4379    pub fn OffsetWindowOrgEx(
4380        hdc: HDC,
4381        x: c_int,
4382        y: c_int,
4383        lppt: LPPOINT,
4384    ) -> BOOL;
4385    pub fn ScaleViewportExtEx(
4386        hdc: HDC,xn: c_int,
4387        dx: c_int,
4388        yn: c_int,
4389        yd: c_int,
4390        lpsz: LPSIZE,
4391    ) -> BOOL;
4392    pub fn ScaleWindowExtEx(
4393        hdc: HDC,
4394        xn: c_int,
4395        xd: c_int,
4396        yn: c_int,
4397        yd: c_int,
4398        lpsz: LPSIZE,
4399    ) -> BOOL;
4400    pub fn SetBitmapDimensionEx(
4401        hbm: HBITMAP,
4402        w: c_int,
4403        h: c_int,
4404        lpsz: LPSIZE,
4405    ) -> BOOL;
4406    pub fn SetBrushOrgEx(
4407        hdc: HDC,
4408        x: c_int,
4409        y: c_int,
4410        lppt: LPPOINT,
4411    ) -> BOOL;
4412    pub fn GetTextFaceA(
4413        hdc: HDC,
4414        c: c_int,
4415        lpName: LPSTR,
4416    ) -> c_int;
4417    pub fn GetTextFaceW(
4418        hdc: HDC,
4419        c: c_int,
4420        lpName: LPWSTR,
4421    ) -> c_int;
4422}
4423STRUCT!{struct KERNINGPAIR {
4424    wFirst: WORD,
4425    wSecond: WORD,
4426    iKernAmount: c_int,
4427}}
4428pub type LPKERNINGPAIR = *mut KERNINGPAIR;
4429extern "system" {
4430    pub fn GetKerningPairsA(
4431        hdc: HDC,
4432        nPairs: DWORD,
4433        lpKernPair: LPKERNINGPAIR,
4434    ) -> DWORD;
4435    pub fn GetKerningPairsW(
4436        hdc: HDC,
4437        nPairs: DWORD,
4438        lpKernPair: LPKERNINGPAIR,
4439    ) -> DWORD;
4440    pub fn GetDCOrgEx(
4441        hdc: HDC,
4442        lppt: LPPOINT,
4443    ) -> BOOL;
4444    pub fn FixBrushOrgEx(
4445        hdc: HDC,
4446        x: c_int,
4447        y: c_int,
4448        ptl: LPPOINT,
4449    ) -> BOOL;
4450    pub fn UnrealizeObject(
4451        h: HGDIOBJ,
4452    ) -> BOOL;
4453    pub fn GdiFlush() -> BOOL;
4454    pub fn GdiSetBatchLimit(
4455        dw: DWORD,
4456    ) -> DWORD;
4457    pub fn GdiGetBatchLimit() -> DWORD;
4458}
4459pub const ICM_OFF: c_int = 1;
4460pub const ICM_ON: c_int = 2;
4461pub const ICM_QUERY: c_int = 3;
4462pub const ICM_DONE_OUTSIDEDC: c_int = 4;
4463FN!{stdcall ICMENUMPROCA(
4464    LPSTR,
4465    LPARAM,
4466) -> c_int}
4467FN!{stdcall ICMENUMPROCW(
4468    LPWSTR,
4469    LPARAM,
4470) -> c_int}
4471extern "system" {
4472    pub fn SetICMMode(
4473        hdc: HDC,
4474        mode: c_int,
4475    ) -> c_int;
4476    pub fn CheckColorsInGamut(
4477        hDC: HDC,
4478        lpRGBTriples: LPVOID,
4479        lpBuffer: LPVOID,
4480        nCount: UINT,
4481    ) -> BOOL;
4482    pub fn GetColorSpace(
4483        hdc: HDC,
4484    ) -> HCOLORSPACE;
4485    pub fn GetLogColorSpaceA(
4486        hColorSpace: HCOLORSPACE,
4487        lpBuffer: LPLOGCOLORSPACEA,
4488        nSize: DWORD,
4489    ) -> BOOL;
4490    pub fn GetLogColorSpaceW(
4491        hColorSpace: HCOLORSPACE,
4492        lpBuffer: LPLOGCOLORSPACEW,
4493        nSize: DWORD,
4494    ) -> BOOL;
4495    pub fn CreateColorSpaceA(
4496        lpLogColorSpace: LPLOGCOLORSPACEA,
4497    ) -> HCOLORSPACE;
4498    pub fn CreateColorSpaceW(
4499        lpLogColorSpace: LPLOGCOLORSPACEW,
4500    ) -> HCOLORSPACE;
4501    pub fn SetColorSpace(
4502        hdc: HDC,
4503        hcs: HCOLORSPACE,
4504    ) -> HCOLORSPACE;
4505    pub fn DeleteColorSpace(
4506        hcs: HCOLORSPACE,
4507    ) -> BOOL;
4508    pub fn GetICMProfileA(
4509        hdc: HDC,
4510        pBufSize: LPDWORD,
4511        pszFilename: LPSTR,
4512    ) -> BOOL;
4513    pub fn GetICMProfileW(
4514        hdc: HDC,
4515        pBufSize: LPDWORD,
4516        pszFilename: LPWSTR,
4517    ) -> BOOL;
4518    pub fn SetICMProfileA(
4519        hdc: HDC,
4520        lpFileName: LPSTR,
4521    ) -> BOOL;
4522    pub fn SetICMProfileW(
4523        hdc: HDC,
4524        lpFileName: LPWSTR,
4525    ) -> BOOL;
4526    pub fn GetDeviceGammaRamp(
4527        hdc: HDC,
4528        lpRamp: LPVOID,
4529    ) -> BOOL;
4530    pub fn SetDeviceGammaRamp(
4531        hdc: HDC,
4532        lpRamp: LPVOID,
4533    ) -> BOOL;
4534    pub fn ColorMatchToTarget(
4535        hDC: HDC,
4536        hdcTarget: HDC,
4537        uiAction: UINT,
4538    ) -> BOOL;
4539    pub fn EnumICMProfilesA(
4540        hdc: HDC,
4541        iproc: ICMENUMPROCA,
4542        param: LPARAM,
4543    ) -> c_int;
4544    pub fn EnumICMProfilesW(
4545        hdc: HDC,
4546        iproc: ICMENUMPROCW,
4547        param: LPARAM,
4548    ) -> c_int;
4549    pub fn UpdateICMRegKeyA(
4550        reserved: DWORD,
4551        lpszCMID: LPSTR,
4552        lpszFileName: LPSTR,
4553        command: UINT,
4554    ) -> BOOL;
4555    pub fn UpdateICMRegKeyW(
4556        reserved: DWORD,
4557        lpszCMID: LPWSTR,
4558        lpszFileName: LPWSTR,
4559        command: UINT,
4560    ) -> BOOL;
4561    pub fn ColorCorrectPalette(
4562        hDC: HDC,
4563        hPalette: HPALETTE,
4564        dwFirstEntry: DWORD,
4565        dwNumOfEntries: DWORD,
4566    ) -> BOOL;
4567}
4568pub const ENHMETA_SIGNATURE: DWORD = 0x464D4520;
4569pub const ENHMETA_STOCK_OBJECT: DWORD = 0x80000000;
4570pub const EMR_HEADER: DWORD = 1;
4571pub const EMR_POLYBEZIER: DWORD = 2;
4572pub const EMR_POLYGON: DWORD = 3;
4573pub const EMR_POLYLINE: DWORD = 4;
4574pub const EMR_POLYBEZIERTO: DWORD = 5;
4575pub const EMR_POLYLINETO: DWORD = 6;
4576pub const EMR_POLYPOLYLINE: DWORD = 7;
4577pub const EMR_POLYPOLYGON: DWORD = 8;
4578pub const EMR_SETWINDOWEXTEX: DWORD = 9;
4579pub const EMR_SETWINDOWORGEX: DWORD = 10;
4580pub const EMR_SETVIEWPORTEXTEX: DWORD = 11;
4581pub const EMR_SETVIEWPORTORGEX: DWORD = 12;
4582pub const EMR_SETBRUSHORGEX: DWORD = 13;
4583pub const EMR_EOF: DWORD = 14;
4584pub const EMR_SETPIXELV: DWORD = 15;
4585pub const EMR_SETMAPPERFLAGS: DWORD = 16;
4586pub const EMR_SETMAPMODE: DWORD = 17;
4587pub const EMR_SETBKMODE: DWORD = 18;
4588pub const EMR_SETPOLYFILLMODE: DWORD = 19;
4589pub const EMR_SETROP2: DWORD = 20;
4590pub const EMR_SETSTRETCHBLTMODE: DWORD = 21;
4591pub const EMR_SETTEXTALIGN: DWORD = 22;
4592pub const EMR_SETCOLORADJUSTMENT: DWORD = 23;
4593pub const EMR_SETTEXTCOLOR: DWORD = 24;
4594pub const EMR_SETBKCOLOR: DWORD = 25;
4595pub const EMR_OFFSETCLIPRGN: DWORD = 26;
4596pub const EMR_MOVETOEX: DWORD = 27;
4597pub const EMR_SETMETARGN: DWORD = 28;
4598pub const EMR_EXCLUDECLIPRECT: DWORD = 29;
4599pub const EMR_INTERSECTCLIPRECT: DWORD = 30;
4600pub const EMR_SCALEVIEWPORTEXTEX: DWORD = 31;
4601pub const EMR_SCALEWINDOWEXTEX: DWORD = 32;
4602pub const EMR_SAVEDC: DWORD = 33;
4603pub const EMR_RESTOREDC: DWORD = 34;
4604pub const EMR_SETWORLDTRANSFORM: DWORD = 35;
4605pub const EMR_MODIFYWORLDTRANSFORM: DWORD = 36;
4606pub const EMR_SELECTOBJECT: DWORD = 37;
4607pub const EMR_CREATEPEN: DWORD = 38;
4608pub const EMR_CREATEBRUSHINDIRECT: DWORD = 39;
4609pub const EMR_DELETEOBJECT: DWORD = 40;
4610pub const EMR_ANGLEARC: DWORD = 41;
4611pub const EMR_ELLIPSE: DWORD = 42;
4612pub const EMR_RECTANGLE: DWORD = 43;
4613pub const EMR_ROUNDRECT: DWORD = 44;
4614pub const EMR_ARC: DWORD = 45;
4615pub const EMR_CHORD: DWORD = 46;
4616pub const EMR_PIE: DWORD = 47;
4617pub const EMR_SELECTPALETTE: DWORD = 48;
4618pub const EMR_CREATEPALETTE: DWORD = 49;
4619pub const EMR_SETPALETTEENTRIES: DWORD = 50;
4620pub const EMR_RESIZEPALETTE: DWORD = 51;
4621pub const EMR_REALIZEPALETTE: DWORD = 52;
4622pub const EMR_EXTFLOODFILL: DWORD = 53;
4623pub const EMR_LINETO: DWORD = 54;
4624pub const EMR_ARCTO: DWORD = 55;
4625pub const EMR_POLYDRAW: DWORD = 56;
4626pub const EMR_SETARCDIRECTION: DWORD = 57;
4627pub const EMR_SETMITERLIMIT: DWORD = 58;
4628pub const EMR_BEGINPATH: DWORD = 59;
4629pub const EMR_ENDPATH: DWORD = 60;
4630pub const EMR_CLOSEFIGURE: DWORD = 61;
4631pub const EMR_FILLPATH: DWORD = 62;
4632pub const EMR_STROKEANDFILLPATH: DWORD = 63;
4633pub const EMR_STROKEPATH: DWORD = 64;
4634pub const EMR_FLATTENPATH: DWORD = 65;
4635pub const EMR_WIDENPATH: DWORD = 66;
4636pub const EMR_SELECTCLIPPATH: DWORD = 67;
4637pub const EMR_ABORTPATH: DWORD = 68;
4638pub const EMR_GDICOMMENT: DWORD = 70;
4639pub const EMR_FILLRGN: DWORD = 71;
4640pub const EMR_FRAMERGN: DWORD = 72;
4641pub const EMR_INVERTRGN: DWORD = 73;
4642pub const EMR_PAINTRGN: DWORD = 74;
4643pub const EMR_EXTSELECTCLIPRGN: DWORD = 75;
4644pub const EMR_BITBLT: DWORD = 76;
4645pub const EMR_STRETCHBLT: DWORD = 77;
4646pub const EMR_MASKBLT: DWORD = 78;
4647pub const EMR_PLGBLT: DWORD = 79;
4648pub const EMR_SETDIBITSTODEVICE: DWORD = 80;
4649pub const EMR_STRETCHDIBITS: DWORD = 81;
4650pub const EMR_EXTCREATEFONTINDIRECTW: DWORD = 82;
4651pub const EMR_EXTTEXTOUTA: DWORD = 83;
4652pub const EMR_EXTTEXTOUTW: DWORD = 84;
4653pub const EMR_POLYBEZIER16: DWORD = 85;
4654pub const EMR_POLYGON16: DWORD = 86;
4655pub const EMR_POLYLINE16: DWORD = 87;
4656pub const EMR_POLYBEZIERTO16: DWORD = 88;
4657pub const EMR_POLYLINETO16: DWORD = 89;
4658pub const EMR_POLYPOLYLINE16: DWORD = 90;
4659pub const EMR_POLYPOLYGON16: DWORD = 91;
4660pub const EMR_POLYDRAW16: DWORD = 92;
4661pub const EMR_CREATEMONOBRUSH: DWORD = 93;
4662pub const EMR_CREATEDIBPATTERNBRUSHPT: DWORD = 94;
4663pub const EMR_EXTCREATEPEN: DWORD = 95;
4664pub const EMR_POLYTEXTOUTA: DWORD = 96;
4665pub const EMR_POLYTEXTOUTW: DWORD = 97;
4666pub const EMR_SETICMMODE: DWORD = 98;
4667pub const EMR_CREATECOLORSPACE: DWORD = 99;
4668pub const EMR_SETCOLORSPACE: DWORD = 100;
4669pub const EMR_DELETECOLORSPACE: DWORD = 101;
4670pub const EMR_GLSRECORD: DWORD = 102;
4671pub const EMR_GLSBOUNDEDRECORD: DWORD = 103;
4672pub const EMR_PIXELFORMAT: DWORD = 104;
4673pub const EMR_RESERVED_105: DWORD = 105;
4674pub const EMR_RESERVED_106: DWORD = 106;
4675pub const EMR_RESERVED_107: DWORD = 107;
4676pub const EMR_RESERVED_108: DWORD = 108;
4677pub const EMR_RESERVED_109: DWORD = 109;
4678pub const EMR_RESERVED_110: DWORD = 110;
4679pub const EMR_COLORCORRECTPALETTE: DWORD = 111;
4680pub const EMR_SETICMPROFILEA: DWORD = 112;
4681pub const EMR_SETICMPROFILEW: DWORD = 113;
4682pub const EMR_ALPHABLEND: DWORD = 114;
4683pub const EMR_SETLAYOUT: DWORD = 115;
4684pub const EMR_TRANSPARENTBLT: DWORD = 116;
4685pub const EMR_RESERVED_117: DWORD = 117;
4686pub const EMR_GRADIENTFILL: DWORD = 118;
4687pub const EMR_RESERVED_119: DWORD = 119;
4688pub const EMR_RESERVED_120: DWORD = 120;
4689pub const EMR_COLORMATCHTOTARGETW: DWORD = 121;
4690pub const EMR_CREATECOLORSPACEW: DWORD = 122;
4691pub const EMR_MIN: DWORD = 1;
4692pub const EMR_MAX: DWORD = 122;
4693STRUCT!{struct EMR {
4694    iType: DWORD,
4695    nSize: DWORD,
4696}}
4697pub type PEMR = *mut EMR;
4698STRUCT!{struct EMRTEXT {
4699    ptlReference: POINTL,
4700    nChars: DWORD,
4701    offString: DWORD,
4702    fOptions: DWORD,
4703    rcl: RECTL,
4704    offDx: DWORD,
4705}}
4706pub type PEMRTEXT = *mut EMRTEXT;
4707STRUCT!{struct EMRABORTPATH {
4708    emr: EMR,
4709}}
4710pub type PEMRABORTPATH = *mut EMRABORTPATH;
4711pub type EMRBEGINPATH = EMRABORTPATH;
4712pub type PEMRBEGINPATH = *mut EMRABORTPATH;
4713pub type EMRENDPATH = EMRABORTPATH;
4714pub type PEMRENDPATH = *mut EMRABORTPATH;
4715pub type EMRCLOSEFIGURE = EMRABORTPATH;
4716pub type PEMRCLOSEFIGURE = *mut EMRABORTPATH;
4717pub type EMRFLATTENPATH = EMRABORTPATH;
4718pub type PEMRFLATTENPATH = *mut EMRABORTPATH;
4719pub type EMRWIDENPATH = EMRABORTPATH;
4720pub type PEMRWIDENPATH = *mut EMRABORTPATH;
4721pub type EMRSETMETARGN = EMRABORTPATH;
4722pub type PEMRSETMETARGN = *mut EMRABORTPATH;
4723pub type EMRSAVEDC = EMRABORTPATH;
4724pub type PEMRSAVEDC = *mut EMRABORTPATH;
4725pub type EMRREALIZEPALETTE = EMRABORTPATH;
4726pub type PEMRREALIZEPALETTE = *mut EMRABORTPATH;
4727STRUCT!{struct EMRSELECTCLIPPATH {
4728    emr: EMR,
4729    iMode: DWORD,
4730}}
4731pub type PEMRSELECTCLIPPATH = *mut EMRSELECTCLIPPATH;
4732pub type EMRSETBKMODE = EMRSELECTCLIPPATH;
4733pub type PEMRSETBKMODE = *mut EMRSELECTCLIPPATH;
4734pub type EMRSETMAPMODE = EMRSELECTCLIPPATH;
4735pub type PEMRSETMAPMODE = *mut EMRSELECTCLIPPATH;
4736pub type EMRSETLAYOUT = EMRSELECTCLIPPATH;
4737pub type PEMRSETLAYOUT = *mut EMRSELECTCLIPPATH;
4738pub type EMRSETPOLYFILLMODE = EMRSELECTCLIPPATH;
4739pub type PEMRSETPOLYFILLMODE = *mut EMRSELECTCLIPPATH;
4740pub type EMRSETROP2 = EMRSELECTCLIPPATH;
4741pub type PEMRSETROP2 = *mut EMRSELECTCLIPPATH;
4742pub type EMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH;
4743pub type PEMRSETSTRETCHBLTMODE = *mut EMRSELECTCLIPPATH;
4744pub type EMRSETICMMODE = EMRSELECTCLIPPATH;
4745pub type PEMRSETICMMODE = *mut EMRSELECTCLIPPATH;
4746pub type EMRSETTEXTALIGN = EMRSELECTCLIPPATH;
4747pub type PEMRSETTEXTALIGN = *mut EMRSELECTCLIPPATH;
4748STRUCT!{struct EMRSETMITERLIMIT {
4749    emr: EMR,
4750    eMiterLimit: FLOAT,
4751}}
4752pub type PEMRSETMITERLIMIT = *mut EMRSETMITERLIMIT;
4753STRUCT!{struct EMRRESTOREDC {
4754    emr: EMR,
4755    iRelative: LONG,
4756}}
4757pub type PEMRRESTOREDC = *mut EMRRESTOREDC;
4758STRUCT!{struct EMRSETARCDIRECTION {
4759    emr: EMR,
4760    iArcDirection: DWORD,
4761}}
4762pub type PEMRSETARCDIRECTION = *mut EMRSETARCDIRECTION;
4763STRUCT!{struct EMRSETMAPPERFLAGS {
4764    emr: EMR,
4765    dwFlags: DWORD,
4766}}
4767pub type PEMRSETMAPPERFLAGS = *mut EMRSETMAPPERFLAGS;
4768STRUCT!{struct EMRSETBKCOLOR {
4769    emr: EMR,
4770    crColor: COLORREF,
4771}}
4772pub type PEMRSETBKCOLOR = *mut EMRSETBKCOLOR;
4773pub type EMRSETTEXTCOLOR = EMRSETBKCOLOR;
4774pub type PEMRSETTEXTCOLOR = *mut EMRSETBKCOLOR;
4775STRUCT!{struct EMRSELECTOBJECT {
4776    emr: EMR,
4777    ihObject: DWORD,
4778}}
4779pub type PEMRSELECTOBJECT = *mut EMRSELECTOBJECT;
4780pub type EMRDELETEOBJECT = EMRSELECTOBJECT;
4781pub type PEMRDELETEOBJECT = *mut EMRSELECTOBJECT;
4782STRUCT!{struct EMRSELECTPALETTE {
4783    emr: EMR,
4784    ihPal: DWORD,
4785}}
4786pub type PEMRSELECTPALETTE = *mut EMRSELECTPALETTE;
4787STRUCT!{struct EMRRESIZEPALETTE {
4788    emr: EMR,
4789    ihPal: DWORD,
4790    cEntries: DWORD,
4791}}
4792pub type PEMRRESIZEPALETTE = *mut EMRRESIZEPALETTE;
4793STRUCT!{struct EMRSETPALETTEENTRIES {
4794    emr: EMR,
4795    ihPal: DWORD,
4796    iStart: DWORD,
4797    cEntries: DWORD,
4798    aPalEntries: [PALETTEENTRY; 1],
4799}}
4800pub type PEMRSETPALETTEENTRIES = *mut EMRSETPALETTEENTRIES;
4801STRUCT!{struct EMRSETCOLORADJUSTMENT {
4802    emr: EMR,
4803    ColorAdjustment: COLORADJUSTMENT,
4804}}
4805pub type PEMRSETCOLORADJUSTMENT = *mut EMRSETCOLORADJUSTMENT;
4806STRUCT!{struct EMRGDICOMMENT {
4807    emr: EMR,
4808    cbData: DWORD,
4809    Data: [BYTE; 1],
4810}}
4811pub type PEMRGDICOMMENT = *mut EMRGDICOMMENT;
4812STRUCT!{struct EMREOF {
4813    emr: EMR,
4814    nPalEntries: DWORD,
4815    offPalEntries: DWORD,
4816    nSizeLast: DWORD,
4817}}
4818pub type PEMREOF = *mut EMREOF;
4819STRUCT!{struct EMRLINETO {
4820    emr: EMR,
4821    ptl: POINTL,
4822}}
4823pub type PEMRLINETO = *mut EMRLINETO;
4824pub type EMRMOVETOEX = EMRLINETO;
4825pub type PEMRMOVETOEX = *mut EMRLINETO;
4826STRUCT!{struct EMROFFSETCLIPRGN {
4827    emr: EMR,
4828    ptlOffset: POINTL,
4829}}
4830pub type PEMROFFSETCLIPRGN = *mut EMROFFSETCLIPRGN;
4831STRUCT!{struct EMRFILLPATH {
4832    emr: EMR,
4833    rclBounds: RECTL,
4834}}
4835pub type PEMRFILLPATH = *mut EMRFILLPATH;
4836pub type EMRSTROKEANDFILLPATH = EMRFILLPATH;
4837pub type PEMRSTROKEANDFILLPATH = *mut EMRFILLPATH;
4838pub type EMRSTROKEPATH = EMRFILLPATH;
4839pub type PEMRSTROKEPATH = *mut EMRFILLPATH;
4840STRUCT!{struct EMREXCLUDECLIPRECT {
4841    emr: EMR,
4842    rclClip: RECTL,
4843}}
4844pub type PEMREXCLUDECLIPRECT = *mut EMREXCLUDECLIPRECT;
4845pub type EMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT;
4846pub type PEMRINTERSECTCLIPRECT = *mut EMREXCLUDECLIPRECT;
4847STRUCT!{struct EMRSETVIEWPORTORGEX {
4848    emr: EMR,
4849    ptlOrigin: POINTL,
4850}}
4851pub type PEMRSETVIEWPORTORGEX = *mut EMRSETVIEWPORTORGEX;
4852pub type EMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX;
4853pub type PEMRSETWINDOWORGEX = *mut EMRSETVIEWPORTORGEX;
4854pub type EMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX;
4855pub type PEMRSETBRUSHORGEX = *mut EMRSETVIEWPORTORGEX;
4856STRUCT!{struct EMRSETVIEWPORTEXTEX {
4857    emr: EMR,
4858    szlExtent: SIZEL,
4859}}
4860pub type PEMRSETVIEWPORTEXTEX = *mut EMRSETVIEWPORTEXTEX;
4861pub type EMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX;
4862pub type PEMRSETWINDOWEXTEX = *mut EMRSETVIEWPORTEXTEX;
4863STRUCT!{struct EMRSCALEVIEWPORTEXTEX {
4864    emr: EMR,
4865    xNum: LONG,
4866    xDenom: LONG,
4867    yNum: LONG,
4868    yDenom: LONG,
4869}}
4870pub type PEMRSCALEVIEWPORTEXTEX = *mut EMRSCALEVIEWPORTEXTEX;
4871pub type EMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX;
4872pub type PEMRSCALEWINDOWEXTEX = *mut EMRSCALEVIEWPORTEXTEX;
4873STRUCT!{struct EMRSETWORLDTRANSFORM {
4874    emr: EMR,
4875    xform: XFORM,
4876}}
4877pub type PEMRSETWORLDTRANSFORM = *mut EMRSETWORLDTRANSFORM;
4878STRUCT!{struct EMRMODIFYWORLDTRANSFORM {
4879    emr: EMR,
4880    xform: XFORM,
4881    iMode: DWORD,
4882}}
4883pub type PEMRMODIFYWORLDTRANSFORM = *mut EMRMODIFYWORLDTRANSFORM;
4884STRUCT!{struct EMRSETPIXELV {
4885    emr: EMR,
4886    ptlPixel: POINTL,
4887    crColor: COLORREF,
4888}}
4889pub type PEMRSETPIXELV = *mut EMRSETPIXELV;
4890STRUCT!{struct EMREXTFLOODFILL {
4891    emr: EMR,
4892    ptlStart: POINTL,
4893    crColor: COLORREF,
4894    iMode: DWORD,
4895}}
4896pub type PEMREXTFLOODFILL = *mut EMREXTFLOODFILL;
4897STRUCT!{struct EMRELLIPSE {
4898    emr: EMR,
4899    rclBox: RECTL,
4900}}
4901pub type PEMRELLIPSE = *mut EMRELLIPSE;
4902pub type EMRRECTANGLE = EMRELLIPSE;
4903pub type PEMRRECTANGLE = *mut EMRELLIPSE;
4904STRUCT!{struct EMRROUNDRECT {
4905    emr: EMR,
4906    rclBox: RECTL,
4907    szlCorner: SIZEL,
4908}}
4909pub type PEMRROUNDRECT = *mut EMRROUNDRECT;
4910STRUCT!{struct EMRARC {
4911    emr: EMR,
4912    rclBox: RECTL,
4913    ptlStart: POINTL,
4914    ptlEnd: POINTL,
4915}}
4916pub type PEMRARC = *mut EMRARC;
4917pub type EMRARCTO = EMRARC;
4918pub type PEMRARCTO = *mut EMRARC;
4919pub type EMRCHORD = EMRARC;
4920pub type PEMRCHORD = *mut EMRARC;
4921pub type EMRPIE = EMRARC;
4922pub type PEMRPIE = *mut EMRARC;
4923STRUCT!{struct EMRANGLEARC {
4924    emr: EMR,
4925    ptlCenter: POINTL,
4926    nRadius: DWORD,
4927    eStartAngle: FLOAT,
4928    eSweepAngle: FLOAT,
4929}}
4930pub type PEMRANGLEARC = *mut EMRANGLEARC;
4931STRUCT!{struct EMRPOLYLINE {
4932    emr: EMR,
4933    rclBounds: RECTL,
4934    cptl: DWORD,
4935    aptl: [POINTL; 1],
4936}}
4937pub type PEMRPOLYLINE = *mut EMRPOLYLINE;
4938pub type EMRPOLYBEZIER = EMRPOLYLINE;
4939pub type PEMRPOLYBEZIER = *mut EMRPOLYLINE;
4940pub type EMRPOLYGON = EMRPOLYLINE;
4941pub type PEMRPOLYGON = *mut EMRPOLYLINE;
4942pub type EMRPOLYBEZIERTO = EMRPOLYLINE;
4943pub type PEMRPOLYBEZIERTO = *mut EMRPOLYLINE;
4944pub type EMRPOLYLINETO = EMRPOLYLINE;
4945pub type PEMRPOLYLINETO = *mut EMRPOLYLINE;
4946STRUCT!{struct EMRPOLYLINE16 {
4947    emr: EMR,
4948    rclBounds: RECTL,
4949    cpts: DWORD,
4950    apts: [POINTS; 1],
4951}}
4952pub type PEMRPOLYLINE16 = *mut EMRPOLYLINE16;
4953pub type EMRPOLYBEZIER16 = EMRPOLYLINE16;
4954pub type PEMRPOLYBEZIER16 = *mut EMRPOLYLINE16;
4955pub type EMRPOLYGON16 = EMRPOLYLINE16;
4956pub type PEMRPOLYGON16 = *mut EMRPOLYLINE16;
4957pub type EMRPOLYBEZIERTO16 = EMRPOLYLINE16;
4958pub type PEMRPOLYBEZIERTO16 = *mut EMRPOLYLINE16;
4959pub type EMRPOLYLINETO16 = EMRPOLYLINE16;
4960pub type PEMRPOLYLINETO16 = *mut EMRPOLYLINE16;
4961STRUCT!{struct EMRPOLYDRAW {
4962    emr: EMR,
4963    rclBounds: RECTL,
4964    cptl: DWORD,
4965    aptl: [POINTL; 1],
4966    abTypes: [BYTE; 1],
4967}}
4968pub type PEMRPOLYDRAW = *mut EMRPOLYDRAW;
4969STRUCT!{struct EMRPOLYDRAW16 {
4970    emr: EMR,
4971    rclBounds: RECTL,
4972    cpts: DWORD,
4973    apts: [POINTS; 1],
4974    abTypes: [BYTE; 1],
4975}}
4976pub type PEMRPOLYDRAW16 = *mut EMRPOLYDRAW16;
4977STRUCT!{struct EMRPOLYPOLYLINE {
4978    emr: EMR,
4979    rclBounds: RECTL,
4980    nPolys: DWORD,
4981    cptl: DWORD,
4982    aPolyCounts: [DWORD; 1],
4983    aptl: [POINTL; 1],
4984}}
4985pub type PEMRPOLYPOLYLINE = *mut EMRPOLYPOLYLINE;
4986pub type EMRPOLYPOLYGON = EMRPOLYPOLYLINE;
4987pub type PEMRPOLYPOLYGON = *mut EMRPOLYPOLYLINE;
4988STRUCT!{struct EMRPOLYPOLYLINE16 {
4989    emr: EMR,
4990    rclBounds: RECTL,
4991    nPolys: DWORD,
4992    cpts: DWORD,
4993    aPolyCounts: [DWORD; 1],
4994    apts: [POINTS; 1],
4995}}
4996pub type PEMRPOLYPOLYLINE16 = *mut EMRPOLYPOLYLINE16;
4997pub type EMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16;
4998pub type PEMRPOLYPOLYGON16 = *mut EMRPOLYPOLYLINE16;
4999STRUCT!{struct EMRINVERTRGN {
5000    emr: EMR,
5001    rclBounds: RECTL,
5002    cbRgnData: DWORD,
5003    RgnData: [BYTE; 1],
5004}}
5005pub type PEMRINVERTRGN = *mut EMRINVERTRGN;
5006pub type EMRPAINTRGN = EMRINVERTRGN;
5007pub type PEMRPAINTRGN = *mut EMRINVERTRGN;
5008STRUCT!{struct EMRFILLRGN {
5009    emr: EMR,
5010    rclBounds: RECTL,
5011    cbRgnData: DWORD,
5012    ihBrush: DWORD,
5013    RgnData: [BYTE; 1],
5014}}
5015pub type PEMRFILLRGN = *mut EMRFILLRGN;
5016STRUCT!{struct EMRFRAMERGN {
5017    emr: EMR,
5018    rclBounds: RECTL,
5019    cbRgnData: DWORD,
5020    ihBrush: DWORD,
5021    szlStroke: SIZEL,
5022    RgnData: [BYTE; 1],
5023}}
5024pub type PEMRFRAMERGN = *mut EMRFRAMERGN;
5025STRUCT!{struct EMREXTSELECTCLIPRGN {
5026    emr: EMR,
5027    cbRgnData: DWORD,
5028    iMode: DWORD,
5029    RgnData: [BYTE; 1],
5030}}
5031pub type PEMREXTSELECTCLIPRGN = *mut EMREXTSELECTCLIPRGN;
5032STRUCT!{struct EMREXTTEXTOUTA {
5033    emr: EMR,
5034    rclBounds: RECTL,
5035    iGraphicsMode: DWORD,
5036    exScale: FLOAT,
5037    eyScale: FLOAT,
5038    emrtext: EMRTEXT,
5039}}
5040pub type PEMREXTTEXTOUTA = *mut EMREXTTEXTOUTA;
5041pub type EMREXTTEXTOUTW = EMREXTTEXTOUTA;
5042pub type PEMREXTTEXTOUTW = *mut EMREXTTEXTOUTA;
5043STRUCT!{struct EMRPOLYTEXTOUTA {
5044    emr: EMR,
5045    rclBounds: RECTL,
5046    iGraphicsMode: DWORD,
5047    exScale: FLOAT,
5048    eyScale: FLOAT,
5049    cStrings: LONG,
5050    aemrtext: [EMRTEXT; 1],
5051}}
5052pub type PEMRPOLYTEXTOUTA = *mut EMRPOLYTEXTOUTA;
5053pub type EMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA;
5054pub type PEMRPOLYTEXTOUTW = *mut EMRPOLYTEXTOUTA;
5055STRUCT!{struct EMRBITBLT {
5056    emr: EMR,
5057    rclBounds: RECTL,
5058    xDest: LONG,
5059    yDest: LONG,
5060    cxDest: LONG,
5061    cyDest: LONG,
5062    dwRop: DWORD,
5063    xSrc: LONG,
5064    ySrc: LONG,
5065    xformSrc: XFORM,
5066    crBkColorSrc: COLORREF,
5067    iUsageSrc: DWORD,
5068    offBmiSrc: DWORD,
5069    cbBmiSrc: DWORD,
5070    offBitsSrc: DWORD,
5071    cbBitsSrc: DWORD,
5072}}
5073pub type PEMRBITBLT = *mut EMRBITBLT;
5074STRUCT!{struct EMRSTRETCHBLT {
5075    emr: EMR,
5076    rclBounds: RECTL,
5077    xDest: LONG,
5078    yDest: LONG,
5079    cxDest: LONG,
5080    cyDest: LONG,
5081    dwRop: DWORD,
5082    xSrc: LONG,
5083    ySrc: LONG,
5084    xformSrc: XFORM,
5085    crBkColorSrc: COLORREF,
5086    iUsageSrc: DWORD,
5087    offBmiSrc: DWORD,
5088    cbBmiSrc: DWORD,
5089    offBitsSrc: DWORD,
5090    cbBitsSrc: DWORD,
5091    cxSrc: LONG,
5092    cySrc: LONG,
5093}}
5094pub type PEMRSTRETCHBLT = *mut EMRSTRETCHBLT;
5095STRUCT!{struct EMRMASKBLT {
5096    emr: EMR,
5097    rclBounds: RECTL,
5098    xDest: LONG,
5099    yDest: LONG,
5100    cxDest: LONG,
5101    cyDest: LONG,
5102    dwRop: DWORD,
5103    xSrc: LONG,
5104    ySrc: LONG,
5105    xformSrc: XFORM,
5106    crBkColorSrc: COLORREF,
5107    iUsageSrc: DWORD,
5108    offBmiSrc: DWORD,
5109    cbBmiSrc: DWORD,
5110    offBitsSrc: DWORD,
5111    cbBitsSrc: DWORD,
5112    xMask: LONG,
5113    yMask: LONG,
5114    iUsageMask: DWORD,
5115    offBmiMask: DWORD,
5116    cbBmiMask: DWORD,
5117    offBitsMask: DWORD,
5118    cbBitsMask: DWORD,
5119}}
5120pub type PEMRMASKBLT = *mut EMRMASKBLT;
5121STRUCT!{struct EMRPLGBLT {
5122    emr: EMR,
5123    rclBounds: RECTL,
5124    aptlDest: [POINTL; 3],
5125    xSrc: LONG,
5126    ySrc: LONG,
5127    cxSrc: LONG,
5128    cySrc: LONG,
5129    xformSrc: XFORM,
5130    crBkColorSrc: COLORREF,
5131    iUsageSrc: DWORD,
5132    offBmiSrc: DWORD,
5133    cbBmiSrc: DWORD,
5134    offBitsSrc: DWORD,
5135    cbBitsSrc: DWORD,
5136    xMask: LONG,
5137    yMask: LONG,
5138    iUsageMask: DWORD,
5139    offBmiMask: DWORD,
5140    cbBmiMask: DWORD,
5141    offBitsMask: DWORD,
5142    cbBitsMask: DWORD,
5143}}
5144pub type PEMRPLGBLT = *mut EMRPLGBLT;
5145STRUCT!{struct EMRSETDIBITSTODEVICE {
5146    emr: EMR,
5147    rclBounds: RECTL,
5148    xDest: LONG,
5149    yDest: LONG,
5150    xSrc: LONG,
5151    ySrc: LONG,
5152    cxSrc: LONG,
5153    cySrc: LONG,
5154    offBmiSrc: DWORD,
5155    cbBmiSrc: DWORD,
5156    offBitsSrc: DWORD,
5157    cbBitsSrc: DWORD,
5158    iUsageSrc: DWORD,
5159    iStartScan: DWORD,
5160    cScans: DWORD,
5161}}
5162pub type PEMRSETDIBITSTODEVICE = *mut EMRSETDIBITSTODEVICE;
5163STRUCT!{struct EMRSTRETCHDIBITS {
5164    emr: EMR,
5165    rclBounds: RECTL,
5166    xDest: LONG,
5167    yDest: LONG,
5168    xSrc: LONG,
5169    ySrc: LONG,
5170    cxSrc: LONG,
5171    cySrc: LONG,
5172    offBmiSrc: DWORD,
5173    cbBmiSrc: DWORD,
5174    offBitsSrc: DWORD,
5175    cbBitsSrc: DWORD,
5176    iUsageSrc: DWORD,
5177    dwRop: DWORD,
5178    cxDest: LONG,
5179    cyDest: LONG,
5180}}
5181pub type PEMRSTRETCHDIBITS = *mut EMRSTRETCHDIBITS;
5182STRUCT!{struct EMREXTCREATEFONTINDIRECTW {
5183    emr: EMR,
5184    ihFont: DWORD,
5185    elfw: EXTLOGFONTW,
5186}}
5187pub type PEMREXTCREATEFONTINDIRECTW = *mut EMREXTCREATEFONTINDIRECTW;
5188STRUCT!{struct EMRCREATEPALETTE {
5189    emr: EMR,
5190    ihPal: DWORD,
5191    lgpl: LOGPALETTE,
5192}}
5193pub type PEMRCREATEPALETTE = *mut EMRCREATEPALETTE;
5194STRUCT!{struct EMRCREATEPEN {
5195    emr: EMR,
5196    ihPen: DWORD,
5197    lopn: LOGPEN,
5198}}
5199pub type PEMRCREATEPEN = *mut EMRCREATEPEN;
5200STRUCT!{struct EMREXTCREATEPEN {
5201    emr: EMR,
5202    ihPen: DWORD,
5203    offBmi: DWORD,
5204    cbBmi: DWORD,
5205    offBits: DWORD,
5206    cbBits: DWORD,
5207    elp: EXTLOGPEN32,
5208}}
5209pub type PEMREXTCREATEPEN = *mut EMREXTCREATEPEN;
5210STRUCT!{struct EMRCREATEBRUSHINDIRECT {
5211    emr: EMR,
5212    ihBrush: DWORD,
5213    lb: LOGBRUSH32,
5214}}
5215pub type PEMRCREATEBRUSHINDIRECT = *mut EMRCREATEBRUSHINDIRECT;
5216STRUCT!{struct EMRCREATEMONOBRUSH {
5217    emr: EMR,
5218    ihBrush: DWORD,
5219    iUsage: DWORD,
5220    offBmi: DWORD,
5221    cbBmi: DWORD,
5222    offBits: DWORD,
5223    cbBits: DWORD,
5224}}
5225pub type PEMRCREATEMONOBRUSH = *mut EMRCREATEMONOBRUSH;
5226STRUCT!{struct EMRCREATEDIBPATTERNBRUSHPT {
5227    emr: EMR,
5228    ihBrush: DWORD,
5229    iUsage: DWORD,
5230    offBmi: DWORD,
5231    cbBmi: DWORD,
5232    offBits: DWORD,
5233    cbBits: DWORD,
5234}}
5235pub type PEMRCREATEDIBPATTERNBRUSHPT = *mut EMRCREATEDIBPATTERNBRUSHPT;
5236STRUCT!{struct EMRFORMAT {
5237    dSignature: DWORD,
5238    nVersion: DWORD,
5239    cbData: DWORD,
5240    offData: DWORD,
5241}}
5242pub type PEMRFORMAT = *mut EMRFORMAT;
5243STRUCT!{struct EMRGLSRECORD {
5244    emr: EMR,
5245    cbData: DWORD,
5246    Data: [BYTE; 1],
5247}}
5248pub type PEMRGLSRECORD = *mut EMRGLSRECORD;
5249STRUCT!{struct EMRGLSBOUNDEDRECORD {
5250    emr: EMR,
5251    rclBounds: RECTL,
5252    cbData: DWORD,
5253    Data: [BYTE; 1],
5254}}
5255pub type PEMRGLSBOUNDEDRECORD = *mut EMRGLSBOUNDEDRECORD;
5256STRUCT!{struct EMRPIXELFORMAT {
5257    emr: EMR,
5258    pfd: PIXELFORMATDESCRIPTOR,
5259}}
5260pub type PEMRPIXELFORMAT = *mut EMRPIXELFORMAT;
5261STRUCT!{struct EMRCREATECOLORSPACE {
5262    emr: EMR,
5263    ihCS: DWORD,
5264    lcs: LOGCOLORSPACEA,
5265}}
5266pub type PEMRCREATECOLORSPACE = *mut EMRCREATECOLORSPACE;
5267STRUCT!{struct EMRSETCOLORSPACE {
5268    emr: EMR,
5269    ihCS: DWORD,
5270}}
5271pub type PEMRSETCOLORSPACE = *mut EMRSETCOLORSPACE;
5272pub type EMRSELECTCOLORSPACE = EMRSETCOLORSPACE;
5273pub type PEMRSELECTCOLORSPACE = *mut EMRSETCOLORSPACE;
5274pub type EMRDELETECOLORSPACE = EMRSETCOLORSPACE;
5275pub type PEMRDELETECOLORSPACE = *mut EMRSETCOLORSPACE;
5276STRUCT!{struct EMREXTESCAPE {
5277    emr: EMR,
5278    iEscape: INT,
5279    cbEscData: INT,
5280    EscData: [BYTE; 1],
5281}}
5282pub type PEMREXTESCAPE = *mut EMREXTESCAPE;
5283pub type EMRDRAWESCAPE = EMREXTESCAPE;
5284pub type PEMRDRAWESCAPE = *mut EMREXTESCAPE;
5285STRUCT!{struct EMRNAMEDESCAPE {
5286    emr: EMR,
5287    iEscape: INT,
5288    cbDriver: INT,
5289    cbEscData: INT,
5290    EscData: [BYTE; 1],
5291}}
5292pub type PEMRNAMEDESCAPE = *mut EMRNAMEDESCAPE;
5293pub const SETICMPROFILE_EMBEDED: DWORD = 0x00000001;
5294STRUCT!{struct EMRSETICMPROFILE {
5295    emr: EMR,
5296    dwFlags: DWORD,
5297    cbName: DWORD,
5298    cbData: DWORD,
5299    Data: [BYTE; 1],
5300}}
5301pub type PEMRSETICMPROFILE = *mut EMRSETICMPROFILE;
5302pub type EMRSETICMPROFILEA = EMRSETICMPROFILE;
5303pub type PEMRSETICMPROFILEA = *mut EMRSETICMPROFILE;
5304pub type EMRSETICMPROFILEW = EMRSETICMPROFILE;
5305pub type PEMRSETICMPROFILEW = *mut EMRSETICMPROFILE;
5306pub const CREATECOLORSPACE_EMBEDED: DWORD = 0x00000001;
5307STRUCT!{struct EMRCREATECOLORSPACEW {
5308    emr: EMR,
5309    ihCS: DWORD,
5310    lcs: LOGCOLORSPACEW,
5311    dwFlags: DWORD,
5312    cbData: DWORD,
5313    Data: [BYTE; 1],
5314}}
5315pub type PEMRCREATECOLORSPACEW = *mut EMRCREATECOLORSPACEW;
5316pub const COLORMATCHTOTARGET_EMBEDED: DWORD = 0x00000001;
5317STRUCT!{struct EMRCOLORMATCHTOTARGET {
5318    emr: EMR,
5319    dwAction: DWORD,
5320    dwFlags: DWORD,
5321    cbName: DWORD,
5322    cbData: DWORD,
5323    Data: [BYTE; 1],
5324}}
5325pub type PEMRCOLORMATCHTOTARGET = *mut EMRCOLORMATCHTOTARGET;
5326STRUCT!{struct EMRCOLORCORRECTPALETTE {
5327    emr: EMR,
5328    ihPalette: DWORD,
5329    nFirstEntry: DWORD,
5330    nPalEntries: DWORD,
5331    nReserved: DWORD,
5332}}
5333pub type PEMRCOLORCORRECTPALETTE = *mut EMRCOLORCORRECTPALETTE;
5334STRUCT!{struct EMRALPHABLEND {
5335    emr: EMR,
5336    rclBounds: RECTL,
5337    xDest: LONG,
5338    yDest: LONG,
5339    cxDest: LONG,
5340    cyDest: LONG,
5341    dwRop: DWORD,
5342    xSrc: LONG,
5343    ySrc: LONG,
5344    xformSrc: XFORM,
5345    crBkColorSrc: COLORREF,
5346    iUsageSrc: DWORD,
5347    offBmiSrc: DWORD,
5348    cbBmiSrc: DWORD,
5349    offBitsSrc: DWORD,
5350    cbBitsSrc: DWORD,
5351    cxSrc: LONG,
5352    cySrc: LONG,
5353}}
5354pub type PEMRALPHABLEND = *mut EMRALPHABLEND;
5355STRUCT!{struct EMRGRADIENTFILL {
5356    emr: EMR,
5357    rclBounds: RECTL,
5358    nVer: DWORD,
5359    nTri: DWORD,
5360    ulMode: ULONG,
5361    Ver: [TRIVERTEX; 1],
5362}}
5363pub type PEMRGRADIENTFILL = *mut EMRGRADIENTFILL;
5364STRUCT!{struct EMRTRANSPARENTBLT {
5365    emr: EMR,
5366    rclBounds: RECTL,
5367    xDest: LONG,
5368    yDest: LONG,
5369    cxDest: LONG,
5370    cyDest: LONG,
5371    dwRop: DWORD,
5372    xSrc: LONG,
5373    ySrc: LONG,
5374    xformSrc: XFORM,
5375    crBkColorSrc: COLORREF,
5376    iUsageSrc: DWORD,
5377    offBmiSrc: DWORD,
5378    cbBmiSrc: DWORD,
5379    offBitsSrc: DWORD,
5380    cbBitsSrc: DWORD,
5381    cxSrc: LONG,
5382    cySrc: LONG,
5383}}
5384pub type PEMRTRANSPARENTBLT = *mut EMRTRANSPARENTBLT;
5385pub const GDICOMMENT_IDENTIFIER: DWORD = 0x43494447;
5386pub const GDICOMMENT_WINDOWS_METAFILE: DWORD = 0x80000001;
5387pub const GDICOMMENT_BEGINGROUP: DWORD = 0x00000002;
5388pub const GDICOMMENT_ENDGROUP: DWORD = 0x00000003;
5389pub const GDICOMMENT_MULTIFORMATS: DWORD = 0x40000004;
5390pub const EPS_SIGNATURE: DWORD = 0x46535045;
5391pub const GDICOMMENT_UNICODE_STRING: DWORD = 0x00000040;
5392pub const GDICOMMENT_UNICODE_END: DWORD = 0x00000080;
5393extern "system" {
5394    pub fn wglCopyContext(
5395        hglrcSrc: HGLRC,
5396        hglrcDst: HGLRC,
5397        mask: UINT,
5398    ) -> BOOL;
5399    pub fn wglCreateContext(
5400        hdc: HDC,
5401    ) -> HGLRC;
5402    pub fn wglCreateLayerContext(
5403        hdc: HDC,
5404        iLayerPlane: c_int,
5405    ) -> HGLRC;
5406    pub fn wglDeleteContext(
5407        hglrc: HGLRC,
5408    ) -> BOOL;
5409    pub fn wglGetCurrentContext() -> HGLRC;
5410    pub fn wglGetCurrentDC() -> HDC;
5411    pub fn wglGetProcAddress(
5412        lpszProc: LPCSTR,
5413    ) -> PROC;
5414    pub fn wglMakeCurrent(
5415        hdc: HDC,
5416        hglrc: HGLRC,
5417    ) -> BOOL;
5418    pub fn wglShareLists(
5419        hglrc1: HGLRC,
5420        hglrc2: HGLRC,
5421    ) -> BOOL;
5422    pub fn wglUseFontBitmapsA(
5423        hdc: HDC,
5424        first: DWORD,
5425        count: DWORD,
5426        listBase: DWORD,
5427    ) -> BOOL;
5428    pub fn wglUseFontBitmapsW(
5429        hdc: HDC,
5430        first: DWORD,
5431        count: DWORD,
5432        listBase: DWORD,
5433    ) -> BOOL;
5434    pub fn SwapBuffers(
5435        hdc: HDC,
5436    ) -> BOOL;
5437}
5438STRUCT!{struct POINTFLOAT {
5439    x: FLOAT,
5440    y: FLOAT,
5441}}
5442pub type PPOINTFLOAT = *mut POINTFLOAT;
5443STRUCT!{struct GLYPHMETRICSFLOAT {
5444    gmfBlackBoxX: FLOAT,
5445    gmfBlackBoxY: FLOAT,
5446    gmfptGlyphOrigin: POINTFLOAT,
5447    gmfCellIncX: FLOAT,
5448    gmfCellIncY: FLOAT,
5449}}
5450pub type PGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT;
5451pub type LPGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT;
5452pub const WGL_FONT_LINES: DWORD = 0;
5453pub const WGL_FONT_POLYGONS: DWORD = 1;
5454extern "system" {
5455    pub fn wglUseFontOutlinesA(
5456        hdc: HDC,
5457        first: DWORD,
5458        count: DWORD,
5459        listBase: DWORD,
5460        deviation: FLOAT,
5461        extrusion: FLOAT,
5462        format: c_int,
5463        lpgmf: LPGLYPHMETRICSFLOAT,
5464    ) -> BOOL;
5465    pub fn wglUseFontOutlinesW(
5466        hdc: HDC,
5467        first: DWORD,
5468        count: DWORD,
5469        listBase: DWORD,
5470        deviation: FLOAT,
5471        extrusion: FLOAT,
5472        format: c_int,
5473        lpgmf: LPGLYPHMETRICSFLOAT,
5474    ) -> BOOL;
5475}
5476STRUCT!{struct LAYERPLANEDESCRIPTOR {
5477    nSize: WORD,
5478    nVersion: WORD,
5479    dwFlags: DWORD,
5480    iPixelType: BYTE,
5481    cColorBits: BYTE,
5482    cRedBits: BYTE,
5483    cRedShift: BYTE,
5484    cGreenBits: BYTE,
5485    cGreenShift: BYTE,
5486    cBlueBits: BYTE,
5487    cBlueShift: BYTE,
5488    cAlphaBits: BYTE,
5489    cAlphaShift: BYTE,
5490    cAccumBits: BYTE,
5491    cAccumRedBits: BYTE,
5492    cAccumGreenBits: BYTE,
5493    cAccumBlueBits: BYTE,
5494    cAccumAlphaBits: BYTE,
5495    cDepthBits: BYTE,
5496    cStencilBits: BYTE,
5497    cAuxBuffers: BYTE,
5498    iLayerPlane: BYTE,
5499    bReserved: BYTE,
5500    crTransparent: COLORREF,
5501}}
5502pub type PLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR;
5503pub type LPLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR;
5504pub const LPD_DOUBLEBUFFER: DWORD = 0x00000001;
5505pub const LPD_STEREO: DWORD = 0x00000002;
5506pub const LPD_SUPPORT_GDI: DWORD = 0x00000010;
5507pub const LPD_SUPPORT_OPENGL: DWORD = 0x00000020;
5508pub const LPD_SHARE_DEPTH: DWORD = 0x00000040;
5509pub const LPD_SHARE_STENCIL: DWORD = 0x00000080;
5510pub const LPD_SHARE_ACCUM: DWORD = 0x00000100;
5511pub const LPD_SWAP_EXCHANGE: DWORD = 0x00000200;
5512pub const LPD_SWAP_COPY: DWORD = 0x00000400;
5513pub const LPD_TRANSPARENT: DWORD = 0x00001000;
5514pub const LPD_TYPE_RGBA: BYTE = 0;
5515pub const LPD_TYPE_COLORINDEX: BYTE = 1;
5516pub const WGL_SWAP_MAIN_PLANE: UINT = 0x00000001;
5517pub const WGL_SWAP_OVERLAY1: UINT = 0x00000002;
5518pub const WGL_SWAP_OVERLAY2: UINT = 0x00000004;
5519pub const WGL_SWAP_OVERLAY3: UINT = 0x00000008;
5520pub const WGL_SWAP_OVERLAY4: UINT = 0x00000010;
5521pub const WGL_SWAP_OVERLAY5: UINT = 0x00000020;
5522pub const WGL_SWAP_OVERLAY6: UINT = 0x00000040;
5523pub const WGL_SWAP_OVERLAY7: UINT = 0x00000080;
5524pub const WGL_SWAP_OVERLAY8: UINT = 0x00000100;
5525pub const WGL_SWAP_OVERLAY9: UINT = 0x00000200;
5526pub const WGL_SWAP_OVERLAY10: UINT = 0x00000400;
5527pub const WGL_SWAP_OVERLAY11: UINT = 0x00000800;
5528pub const WGL_SWAP_OVERLAY12: UINT = 0x00001000;
5529pub const WGL_SWAP_OVERLAY13: UINT = 0x00002000;
5530pub const WGL_SWAP_OVERLAY14: UINT = 0x00004000;
5531pub const WGL_SWAP_OVERLAY15: UINT = 0x00008000;
5532pub const WGL_SWAP_UNDERLAY1: UINT = 0x00010000;
5533pub const WGL_SWAP_UNDERLAY2: UINT = 0x00020000;
5534pub const WGL_SWAP_UNDERLAY3: UINT = 0x00040000;
5535pub const WGL_SWAP_UNDERLAY4: UINT = 0x00080000;
5536pub const WGL_SWAP_UNDERLAY5: UINT = 0x00100000;
5537pub const WGL_SWAP_UNDERLAY6: UINT = 0x00200000;
5538pub const WGL_SWAP_UNDERLAY7: UINT = 0x00400000;
5539pub const WGL_SWAP_UNDERLAY8: UINT = 0x00800000;
5540pub const WGL_SWAP_UNDERLAY9: UINT = 0x01000000;
5541pub const WGL_SWAP_UNDERLAY10: UINT = 0x02000000;
5542pub const WGL_SWAP_UNDERLAY11: UINT = 0x04000000;
5543pub const WGL_SWAP_UNDERLAY12: UINT = 0x08000000;
5544pub const WGL_SWAP_UNDERLAY13: UINT = 0x10000000;
5545pub const WGL_SWAP_UNDERLAY14: UINT = 0x20000000;
5546pub const WGL_SWAP_UNDERLAY15: UINT = 0x40000000;
5547extern "system" {
5548    pub fn wglDescribeLayerPlane(
5549        hdc: HDC,
5550        iPixelFormat: c_int,
5551        iLayerPlane: c_int,
5552        nBytes: UINT,
5553        plpd: LPLAYERPLANEDESCRIPTOR,
5554    ) -> BOOL;
5555    pub fn wglSetLayerPaletteEntries(
5556        hdc: HDC,
5557        iLayerPlane: c_int,
5558        iStart: c_int,
5559        cEntries: c_int,
5560        pcr: *const COLORREF,
5561    ) -> c_int;
5562    pub fn wglGetLayerPaletteEntries(
5563        hdc: HDC,
5564        iLayerPlane: c_int,
5565        iStart: c_int,
5566        cEntries: c_int,
5567        pcr: *const COLORREF,
5568    ) -> c_int;
5569    pub fn wglRealizeLayerPalette(
5570        hdc: HDC,
5571        iLayerPlane: c_int,
5572        bRealize: BOOL,
5573    ) -> BOOL;
5574    pub fn wglSwapLayerBuffers(
5575        hdc: HDC,
5576        fuPlanes: UINT,
5577    ) -> BOOL;
5578}
5579STRUCT!{struct WGLSWAP {
5580    hdc: HDC,
5581    uiFlags: UINT,
5582}}
5583pub type PWGLSWAP = *mut WGLSWAP;
5584pub type LPWGLSWAP = *mut WGLSWAP;
5585pub const WGL_SWAPMULTIPLE_MAX: usize = 16;
5586extern "system" {
5587    pub fn wglSwapMultipleBuffers(
5588        n: UINT,
5589        ps: *const WGLSWAP,
5590    ) -> DWORD;
5591}