1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! GDI procedure declarations, constant definitions and macros
4 pub const DISPLAY_DEVICE_ATTACHED_TO_DESKTOP: ::DWORD = 0x00000001;
5 pub const DISPLAY_DEVICE_MULTI_DRIVER: ::DWORD = 0x00000002;
6 pub const DISPLAY_DEVICE_PRIMARY_DEVICE: ::DWORD = 0x00000004;
7 pub const DISPLAY_DEVICE_MIRRORING_DRIVER: ::DWORD = 0x00000008;
8 pub const DISPLAY_DEVICE_VGA_COMPATIBLE: ::DWORD = 0x00000010;
9 pub const DISPLAY_DEVICE_REMOVABLE: ::DWORD = 0x00000020;
10 pub const DISPLAY_DEVICE_ACC_DRIVER: ::DWORD = 0x00000040;
11 pub const DISPLAY_DEVICE_MODESPRUNED: ::DWORD = 0x08000000;
12 pub const DISPLAY_DEVICE_REMOTE: ::DWORD = 0x04000000;
13 pub const DISPLAY_DEVICE_DISCONNECT: ::DWORD = 0x02000000;
14 pub const DISPLAY_DEVICE_TS_COMPATIBLE: ::DWORD = 0x00200000;
15 pub const DISPLAY_DEVICE_UNSAFE_MODES_ON: ::DWORD = 0x00080000;
16 pub const DISPLAY_DEVICE_ACTIVE: ::DWORD = 0x00000001;
17 pub const DISPLAY_DEVICE_ATTACHED: ::DWORD = 0x00000002;
18 pub const DM_ORIENTATION: ::DWORD = 0x00000001;
19 pub const DM_PAPERSIZE: ::DWORD = 0x00000002;
20 pub const DM_PAPERLENGTH: ::DWORD = 0x00000004;
21 pub const DM_PAPERWIDTH: ::DWORD = 0x00000008;
22 pub const DM_SCALE: ::DWORD = 0x00000010;
23 pub const DM_POSITION: ::DWORD = 0x00000020;
24 pub const DM_NUP: ::DWORD = 0x00000040;
25 pub const DM_DISPLAYORIENTATION: ::DWORD = 0x00000080;
26 pub const DM_COPIES: ::DWORD = 0x00000100;
27 pub const DM_DEFAULTSOURCE: ::DWORD = 0x00000200;
28 pub const DM_PRINTQUALITY: ::DWORD = 0x00000400;
29 pub const DM_COLOR: ::DWORD = 0x00000800;
30 pub const DM_DUPLEX: ::DWORD = 0x00001000;
31 pub const DM_YRESOLUTION: ::DWORD = 0x00002000;
32 pub const DM_TTOPTION: ::DWORD = 0x00004000;
33 pub const DM_COLLATE: ::DWORD = 0x00008000;
34 pub const DM_FORMNAME: ::DWORD = 0x00010000;
35 pub const DM_LOGPIXELS: ::DWORD = 0x00020000;
36 pub const DM_BITSPERPEL: ::DWORD = 0x00040000;
37 pub const DM_PELSWIDTH: ::DWORD = 0x00080000;
38 pub const DM_PELSHEIGHT: ::DWORD = 0x00100000;
39 pub const DM_DISPLAYFLAGS: ::DWORD = 0x00200000;
40 pub const DM_DISPLAYFREQUENCY: ::DWORD = 0x00400000;
41 pub const DM_ICMMETHOD: ::DWORD = 0x00800000;
42 pub const DM_ICMINTENT: ::DWORD = 0x01000000;
43 pub const DM_MEDIATYPE: ::DWORD = 0x02000000;
44 pub const DM_DITHERTYPE: ::DWORD = 0x04000000;
45 pub const DM_PANNINGWIDTH: ::DWORD = 0x08000000;
46 pub const DM_PANNINGHEIGHT: ::DWORD = 0x10000000;
47 pub const DM_DISPLAYFIXEDOUTPUT: ::DWORD = 0x20000000;
48 pub const PFD_TYPE_RGBA: ::BYTE = 0;
49 pub const PFD_TYPE_COLORINDEX: ::BYTE = 1;
50 pub const PFD_MAIN_PLANE: ::BYTE = 0;
51 pub const PFD_OVERLAY_PLANE: ::BYTE = 1;
52 pub const PFD_UNDERLAY_PLANE: ::BYTE = 0xFF;
53 pub const PFD_DOUBLEBUFFER: ::DWORD = 0x00000001;
54 pub const PFD_STEREO: ::DWORD = 0x00000002;
55 pub const PFD_DRAW_TO_WINDOW: ::DWORD = 0x00000004;
56 pub const PFD_DRAW_TO_BITMAP: ::DWORD = 0x00000008;
57 pub const PFD_SUPPORT_GDI: ::DWORD = 0x00000010;
58 pub const PFD_SUPPORT_OPENGL: ::DWORD = 0x00000020;
59 pub const PFD_GENERIC_FORMAT: ::DWORD = 0x00000040;
60 pub const PFD_NEED_PALETTE: ::DWORD = 0x00000080;
61 pub const PFD_NEED_SYSTEM_PALETTE: ::DWORD = 0x00000100;
62 pub const PFD_SWAP_EXCHANGE: ::DWORD = 0x00000200;
63 pub const PFD_SWAP_COPY: ::DWORD = 0x00000400;
64 pub const PFD_SWAP_LAYER_BUFFERS: ::DWORD = 0x00000800;
65 pub const PFD_GENERIC_ACCELERATED: ::DWORD = 0x00001000;
66 pub const PFD_SUPPORT_DIRECTDRAW: ::DWORD = 0x00002000;
67 pub const PFD_DIRECT3D_ACCELERATED: ::DWORD = 0x00004000;
68 pub const PFD_SUPPORT_COMPOSITION: ::DWORD = 0x00008000;
69 pub const PFD_DEPTH_DONTCARE: ::DWORD = 0x20000000;
70 pub const PFD_DOUBLEBUFFER_DONTCARE: ::DWORD = 0x40000000;
71 pub const PFD_STEREO_DONTCARE: ::DWORD = 0x80000000;
72 pub const CCHFORMNAME: usize = 32;
73 STRUCT!{struct DEVMODEA {
74     dmDeviceName: [::CHAR; ::CCHDEVICENAME],
75     dmSpecVersion: ::WORD,
76     dmDriverVersion: ::WORD,
77     dmSize: ::WORD,
78     dmDriverExtra: ::WORD,
79     dmFields: ::DWORD,
80     union1: [u8; 16],
81     dmColor: ::c_short,
82     dmDuplex: ::c_short,
83     dmYResolution: ::c_short,
84     dmTTOption: ::c_short,
85     dmCollate: ::c_short,
86     dmFormName: [::CHAR; CCHFORMNAME],
87     dmLogPixels: ::WORD,
88     dmBitsPerPel: ::DWORD,
89     dmPelsWidth: ::DWORD,
90     dmPelsHeight: ::DWORD,
91     dmDisplayFlags: ::DWORD,
92     dmDisplayFrequency: ::DWORD,
93     dmICMMethod: ::DWORD,
94     dmICMIntent: ::DWORD,
95     dmMediaType: ::DWORD,
96     dmDitherType: ::DWORD,
97     dmReserved1: ::DWORD,
98     dmReserved2: ::DWORD,
99     dmPanningWidth: ::DWORD,
100     dmPanningHeight: ::DWORD,
101 }}
102 pub type PDEVMODEA = *mut DEVMODEA;
103 pub type NPDEVMODEA = *mut DEVMODEA;
104 pub type LPDEVMODEA = *mut DEVMODEA;
105 STRUCT!{struct DEVMODEW {
106     dmDeviceName: [::WCHAR; ::CCHDEVICENAME],
107     dmSpecVersion: ::WORD,
108     dmDriverVersion: ::WORD,
109     dmSize: ::WORD,
110     dmDriverExtra: ::WORD,
111     dmFields: ::DWORD,
112     union1: [u8; 16],
113     dmColor: ::c_short,
114     dmDuplex: ::c_short,
115     dmYResolution: ::c_short,
116     dmTTOption: ::c_short,
117     dmCollate: ::c_short,
118     dmFormName: [::WCHAR; CCHFORMNAME],
119     dmLogPixels: ::WORD,
120     dmBitsPerPel: ::DWORD,
121     dmPelsWidth: ::DWORD,
122     dmPelsHeight: ::DWORD,
123     dmDisplayFlags: ::DWORD,
124     dmDisplayFrequency: ::DWORD,
125     dmICMMethod: ::DWORD,
126     dmICMIntent: ::DWORD,
127     dmMediaType: ::DWORD,
128     dmDitherType: ::DWORD,
129     dmReserved1: ::DWORD,
130     dmReserved2: ::DWORD,
131     dmPanningWidth: ::DWORD,
132     dmPanningHeight: ::DWORD,
133 }}
134 pub type PDEVMODEW = *mut DEVMODEW;
135 pub type NPDEVMODEW = *mut DEVMODEW;
136 pub type LPDEVMODEW = *mut DEVMODEW;
137 STRUCT!{nodebug struct DISPLAY_DEVICEW {
138     cb: ::DWORD,
139     DeviceName: [::WCHAR; 32],
140     DeviceString: [::WCHAR; 128],
141     StateFlags: ::DWORD,
142     DeviceID: [::WCHAR; 128],
143     DeviceKey: [::WCHAR; 128],
144 }}
145 pub type PDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW;
146 pub type LPDISPLAY_DEVICEW = *mut DISPLAY_DEVICEW;
147 STRUCT!{nodebug struct DISPLAY_DEVICEA {
148     cb: ::DWORD,
149     DeviceName: [::CHAR; 32],
150     DeviceString: [::CHAR; 128],
151     StateFlags: ::DWORD,
152     DeviceID: [::CHAR; 128],
153     DeviceKey: [::CHAR; 128],
154 }}
155 pub type PDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA;
156 pub type LPDISPLAY_DEVICEA = *mut DISPLAY_DEVICEA;
157 STRUCT!{struct PIXELFORMATDESCRIPTOR {
158     nSize: ::WORD,
159     nVersion: ::WORD,
160     dwFlags: ::DWORD,
161     iPixelType: ::BYTE,
162     cColorBits: ::BYTE,
163     cRedBits: ::BYTE,
164     cRedShift: ::BYTE,
165     cGreenBits: ::BYTE,
166     cGreenShift: ::BYTE,
167     cBlueBits: ::BYTE,
168     cBlueShift: ::BYTE,
169     cAlphaBits: ::BYTE,
170     cAlphaShift: ::BYTE,
171     cAccumBits: ::BYTE,
172     cAccumRedBits: ::BYTE,
173     cAccumGreenBits: ::BYTE,
174     cAccumBlueBits: ::BYTE,
175     cAccumAlphaBits: ::BYTE,
176     cDepthBits: ::BYTE,
177     cStencilBits: ::BYTE,
178     cAuxBuffers: ::BYTE,
179     iLayerType: ::BYTE,
180     bReserved: ::BYTE,
181     dwLayerMask: ::DWORD,
182     dwVisibleMask: ::DWORD,
183     dwDamageMask: ::DWORD,
184 }}
185 pub type PPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR;
186 pub type LPPIXELFORMATDESCRIPTOR = *mut PIXELFORMATDESCRIPTOR;
187 pub const R2_BLACK: ::c_int = 1;
188 pub const R2_NOTMERGEPEN: ::c_int = 2;
189 pub const R2_MASKNOTPEN: ::c_int = 3;
190 pub const R2_NOTCOPYPEN: ::c_int = 4;
191 pub const R2_MASKPENNOT: ::c_int = 5;
192 pub const R2_NOT: ::c_int = 6;
193 pub const R2_XORPEN: ::c_int = 7;
194 pub const R2_NOTMASKPEN: ::c_int = 8;
195 pub const R2_MASKPEN: ::c_int = 9;
196 pub const R2_NOTXORPEN: ::c_int = 10;
197 pub const R2_NOP: ::c_int = 11;
198 pub const R2_MERGENOTPEN: ::c_int = 12;
199 pub const R2_COPYPEN: ::c_int = 13;
200 pub const R2_MERGEPENNOT: ::c_int = 14;
201 pub const R2_MERGEPEN: ::c_int = 15;
202 pub const R2_WHITE: ::c_int = 16;
203 pub const R2_LAST: ::c_int = 16;
204 //83
205 pub const SRCCOPY: ::DWORD = 0x00CC0020;
206 pub const SRCPAINT: ::DWORD = 0x00EE0086;
207 pub const SRCAND: ::DWORD = 0x008800C6;
208 pub const SRCINVERT: ::DWORD = 0x00660046;
209 pub const SRCERASE: ::DWORD = 0x00440328;
210 pub const NOTSRCCOPY: ::DWORD = 0x00330008;
211 pub const NOTSRCERASE: ::DWORD = 0x001100A6;
212 pub const MERGECOPY: ::DWORD = 0x00C000CA;
213 pub const MERGEPAINT: ::DWORD = 0x00BB0226;
214 pub const PATCOPY: ::DWORD = 0x00F00021;
215 pub const PATPAINT: ::DWORD = 0x00FB0A09;
216 pub const PATINVERT: ::DWORD = 0x005A0049;
217 pub const DSTINVERT: ::DWORD = 0x00550009;
218 pub const BLACKNESS: ::DWORD = 0x00000042;
219 pub const WHITENESS: ::DWORD = 0x00FF0062;
220 //121
221 // fnCombineMode values for CombineRgn
222 pub const RGN_AND: ::c_int = 1;
223 pub const RGN_OR: ::c_int = 2;
224 pub const RGN_XOR: ::c_int = 3;
225 pub const RGN_DIFF: ::c_int = 4;
226 pub const RGN_COPY: ::c_int = 5;
227 pub const RGN_MIN: ::c_int = RGN_AND;
228 pub const RGN_MAX: ::c_int = RGN_COPY;
229 //572 (Win 7 SDK)
230 STRUCT!{struct BITMAP {
231     bmType: ::LONG,
232     bmWidth: ::LONG,
233     bmHeight: ::LONG,
234     bmWidthBytes: ::LONG,
235     bmPlanes: ::WORD,
236     bmBitsPixel: ::WORD,
237     bmBits: ::LPVOID,
238 }}
239 pub type PBITMAP = *mut BITMAP;
240 pub type NPBITMAP = *mut BITMAP;
241 pub type LPBITMAP = *mut BITMAP;
242 STRUCT!{struct RGBQUAD {
243     rgbBlue: ::BYTE,
244     rgbGreen: ::BYTE,
245     rgbRed: ::BYTE,
246     rgbReserved: ::BYTE,
247 }}
248 pub type LPRGBQUAD = *mut RGBQUAD;
249 pub const CS_ENABLE: ::DWORD = 0x00000001;
250 pub const CS_DISABLE: ::DWORD = 0x00000002;
251 pub const CS_DELETE_TRANSFORM: ::DWORD = 0x00000003;
252 pub const LCS_SIGNATURE: ::DWORD = 0x5053_4F43; // 'PSOC'
253 pub const LCS_sRGB: LCSCSTYPE = 0x7352_4742; // 'sRGB'
254 pub const LCS_WINDOWS_COLOR_SPACE: LCSCSTYPE = 0x5769_6E20; // 'Win '
255 pub type LCSCSTYPE = ::LONG;
256 pub const LCS_CALIBRATED_RGB: LCSCSTYPE = 0x00000000;
257 pub type LCSGAMUTMATCH = ::LONG;
258 pub const LCS_GM_BUSINESS: LCSGAMUTMATCH = 0x00000001;
259 pub const LCS_GM_GRAPHICS: LCSGAMUTMATCH = 0x00000002;
260 pub const LCS_GM_IMAGES: LCSGAMUTMATCH = 0x00000004;
261 pub const LCS_GM_ABS_COLORIMETRIC: LCSGAMUTMATCH = 0x00000008;
262 pub const CM_OUT_OF_GAMUT: ::BYTE = 255;
263 pub const CM_IN_GAMUT: ::BYTE = 0;
264 pub const ICM_ADDPROFILE: ::UINT = 1;
265 pub const ICM_DELETEPROFILE: ::UINT = 2;
266 pub const ICM_QUERYPROFILE: ::UINT = 3;
267 pub const ICM_SETDEFAULTPROFILE: ::UINT = 4;
268 pub const ICM_REGISTERICMATCHER: ::UINT = 5;
269 pub const ICM_UNREGISTERICMATCHER: ::UINT = 6;
270 pub const ICM_QUERYMATCH: ::UINT = 7;
271 pub type FXPT16DOT16 = ::c_long;
272 pub type LPFXPT16DOT16 = *mut ::c_long;
273 pub type FXPT2DOT30 = ::c_long;
274 pub type LPFXPT2DOT30 = *mut ::c_long;
275 STRUCT!{struct CIEXYZ {
276     ciexyzX: FXPT2DOT30,
277     ciexyzY: FXPT2DOT30,
278     ciexyzZ: FXPT2DOT30,
279 }}
280 pub type LPCIEXYZ = *mut CIEXYZ;
281 STRUCT!{struct CIEXYZTRIPLE {
282     ciexyzRed: CIEXYZ,
283     ciexyzGreen: CIEXYZ,
284     ciexyzBlue: CIEXYZ,
285 }}
286 pub type LPCIEXYZTRIPLE = *mut CIEXYZTRIPLE;
287 //716 (Win 7 SDK)
288 STRUCT!{struct BITMAPINFOHEADER {
289     biSize: ::DWORD,
290     biWidth: ::LONG,
291     biHeight: ::LONG,
292     biPlanes: ::WORD,
293     biBitCount: ::WORD,
294     biCompression: ::DWORD,
295     biSizeImage: ::DWORD,
296     biXPelsPerMeter: ::LONG,
297     biYPelsPerMeter: ::LONG,
298     biClrUsed: ::DWORD,
299     biClrImportant: ::DWORD,
300 }}
301 pub type LPBITMAPINFOHEADER = *mut BITMAPINFOHEADER;
302 pub type PBITMAPINFOHEADER = *mut BITMAPINFOHEADER;
303 STRUCT!{struct BITMAPV5HEADER {
304     bV5Size: ::DWORD,
305     bV5Width: ::LONG,
306     bV5Height: ::LONG,
307     bV5Planes: ::WORD,
308     bV5BitCount: ::WORD,
309     bV5Compression: ::DWORD,
310     bV5SizeImage: ::DWORD,
311     bV5XPelsPerMeter: ::LONG,
312     bV5YPelsPerMeter: ::LONG,
313     bV5ClrUsed: ::DWORD,
314     bV5ClrImportant: ::DWORD,
315     bV5RedMask: ::DWORD,
316     bV5GreenMask: ::DWORD,
317     bV5BlueMask: ::DWORD,
318     bV5AlphaMask: ::DWORD,
319     bV5CSType: ::LONG, // LONG to match LOGCOLORSPACE
320     bV5Endpoints: CIEXYZTRIPLE,
321     bV5GammaRed: ::DWORD,
322     bV5GammaGreen: ::DWORD,
323     bV5GammaBlue: ::DWORD,
324     bV5Intent: ::LONG, // LONG to match LOGCOLORSPACE
325     bV5ProfileData: ::DWORD,
326     bV5ProfileSize: ::DWORD,
327     bV5Reserved: ::DWORD,
328 }}
329 pub type LPBITMAPV5HEADER = *mut BITMAPV5HEADER;
330 pub type PBITMAPV5HEADER = *mut BITMAPV5HEADER;
331 pub const PROFILE_LINKED: ::LONG = 0x4C49_4E4B; // 'LINK'
332 pub const PROFILE_EMBEDDED: ::LONG = 0x4D42_4544; // 'MBED'
333 pub const BI_RGB: ::DWORD = 0;
334 pub const BI_RLE8: ::DWORD = 1;
335 pub const BI_RLE4: ::DWORD = 2;
336 pub const BI_BITFIELDS: ::DWORD = 3;
337 pub const BI_JPEG: ::DWORD = 4;
338 pub const BI_PNG: ::DWORD = 5;
339 STRUCT!{struct BITMAPINFO {
340     bmiHeader: BITMAPINFOHEADER,
341     bmiColors: [RGBQUAD; 0],
342 }}
343 pub type LPBITMAPINFO = *mut BITMAPINFO;
344 pub type PBITMAPINFO = *mut BITMAPINFO;
345 //1438
346 pub const LF_FACESIZE: usize = 32;
347 STRUCT!{nodebug struct LOGFONTA {
348     lfHeight: ::LONG,
349     lfWidth: ::LONG,
350     lfEscapement: ::LONG,
351     lfOrientation: ::LONG,
352     lfWeight: ::LONG,
353     lfItalic: ::BYTE,
354     lfUnderline: ::BYTE,
355     lfStrikeOut: ::BYTE,
356     lfCharSet: ::BYTE,
357     lfOutPrecision: ::BYTE,
358     lfClipPrecision: ::BYTE,
359     lfQuality: ::BYTE,
360     lfPitchAndFamily: ::BYTE,
361     lfFaceName: [::CHAR; LF_FACESIZE],
362 }}
363 pub type LPLOGFONTA = *mut LOGFONTA;
364 STRUCT!{nodebug struct LOGFONTW {
365     lfHeight: ::LONG,
366     lfWidth: ::LONG,
367     lfEscapement: ::LONG,
368     lfOrientation: ::LONG,
369     lfWeight: ::LONG,
370     lfItalic: ::BYTE,
371     lfUnderline: ::BYTE,
372     lfStrikeOut: ::BYTE,
373     lfCharSet: ::BYTE,
374     lfOutPrecision: ::BYTE,
375     lfClipPrecision: ::BYTE,
376     lfQuality: ::BYTE,
377     lfPitchAndFamily: ::BYTE,
378     lfFaceName: [::WCHAR; LF_FACESIZE],
379 }}
380 pub type LPLOGFONTW = *mut LOGFONTW;
381 //1595
382 #[inline]
RGB(r: ::BYTE, g: ::BYTE, b: ::BYTE) -> ::COLORREF383 pub fn RGB (r: ::BYTE, g: ::BYTE, b: ::BYTE) -> ::COLORREF {
384   r as ::COLORREF | ((g as ::COLORREF) << 8) | ((b as ::COLORREF) << 16)
385 }
386 //
387 pub const DRIVERVERSION: ::c_int = 0;
388 pub const TECHNOLOGY: ::c_int = 2;
389 pub const HORZSIZE: ::c_int = 4;
390 pub const VERTSIZE: ::c_int = 6;
391 pub const HORZRES: ::c_int = 8;
392 pub const VERTRES: ::c_int = 10;
393 pub const BITSPIXEL: ::c_int = 12;
394 pub const PLANES: ::c_int = 14;
395 pub const NUMBRUSHES: ::c_int = 16;
396 pub const NUMPENS: ::c_int = 18;
397 pub const NUMMARKERS: ::c_int = 20;
398 pub const NUMFONTS: ::c_int = 22;
399 pub const NUMCOLORS: ::c_int = 24;
400 pub const PDEVICESIZE: ::c_int = 26;
401 pub const CURVECAPS: ::c_int = 28;
402 pub const LINECAPS: ::c_int = 30;
403 pub const POLYGONALCAPS: ::c_int = 32;
404 pub const TEXTCAPS: ::c_int = 34;
405 pub const CLIPCAPS: ::c_int = 36;
406 pub const RASTERCAPS: ::c_int = 38;
407 pub const ASPECTX: ::c_int = 40;
408 pub const ASPECTY: ::c_int = 42;
409 pub const ASPECTXY: ::c_int = 44;
410 pub const LOGPIXELSX: ::c_int = 88;
411 pub const LOGPIXELSY: ::c_int = 90;
412 pub const SIZEPALETTE: ::c_int = 104;
413 pub const NUMRESERVED: ::c_int = 106;
414 pub const COLORRES: ::c_int = 108;
415 pub const PHYSICALWIDTH: ::c_int = 110;
416 pub const PHYSICALHEIGHT: ::c_int = 111;
417 pub const PHYSICALOFFSETX: ::c_int = 112;
418 pub const PHYSICALOFFSETY: ::c_int = 113;
419 pub const SCALINGFACTORX: ::c_int = 114;
420 pub const SCALINGFACTORY: ::c_int = 115;
421 pub const VREFRESH: ::c_int = 116;
422 pub const DESKTOPVERTRES: ::c_int = 117;
423 pub const DESKTOPHORZRES: ::c_int = 118;
424 pub const BLTALIGNMENT: ::c_int = 119;
425 pub const SHADEBLENDCAPS: ::c_int = 120;
426 pub const COLORMGMTCAPS: ::c_int = 121;
427 //1906
428 pub const DIB_RGB_COLORS: ::UINT = 0;
429 pub const DIB_PAL_COLORS: ::UINT = 1;
430 pub const CBM_INIT: ::DWORD = 4;
431 STRUCT!{struct RGNDATAHEADER {
432     dwSize: ::DWORD,
433     iType: ::DWORD,
434     nCount: ::DWORD,
435     nRgnSize: ::DWORD,
436     rcBound: ::RECT,
437 }}
438 pub type PRGNDATAHEADER = *mut RGNDATAHEADER;
439 STRUCT!{nodebug struct RGNDATA {
440     rdh: RGNDATAHEADER,
441     Buffer: [::c_char; 0],
442 }}
443 pub type PRGNDATA = *mut RGNDATA;
444 pub type NPRGNDATA = *mut RGNDATA;
445 pub type LPRGNDATA = *mut RGNDATA;
446 STRUCT!{struct PALETTEENTRY {
447     peRed: ::BYTE,
448     peGreen: ::BYTE,
449     peBlue: ::BYTE,
450     peFlags: ::BYTE,
451 }}
452 pub type PPALETTEENTRY = *mut PALETTEENTRY;
453 pub type LPPALETTEENTRY = *mut PALETTEENTRY;
454 //2824 (Win 7 SDK)
455 STRUCT!{struct ABC {
456     abcA: ::c_int,
457     abcB: ::UINT,
458     abcC: ::c_int,
459 }}
460 pub type PABC = *mut ABC;
461 pub type NPABC = *mut ABC;
462 pub type LPABC = *mut ABC;
463 STRUCT!{struct ABCFLOAT {
464     abcfA: ::FLOAT,
465     abcfB: ::FLOAT,
466     abcfC: ::FLOAT,
467 }}
468 pub type PABCFLOAT = *mut ABCFLOAT;
469 pub type NPABCFLOAT = *mut ABCFLOAT;
470 pub type LPABCFLOAT = *mut ABCFLOAT;
471 //3581
472 pub type LINEDDAPROC = Option<unsafe extern "system" fn(::c_int, ::c_int, ::LPARAM)>;
473 STRUCT!{struct XFORM {
474     eM11: ::FLOAT,
475     eM12: ::FLOAT,
476     eM21: ::FLOAT,
477     eM22: ::FLOAT,
478     eDx: ::FLOAT,
479     eDy: ::FLOAT,
480 }}
481 pub type PXFORM = *mut XFORM;
482 pub type LPXFORM = *mut XFORM;
483 STRUCT!{struct LOGBRUSH {
484     lbStyle: ::UINT,
485     lbColor: ::COLORREF,
486     lbHatch: ::ULONG_PTR,
487 }}
488 pub type PLOGBRUSH = *mut LOGBRUSH;
489 STRUCT!{nodebug struct LOGCOLORSPACEA {
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: [::CHAR; ::MAX_PATH],
500 }}
501 pub type LPLOGCOLORSPACEA = *mut LOGCOLORSPACEA;
502 STRUCT!{nodebug struct LOGCOLORSPACEW {
503     lcsSignature: ::DWORD,
504     lcsVersion: ::DWORD,
505     lcsSize: ::DWORD,
506     lcsCSType: LCSCSTYPE,
507     lcsIntent: LCSGAMUTMATCH,
508     lcsEndpoints: CIEXYZTRIPLE,
509     lcsGammaRed: ::DWORD,
510     lcsGammaGreen: ::DWORD,
511     lcsGammaBlue: ::DWORD,
512     lcsFilename: [::WCHAR; ::MAX_PATH],
513 }}
514 pub type LPLOGCOLORSPACEW = *mut LOGCOLORSPACEW;
515 pub const LF_FULLFACESIZE: usize = 64;
516 STRUCT!{nodebug struct ENUMLOGFONTEXA {
517     elfLogFont: LOGFONTA,
518     elfFullName: [::BYTE; LF_FULLFACESIZE],
519     elfStyle: [::BYTE; LF_FACESIZE],
520     elfScript: [::BYTE; LF_FACESIZE],
521 }}
522 pub type LPENUMLOGFONTEXA = *mut ENUMLOGFONTEXA;
523 STRUCT!{nodebug struct ENUMLOGFONTEXW {
524     elfLogFont: LOGFONTW,
525     elfFullName: [::WCHAR; LF_FULLFACESIZE],
526     elfStyle: [::WCHAR; LF_FACESIZE],
527     elfScript: [::WCHAR; LF_FACESIZE],
528 }}
529 pub type LPENUMLOGFONTEXW = *mut ENUMLOGFONTEXW;
530 pub const MM_MAX_NUMAXES: usize = 16;
531 STRUCT!{struct DESIGNVECTOR {
532     dvReserved: ::DWORD,
533     dvNumAxes: ::DWORD,
534     dvValues: [::LONG; MM_MAX_NUMAXES],
535 }}
536 pub type PDESIGNVECTOR = *mut DESIGNVECTOR;
537 pub type LPDESIGNVECTOR = *mut DESIGNVECTOR;
538 STRUCT!{nodebug struct ENUMLOGFONTEXDVA {
539     elfEnumLogfontEx: ENUMLOGFONTEXA,
540     elfDesignVector: DESIGNVECTOR,
541 }}
542 pub type PENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA;
543 pub type LPENUMLOGFONTEXDVA = *mut ENUMLOGFONTEXDVA;
544 STRUCT!{nodebug struct ENUMLOGFONTEXDVW {
545     elfEnumLogfontEx: ENUMLOGFONTEXW,
546     elfDesignVector: DESIGNVECTOR,
547 }}
548 pub type PENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW;
549 pub type LPENUMLOGFONTEXDVW = *mut ENUMLOGFONTEXDVW;
550 STRUCT!{struct LOGPALETTE {
551     palVersion: ::WORD,
552     palNumEntries: ::WORD,
553     palPalEntry: [PALETTEENTRY; 1],
554 }}
555 pub type PLOGPALETTE = *mut LOGPALETTE;
556 pub type NPLOGPALETTE = *mut LOGPALETTE;
557 pub type LPLOGPALETTE = *mut LOGPALETTE;
558 STRUCT!{struct LOGPEN {
559     lopnStyle: ::UINT,
560     lopnWidth: ::POINT,
561     lopnColor: ::COLORREF,
562 }}
563 pub type PLOGPEN = *mut LOGPEN;
564 pub type NPLOGPEN = *mut LOGPEN;
565 pub type LPLOGPEN = *mut LOGPEN;
566 STRUCT!{struct BLENDFUNCTION {
567     BlendOp: ::BYTE,
568     BlendFlags: ::BYTE,
569     SourceConstantAlpha: ::BYTE,
570     AlphaFormat: ::BYTE,
571 }}
572 pub type PBLENDFUNCTION = *mut BLENDFUNCTION;
573 pub const TMPF_FIXED_PITCH: ::BYTE = 0x01;
574 pub const TMPF_VECTOR: ::BYTE = 0x02;
575 pub const TMPF_DEVICE: ::BYTE = 0x08;
576 pub const TMPF_TRUETYPE: ::BYTE = 0x04;
577 STRUCT!{struct TEXTMETRICA {
578     tmHeight: ::LONG,
579     tmAscent: ::LONG,
580     tmDescent: ::LONG,
581     tmInternalLeading: ::LONG,
582     tmExternalLeading: ::LONG,
583     tmAveCharWidth: ::LONG,
584     tmMaxCharWidth: ::LONG,
585     tmWeight: ::LONG,
586     tmOverhang: ::LONG,
587     tmDigitizedAspectX: ::LONG,
588     tmDigitizedAspectY: ::LONG,
589     tmFirstChar: ::BYTE,
590     tmLastChar: ::BYTE,
591     tmDefaultChar: ::BYTE,
592     tmBreakChar: ::BYTE,
593     tmItalic: ::BYTE,
594     tmUnderlined: ::BYTE,
595     tmStruckOut: ::BYTE,
596     tmPitchAndFamily: ::BYTE,
597     tmCharSet: ::BYTE,
598 }}
599 pub type PTEXTMETRICA = *mut TEXTMETRICA;
600 pub type NPTEXTMETRICA = *mut TEXTMETRICA;
601 pub type LPTEXTMETRICA = *mut TEXTMETRICA;
602 STRUCT!{struct TEXTMETRICW {
603     tmHeight: ::LONG,
604     tmAscent: ::LONG,
605     tmDescent: ::LONG,
606     tmInternalLeading: ::LONG,
607     tmExternalLeading: ::LONG,
608     tmAveCharWidth: ::LONG,
609     tmMaxCharWidth: ::LONG,
610     tmWeight: ::LONG,
611     tmOverhang: ::LONG,
612     tmDigitizedAspectX: ::LONG,
613     tmDigitizedAspectY: ::LONG,
614     tmFirstChar: ::WCHAR,
615     tmLastChar: ::WCHAR,
616     tmDefaultChar: ::WCHAR,
617     tmBreakChar: ::WCHAR,
618     tmItalic: ::BYTE,
619     tmUnderlined: ::BYTE,
620     tmStruckOut: ::BYTE,
621     tmPitchAndFamily: ::BYTE,
622     tmCharSet: ::BYTE,
623 }}
624 pub type PTEXTMETRICW = *mut TEXTMETRICW;
625 pub type NPTEXTMETRICW = *mut TEXTMETRICW;
626 pub type LPTEXTMETRICW = *mut TEXTMETRICW;
627 pub const TA_NOUPDATECP: ::UINT = 0;
628 pub const TA_UPDATECP: ::UINT = 1;
629 pub const TA_LEFT: ::UINT = 0;
630 pub const TA_RIGHT: ::UINT = 2;
631 pub const TA_CENTER: ::UINT = 6;
632 pub const TA_TOP: ::UINT = 0;
633 pub const TA_BOTTOM: ::UINT = 8;
634 pub const TA_BASELINE: ::UINT = 24;
635 pub const TA_RTLREADING: ::UINT = 256;
636 pub const TA_MASK: ::UINT = TA_BASELINE + TA_CENTER + TA_UPDATECP + TA_RTLREADING;
637 pub const WHITE_BRUSH: ::c_int = 0;
638 pub const LTGRAY_BRUSH: ::c_int = 1;
639 pub const GRAY_BRUSH: ::c_int = 2;
640 pub const DKGRAY_BRUSH: ::c_int = 3;
641 pub const BLACK_BRUSH: ::c_int = 4;
642 pub const NULL_BRUSH: ::c_int = 5;
643 pub const HOLLOW_BRUSH: ::c_int = 5;
644 pub const WHITE_PEN: ::c_int = 6;
645 pub const BLACK_PEN: ::c_int = 7;
646 pub const NULL_PEN: ::c_int = 8;
647 pub const OEM_FIXED_FONT: ::c_int = 10;
648 pub const ANSI_FIXED_FONT: ::c_int = 11;
649 pub const ANSI_VAR_FONT: ::c_int = 12;
650 pub const SYSTEM_FONT: ::c_int = 13;
651 pub const DEVICE_DEFAULT_FONT: ::c_int = 14;
652 pub const DEFAULT_PALETTE: ::c_int = 15;
653 pub const SYSTEM_FIXED_FONT: ::c_int = 16;
654 pub const DEFAULT_GUI_FONT: ::c_int = 17;
655 pub const DC_BRUSH: ::c_int = 18;
656 pub const DC_PEN: ::c_int = 19;
657 pub const STOCK_LAST: ::c_int = 19;pub const PS_SOLID: ::c_int = 0;
658 pub const PS_DASH: ::c_int = 1;
659 pub const PS_DOT: ::c_int = 2;
660 pub const PS_DASHDOT: ::c_int = 3;
661 pub const PS_DASHDOTDOT: ::c_int = 4;
662 pub const PS_NULL: ::c_int = 5;
663 pub const PS_INSIDEFRAME: ::c_int = 6;
664 pub const PS_USERSTYLE: ::c_int = 7;
665 pub const PS_ALTERNATE: ::c_int = 8;
666 pub const TRANSPARENT: ::c_int = 1;
667 pub const OPAQUE: ::c_int = 2;
668 pub const BKMODE_LAST: ::c_int = 2;
669 pub const MM_TEXT: ::c_int = 1;
670 pub const MM_LOMETRIC: ::c_int = 2;
671 pub const MM_HIMETRIC: ::c_int = 3;
672 pub const MM_LOENGLISH: ::c_int = 4;
673 pub const MM_HIENGLISH: ::c_int = 5;
674 pub const MM_TWIPS: ::c_int = 6;
675 pub const MM_ISOTROPIC: ::c_int = 7;
676 pub const MM_ANISOTROPIC: ::c_int = 8;
677 pub const ALTERNATE: ::c_int = 1;
678 pub const WINDING: ::c_int = 2;
679 pub const POLYFILL_LAST: ::c_int = 2;
680 pub const OUT_DEFAULT_PRECIS: ::DWORD = 0;
681 pub const OUT_STRING_PRECIS: ::DWORD = 1;
682 pub const OUT_CHARACTER_PRECIS: ::DWORD = 2;
683 pub const OUT_STROKE_PRECIS: ::DWORD = 3;
684 pub const OUT_TT_PRECIS: ::DWORD = 4;
685 pub const OUT_DEVICE_PRECIS: ::DWORD = 5;
686 pub const OUT_RASTER_PRECIS: ::DWORD = 6;
687 pub const OUT_TT_ONLY_PRECIS: ::DWORD = 7;
688 pub const OUT_OUTLINE_PRECIS: ::DWORD = 8;
689 pub const OUT_SCREEN_OUTLINE_PRECIS: ::DWORD = 9;
690 pub const OUT_PS_ONLY_PRECIS: ::DWORD = 10;
691 pub const CLIP_DEFAULT_PRECIS: ::DWORD = 0;
692 pub const CLIP_CHARACTER_PRECIS: ::DWORD = 1;
693 pub const CLIP_STROKE_PRECIS: ::DWORD = 2;
694 pub const CLIP_MASK: ::DWORD = 0xf;
695 pub const CLIP_LH_ANGLES: ::DWORD = 1 << 4;
696 pub const CLIP_TT_ALWAYS: ::DWORD = 2 << 4;
697 pub const CLIP_DFA_DISABLE: ::DWORD = 4 << 4;
698 pub const CLIP_EMBEDDED: ::DWORD = 8 << 4;
699 pub const DEFAULT_QUALITY: ::DWORD = 0;
700 pub const DRAFT_QUALITY: ::DWORD = 1;
701 pub const PROOF_QUALITY: ::DWORD = 2;
702 pub const NONANTIALIASED_QUALITY: ::DWORD = 3;
703 pub const ANTIALIASED_QUALITY: ::DWORD = 4;
704 pub const CLEARTYPE_QUALITY: ::DWORD = 5;
705 pub const CLEARTYPE_NATURAL_QUALITY: ::DWORD = 6;
706 pub const DEFAULT_PITCH: ::DWORD = 0;
707 pub const FIXED_PITCH: ::DWORD = 1;
708 pub const VARIABLE_PITCH: ::DWORD = 2;
709 pub const FF_DONTCARE: ::DWORD = 0 << 4;
710 pub const FF_ROMAN: ::DWORD = 1 << 4;
711 pub const FF_SWISS: ::DWORD = 2 << 4;
712 pub const FF_MODERN: ::DWORD = 3 << 4;
713 pub const FF_SCRIPT: ::DWORD = 4 << 4;
714 pub const FF_DECORATIVE: ::DWORD = 5 << 4;
715 pub const MONO_FONT: ::DWORD = 8;
716 pub const ANSI_CHARSET: ::DWORD = 0;
717 pub const DEFAULT_CHARSET: ::DWORD = 1;
718 pub const SYMBOL_CHARSET: ::DWORD = 2;
719 pub const SHIFTJIS_CHARSET: ::DWORD = 128;
720 pub const HANGEUL_CHARSET: ::DWORD = 129;
721 pub const HANGUL_CHARSET: ::DWORD = 129;
722 pub const GB2312_CHARSET: ::DWORD = 134;
723 pub const CHINESEBIG5_CHARSET: ::DWORD = 136;
724 pub const OEM_CHARSET: ::DWORD = 255;
725 pub const JOHAB_CHARSET: ::DWORD = 130;
726 pub const HEBREW_CHARSET: ::DWORD = 177;
727 pub const ARABIC_CHARSET: ::DWORD = 178;
728 pub const GREEK_CHARSET: ::DWORD = 161;
729 pub const TURKISH_CHARSET: ::DWORD = 162;
730 pub const VIETNAMESE_CHARSET: ::DWORD = 163;
731 pub const THAI_CHARSET: ::DWORD = 222;
732 pub const EASTEUROPE_CHARSET: ::DWORD = 238;
733 pub const RUSSIAN_CHARSET: ::DWORD = 204;
734 pub const MAC_CHARSET: ::DWORD = 77;
735 pub const BALTIC_CHARSET: ::DWORD = 186;
736 pub const FS_LATIN1: ::DWORD = 0x00000001;
737 pub const FS_LATIN2: ::DWORD = 0x00000002;
738 pub const FS_CYRILLIC: ::DWORD = 0x00000004;
739 pub const FS_GREEK: ::DWORD = 0x00000008;
740 pub const FS_TURKISH: ::DWORD = 0x00000010;
741 pub const FS_HEBREW: ::DWORD = 0x00000020;
742 pub const FS_ARABIC: ::DWORD = 0x00000040;
743 pub const FS_BALTIC: ::DWORD = 0x00000080;
744 pub const FS_VIETNAMESE: ::DWORD = 0x00000100;
745 pub const FS_THAI: ::DWORD = 0x00010000;
746 pub const FS_JISJAPAN: ::DWORD = 0x00020000;
747 pub const FS_CHINESESIMP: ::DWORD = 0x00040000;
748 pub const FS_WANSUNG: ::DWORD = 0x00080000;
749 pub const FS_CHINESETRAD: ::DWORD = 0x00100000;
750 pub const FS_JOHAB: ::DWORD = 0x00200000;
751 pub const FS_SYMBOL: ::DWORD = 0x80000000;
752 pub const FW_DONTCARE: ::c_int = 0;
753 pub const FW_THIN: ::c_int = 100;
754 pub const FW_EXTRALIGHT: ::c_int = 200;
755 pub const FW_LIGHT: ::c_int = 300;
756 pub const FW_NORMAL: ::c_int = 400;
757 pub const FW_MEDIUM: ::c_int = 500;
758 pub const FW_SEMIBOLD: ::c_int = 600;
759 pub const FW_BOLD: ::c_int = 700;
760 pub const FW_EXTRABOLD: ::c_int = 800;
761 pub const FW_HEAVY: ::c_int = 900;
762 pub const FW_ULTRALIGHT: ::c_int = FW_EXTRALIGHT;
763 pub const FW_REGULAR: ::c_int = FW_NORMAL;
764 pub const FW_DEMIBOLD: ::c_int = FW_SEMIBOLD;
765 pub const FW_ULTRABOLD: ::c_int = FW_EXTRABOLD;
766 pub const FW_BLACK: ::c_int = FW_HEAVY;
767 pub type COLOR16 = ::c_ushort;
768 STRUCT!{struct TRIVERTEX {
769     x: ::LONG,
770     y: ::LONG,
771     Red: COLOR16,
772     Green: COLOR16,
773     Blue: COLOR16,
774     Alpha: COLOR16,
775 }}
776 pub type PTRIVERTEX = *mut TRIVERTEX;
777 pub type LPTRIVERTEX = *mut TRIVERTEX;
778 STRUCT!{struct GRADIENT_RECT {
779     UpperLeft: ::ULONG,
780     LowerRight: ::ULONG,
781 }}
782 pub type PGRADIENT_RECT = *mut GRADIENT_RECT;
783 pub type LPGRADIENT_RECT = *mut GRADIENT_RECT;
784 /* Object Definitions for EnumObjects() */
785 pub const OBJ_PEN: ::UINT = 1;
786 pub const OBJ_BRUSH: ::UINT = 2;
787 pub const OBJ_DC: ::UINT = 3;
788 pub const OBJ_METADC: ::UINT = 4;
789 pub const OBJ_PAL: ::UINT = 5;
790 pub const OBJ_FONT: ::UINT = 6;
791 pub const OBJ_BITMAP: ::UINT = 7;
792 pub const OBJ_REGION: ::UINT = 8;
793 pub const OBJ_METAFILE: ::UINT = 9;
794 pub const OBJ_MEMDC: ::UINT = 10;
795 pub const OBJ_EXTPEN: ::UINT = 11;
796 pub const OBJ_ENHMETADC: ::UINT = 12;
797 pub const OBJ_ENHMETAFILE: ::UINT = 13;
798 pub const OBJ_COLORSPACE: ::UINT = 14;
799 pub const GDI_OBJ_LAST: ::UINT = OBJ_COLORSPACE;
800 STRUCT!{struct COLORADJUSTMENT {
801     caSize: ::WORD,
802     caFlags: ::WORD,
803     caIlluminantIndex: ::WORD,
804     caRedGamma: ::WORD,
805     caGreenGamma: ::WORD,
806     caBlueGamma: ::WORD,
807     caReferenceBlack: ::WORD,
808     caReferenceWhite: ::WORD,
809     caContrast: ::SHORT,
810     caBrightness: ::SHORT,
811     caColorfulness: ::SHORT,
812     caRedGreenTint: ::SHORT,
813 }}
814 pub type PCOLORADJUSTMENT = *mut COLORADJUSTMENT;
815 pub type LPCOLORADJUSTMENT = *mut COLORADJUSTMENT;
816 pub type OLDFONTENUMPROCA = Option<unsafe extern "system" fn(
817     *const LOGFONTA, *const ::VOID, ::DWORD, ::LPARAM
818 ) -> ::c_int>;
819 pub type OLDFONTENUMPROCW = Option<unsafe extern "system" fn(
820     *const LOGFONTW, *const ::VOID, ::DWORD, ::LPARAM
821 ) -> ::c_int>;
822 pub type FONTENUMPROCA = OLDFONTENUMPROCA;
823 pub type FONTENUMPROCW = OLDFONTENUMPROCW;
824 STRUCT!{struct WCRANGE {
825     wcLow: ::WCHAR,
826     cGlyphs: ::USHORT,
827 }}
828 pub type PWCRANGE = *mut WCRANGE;
829 pub type LPWCRANGE = *mut WCRANGE;
830 STRUCT!{struct GLYPHSET {
831     cbThis: ::DWORD,
832     flAccel: ::DWORD,
833     cGlyphsSupported: ::DWORD,
834     cRanges: ::DWORD,
835     ranges: [WCRANGE;1],
836 }}
837 pub type PGLYPHSET = *mut GLYPHSET;
838 pub type LPGLYPHSET = *mut GLYPHSET;
839 pub type ABORTPROC = Option<unsafe extern "system" fn(::HDC, ::c_int) -> ::BOOL>;
840 STRUCT!{struct DOCINFOA {
841     cbSize: ::c_int,
842     lpszDocName: ::LPCSTR,
843     lpszOutput: ::LPCSTR,
844     lpszDatatype: ::LPCSTR,
845     fwType: ::DWORD,
846 }}
847 pub type LPDOCINFOA = *mut DOCINFOA;
848 STRUCT!{struct DOCINFOW {
849     cbSize: ::c_int,
850     lpszDocName: ::LPCWSTR,
851     lpszOutput: ::LPCWSTR,
852     lpszDatatype: ::LPCWSTR,
853     fwType: ::DWORD,
854 }}
855 pub type LPDOCINFOW = *mut DOCINFOW;
856 pub type ICMENUMPROCA = Option<unsafe extern "system" fn(::LPSTR, ::LPARAM) -> ::c_int>;
857 pub type ICMENUMPROCW = Option<unsafe extern "system" fn(::LPWSTR, ::LPARAM) -> ::c_int>;
858 STRUCT!{struct HANDLETABLE {
859     objectHandle: [::HGDIOBJ; 1],
860 }}
861 pub type LPHANDLETABLE = *mut HANDLETABLE;
862 pub type PHANDLETABLE = *mut HANDLETABLE;
863 STRUCT!{struct METARECORD {
864     rdSize: ::DWORD,
865     rdFunction: ::WORD,
866     rdParm: [::WORD; 1],
867 }}
868 pub type PMETARECORD = *mut METARECORD;
869 pub type LPMETARECORD = *mut METARECORD;
870 pub type MFENUMPROC = Option<unsafe extern "system" fn(
871     hdc: ::HDC, lpht: *mut ::HANDLETABLE, lpMR: *mut ::METARECORD, nObj: ::c_int, param: ::LPARAM
872 ) -> ::c_int>;
873 pub type GOBJENUMPROC = Option<unsafe extern "system" fn(::LPVOID, ::LPARAM) -> ::c_int>;
874 STRUCT!{struct GCP_RESULTSA {
875     lStructSize: ::DWORD,
876     lpOutString: ::LPSTR,
877     lpOrder: *const ::UINT,
878     lpDx: *const ::c_int,
879     lpCaretPos: *const ::c_int,
880     lpClass: ::LPSTR,
881     lpGlyphs: ::LPWSTR,
882     nGlyphs: ::UINT,
883     nMaxFit: ::c_int,
884 }}
885 pub type LPGCP_RESULTSA = *mut GCP_RESULTSA;
886 STRUCT!{struct GCP_RESULTSW {
887     lStructSize: ::DWORD,
888     lpOutString: ::LPWSTR,
889     lpOrder: *const ::UINT,
890     lpDx: *const ::c_int,
891     lpCaretPos: *const ::c_int,
892     lpClass: ::LPSTR,
893     lpGlyphs: ::LPWSTR,
894     nGlyphs: ::UINT,
895     nMaxFit: ::c_int,
896 }}
897 pub type LPGCP_RESULTSW = *mut GCP_RESULTSW;
898 STRUCT!{struct FONTSIGNATURE {
899     fsUsb: [::DWORD; 4],
900     fsCsb: [::DWORD; 2],
901 }}
902 pub type LPFONTSIGNATURE = *mut FONTSIGNATURE;
903 pub type PFONTSIGNATURE = *mut FONTSIGNATURE;
904 STRUCT!{struct POLYTEXTA {
905     x: ::c_int,
906     y: ::c_int,
907     n: ::UINT,
908     lpstr: ::LPCSTR,
909     uiFlags: ::UINT,
910     rcl: ::RECT,
911     pdx: *const ::c_int,
912 }}
913 pub type PPOLYTEXTA = *mut POLYTEXTA;
914 pub type NPPOLYTEXTA = *mut POLYTEXTA;
915 pub type LPPOLYTEXTA = *mut POLYTEXTA;
916 STRUCT!{struct POLYTEXTW {
917     x: ::c_int,
918     y: ::c_int,
919     n: ::UINT,
920     lpstr: ::LPCWSTR,
921     uiFlags: ::UINT,
922     rcl: ::RECT,
923     pdx: *const ::c_int,
924 }}
925 pub type PPOLYTEXTW = *mut POLYTEXTW;
926 pub type NPPOLYTEXTW = *mut POLYTEXTW;
927 pub type LPPOLYTEXTW = *mut POLYTEXTW;
928 STRUCT!{struct CHARSETINFO {
929     ciCharset: ::UINT,
930     ciACP: ::UINT,
931     fs: ::FONTSIGNATURE,
932 }}
933 pub type PCHARSETINFO = *mut CHARSETINFO;
934 pub type NPCHARSETINFO = *mut CHARSETINFO;
935 pub type LPCHARSETINFO = *mut CHARSETINFO;
936 pub const GRADIENT_FILL_RECT_H: ::ULONG = 0x00000000;
937 pub const GRADIENT_FILL_RECT_V: ::ULONG = 0x00000001;
938 pub const GRADIENT_FILL_TRIANGLE: ::ULONG = 0x00000002;
939 pub const GRADIENT_FILL_OP_FLAG: ::ULONG = 0x000000ff;
940 STRUCT!{struct LAYERPLANEDESCRIPTOR {
941     nSize: ::WORD,
942     nVersion: ::WORD,
943     dwFlags: ::DWORD,
944     iPixelType: ::BYTE,
945     cColorBits: ::BYTE,
946     cRedBits: ::BYTE,
947     cRedShift: ::BYTE,
948     cGreenBits: ::BYTE,
949     cGreenShift: ::BYTE,
950     cBlueBits: ::BYTE,
951     cBlueShift: ::BYTE,
952     cAlphaBits: ::BYTE,
953     cAlphaShift: ::BYTE,
954     cAccumBits: ::BYTE,
955     cAccumRedBits: ::BYTE,
956     cAccumGreenBits: ::BYTE,
957     cAccumBlueBits: ::BYTE,
958     cAccumAlphaBits: ::BYTE,
959     cDepthBits: ::BYTE,
960     cStencilBits: ::BYTE,
961     cAuxBuffers: ::BYTE,
962     iLayerPlane: ::BYTE,
963     bReserved: ::BYTE,
964     crTransparent: ::COLORREF,
965 }}
966 pub type PLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR;
967 pub type LPLAYERPLANEDESCRIPTOR = *mut LAYERPLANEDESCRIPTOR;
968 STRUCT!{struct ENHMETAHEADER {
969     iType: ::DWORD,
970     nSize: ::DWORD,
971     rclBounds: ::RECTL,
972     rclFrame: ::RECTL,
973     dSignature: ::DWORD,
974     nVersion: ::DWORD,
975     nBytes: ::DWORD,
976     nRecords: ::DWORD,
977     nHandles: ::WORD,
978     sReserved: ::WORD,
979     nDescription: ::DWORD,
980     offDescription: ::DWORD,
981     nPalEntries: ::DWORD,
982     szlDevice: ::SIZEL,
983     szlMillimeters: ::SIZEL,
984     cbPixelFormat: ::DWORD,
985     offPixelFormat: ::DWORD,
986     bOpenGL: ::DWORD,
987     szlMicrometers: ::SIZEL,
988 }}
989 pub type PENHMETAHEADER = *mut ENHMETAHEADER;
990 pub type LPENHMETAHEADER = *mut ENHMETAHEADER;
991 STRUCT!{struct FIXED {
992     fract: ::WORD,
993     value: ::c_short,
994 }}
995 STRUCT!{struct MAT2 {
996     eM11: FIXED,
997     eM12: FIXED,
998     eM21: FIXED,
999     eM22: FIXED,
1000 }}
1001 pub type LPMAT2 = *mut MAT2;
1002 STRUCT!{struct GLYPHMETRICS {
1003     gmBlackBoxX: ::UINT,
1004     gmBlackBoxY: ::UINT,
1005     gmptGlyphOrigin: ::POINT,
1006     gmCellIncX: ::c_short,
1007     gmCellIncY: ::c_short,
1008 }}
1009 pub type LPGLYPHMETRICS = *mut GLYPHMETRICS;
1010 STRUCT!{struct KERNINGPAIR {
1011      wFirst: ::WORD,
1012      wSecond: ::WORD,
1013      iKernAmount: ::c_int,
1014 }}
1015 pub type LPKERNINGPAIR = *mut KERNINGPAIR;
1016 STRUCT!{struct PANOSE {
1017     bFamilyType: ::BYTE,
1018     bSerifStyle: ::BYTE,
1019     bWeight: ::BYTE,
1020     bProportion: ::BYTE,
1021     bContrast: ::BYTE,
1022     bStrokeVariation: ::BYTE,
1023     bArmStyle: ::BYTE,
1024     bLetterform: ::BYTE,
1025     bMidline: ::BYTE,
1026     bXHeight: ::BYTE,
1027 }}
1028 pub type LPPANOSE = *mut PANOSE;
1029 STRUCT!{struct OUTLINETEXTMETRICA {
1030     otmSize: ::UINT,
1031     otmTextMetrics: TEXTMETRICA,
1032     otmFiller: ::BYTE,
1033     otmPanoseNumber: ::PANOSE,
1034     otmfsSelection: ::UINT,
1035     otmfsType: ::UINT,
1036     otmsCharSlopeRise: ::c_int,
1037     otmsCharSlopeRun: ::c_int,
1038     otmItalicAngle: ::c_int,
1039     otmEMSquare: ::UINT,
1040     otmAscent: ::c_int,
1041     otmDescent: ::c_int,
1042     otmLineGap: ::UINT,
1043     otmsCapEmHeight: ::UINT,
1044     otmsXHeight: ::UINT,
1045     otmrcFontBox: ::RECT,
1046     otmMacAscent: ::c_int,
1047     otmMacDescent: ::c_int,
1048     otmMacLineGap: ::UINT,
1049     otmusMinimumPPEM: ::UINT,
1050     otmptSubscriptSize: ::POINT,
1051     otmptSubscriptOffset: ::POINT,
1052     otmptSuperscriptSize: ::POINT,
1053     otmptSuperscriptOffset: ::POINT,
1054     otmsStrikeoutSize: ::UINT,
1055     otmsStrikeoutPosition: ::c_int,
1056     otmsUnderscoreSize: ::c_int,
1057     otmsUnderscorePosition: ::c_int,
1058     otmpFamilyName: ::PSTR,
1059     otmpFaceName: ::PSTR,
1060     otmpStyleName: ::PSTR,
1061     otmpFullName: ::PSTR,
1062 }}
1063 pub type POUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
1064 pub type NPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
1065 pub type LPOUTLINETEXTMETRICA = *mut OUTLINETEXTMETRICA;
1066 STRUCT!{struct OUTLINETEXTMETRICW {
1067     otmSize: ::UINT,
1068     otmTextMetrics: TEXTMETRICW,
1069     otmFiller: ::BYTE,
1070     otmPanoseNumber: ::PANOSE,
1071     otmfsSelection: ::UINT,
1072     otmfsType: ::UINT,
1073     otmsCharSlopeRise: ::c_int,
1074     otmsCharSlopeRun: ::c_int,
1075     otmItalicAngle: ::c_int,
1076     otmEMSquare: ::UINT,
1077     otmAscent: ::c_int,
1078     otmDescent: ::c_int,
1079     otmLineGap: ::UINT,
1080     otmsCapEmHeight: ::UINT,
1081     otmsXHeight: ::UINT,
1082     otmrcFontBox: ::RECT,
1083     otmMacAscent: ::c_int,
1084     otmMacDescent: ::c_int,
1085     otmMacLineGap: ::UINT,
1086     otmusMinimumPPEM: ::UINT,
1087     otmptSubscriptSize: ::POINT,
1088     otmptSubscriptOffset: ::POINT,
1089     otmptSuperscriptSize: ::POINT,
1090     otmptSuperscriptOffset: ::POINT,
1091     otmsStrikeoutSize: ::UINT,
1092     otmsStrikeoutPosition: ::c_int,
1093     otmsUnderscoreSize: ::c_int,
1094     otmsUnderscorePosition: ::c_int,
1095     otmpFamilyName: ::PSTR,
1096     otmpFaceName: ::PSTR,
1097     otmpStyleName: ::PSTR,
1098     otmpFullName: ::PSTR,
1099 }}
1100 pub type POUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
1101 pub type NPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
1102 pub type LPOUTLINETEXTMETRICW = *mut OUTLINETEXTMETRICW;
1103 STRUCT!{struct RASTERIZER_STATUS {
1104     nSize: ::c_short,
1105     wFlags: ::c_short,
1106     nLanguageID: ::c_short,
1107 }}
1108 pub type LPRASTERIZER_STATUS = *mut RASTERIZER_STATUS;
1109 STRUCT!{struct ENHMETARECORD {
1110     iType: ::DWORD,
1111     nSize: ::DWORD,
1112     dParm: [::DWORD; 1],
1113 }}
1114 pub type PENHMETARECORD = *mut ENHMETARECORD;
1115 pub type LPENHMETARECORD = *mut ENHMETARECORD;
1116 STRUCT!{struct METAFILEPICT {
1117     mm: ::LONG,
1118     xExt: ::LONG,
1119     yExt: ::LONG,
1120     hMF: ::HMETAFILE,
1121 }}
1122 pub type LPMETAFILEPICT = *mut METAFILEPICT;
1123 STRUCT!{struct POINTFLOAT {
1124     x: ::FLOAT,
1125     y: ::FLOAT,
1126 }}
1127 pub type PPOINTFLOAT = *mut POINTFLOAT;
1128 STRUCT!{struct GLYPHMETRICSFLOAT {
1129     gmfBlackBoxX: ::FLOAT,
1130     gmfBlackBoxY: ::FLOAT,
1131     gmfptGlyphOrigin: POINTFLOAT,
1132     gmfCellIncX: ::FLOAT,
1133     gmfCellIncY: ::FLOAT,
1134 }}
1135 pub type PGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT;
1136 pub type LPGLYPHMETRICSFLOAT = *mut GLYPHMETRICSFLOAT;
1137 pub const DT_PLOTTER: ::c_int = 0;
1138 pub const DT_RASDISPLAY: ::c_int = 1;
1139 pub const DT_RASPRINTER: ::c_int = 2;
1140 pub const DT_RASCAMERA: ::c_int = 3;
1141 pub const DT_CHARSTREAM: ::c_int = 4;
1142 pub const DT_METAFILE: ::c_int = 5;
1143 pub const DT_DISPFILE: ::c_int = 6;
1144 pub const CLR_INVALID: ::COLORREF = 0xFFFFFFFF;
1145 pub const ETO_OPAQUE: ::UINT = 0x0002;
1146 pub const ETO_CLIPPED: ::UINT = 0x0004;
1147 pub const ETO_GLYPH_INDEX: ::UINT = 0x0010;
1148 pub const ETO_RTLREADING: ::UINT = 0x0080;
1149 pub const ETO_NUMERICSLOCAL: ::UINT = 0x0400;
1150 pub const ETO_NUMERICSLATIN: ::UINT = 0x0800;
1151 pub const ETO_IGNORELANGUAGE: ::UINT = 0x1000;
1152 pub const ETO_PDY: ::UINT = 0x2000;
1153 pub const ETO_REVERSE_INDEX_MAP: ::UINT = 0x10000;
1154 STRUCT!{struct EXTLOGPEN {
1155     elpPenStyle: ::DWORD,
1156     elpWidth: ::DWORD,
1157     elpBrushStyle: ::UINT,
1158     elpColor: ::COLORREF,
1159     elpHatch: ::ULONG_PTR,
1160     elpNumEntries: ::DWORD,
1161     elpStyleEntry: [::DWORD; 1],
1162 }}
1163 pub type PEXTLOGPEN = *mut EXTLOGPEN;
1164 pub type NPEXTLOGPEN = *mut EXTLOGPEN;
1165 pub type LPEXTLOGPEN = *mut EXTLOGPEN;
1166 pub type ENHMFENUMPROC = Option<unsafe extern "system" fn(
1167     hdc: ::HDC, lpht: HANDLETABLE, lpmr: *const ENHMETARECORD, nHandles: ::c_int, data: ::LPARAM
1168 ) -> ::c_int>;
1169 /* Metafile Functions */
1170 pub const META_SETBKCOLOR: ::WORD = 0x0201;
1171 pub const META_SETBKMODE: ::WORD = 0x0102;
1172 pub const META_SETMAPMODE: ::WORD = 0x0103;
1173 pub const META_SETROP2: ::WORD = 0x0104;
1174 pub const META_SETRELABS: ::WORD = 0x0105;
1175 pub const META_SETPOLYFILLMODE: ::WORD = 0x0106;
1176 pub const META_SETSTRETCHBLTMODE: ::WORD = 0x0107;
1177 pub const META_SETTEXTCHAREXTRA: ::WORD = 0x0108;
1178 pub const META_SETTEXTCOLOR: ::WORD = 0x0209;
1179 pub const META_SETTEXTJUSTIFICATION: ::WORD = 0x020A;
1180 pub const META_SETWINDOWORG: ::WORD = 0x020B;
1181 pub const META_SETWINDOWEXT: ::WORD = 0x020C;
1182 pub const META_SETVIEWPORTORG: ::WORD = 0x020D;
1183 pub const META_SETVIEWPORTEXT: ::WORD = 0x020E;
1184 pub const META_OFFSETWINDOWORG: ::WORD = 0x020F;
1185 pub const META_SCALEWINDOWEXT: ::WORD = 0x0410;
1186 pub const META_OFFSETVIEWPORTORG: ::WORD = 0x0211;
1187 pub const META_SCALEVIEWPORTEXT: ::WORD = 0x0412;
1188 pub const META_LINETO: ::WORD = 0x0213;
1189 pub const META_MOVETO: ::WORD = 0x0214;
1190 pub const META_EXCLUDECLIPRECT: ::WORD = 0x0415;
1191 pub const META_INTERSECTCLIPRECT: ::WORD = 0x0416;
1192 pub const META_ARC: ::WORD = 0x0817;
1193 pub const META_ELLIPSE: ::WORD = 0x0418;
1194 pub const META_FLOODFILL: ::WORD = 0x0419;
1195 pub const META_PIE: ::WORD = 0x081A;
1196 pub const META_RECTANGLE: ::WORD = 0x041B;
1197 pub const META_ROUNDRECT: ::WORD = 0x061C;
1198 pub const META_PATBLT: ::WORD = 0x061D;
1199 pub const META_SAVEDC: ::WORD = 0x001E;
1200 pub const META_SETPIXEL: ::WORD = 0x041F;
1201 pub const META_OFFSETCLIPRGN: ::WORD = 0x0220;
1202 pub const META_TEXTOUT: ::WORD = 0x0521;
1203 pub const META_BITBLT: ::WORD = 0x0922;
1204 pub const META_STRETCHBLT: ::WORD = 0x0B23;
1205 pub const META_POLYGON: ::WORD = 0x0324;
1206 pub const META_POLYLINE: ::WORD = 0x0325;
1207 pub const META_ESCAPE: ::WORD = 0x0626;
1208 pub const META_RESTOREDC: ::WORD = 0x0127;
1209 pub const META_FILLREGION: ::WORD = 0x0228;
1210 pub const META_FRAMEREGION: ::WORD = 0x0429;
1211 pub const META_INVERTREGION: ::WORD = 0x012A;
1212 pub const META_PAINTREGION: ::WORD = 0x012B;
1213 pub const META_SELECTCLIPREGION: ::WORD = 0x012C;
1214 pub const META_SELECTOBJECT: ::WORD = 0x012D;
1215 pub const META_SETTEXTALIGN: ::WORD = 0x012E;
1216 pub const META_CHORD: ::WORD = 0x0830;
1217 pub const META_SETMAPPERFLAGS: ::WORD = 0x0231;
1218 pub const META_EXTTEXTOUT: ::WORD = 0x0a32;
1219 pub const META_SETDIBTODEV: ::WORD = 0x0d33;
1220 pub const META_SELECTPALETTE: ::WORD = 0x0234;
1221 pub const META_REALIZEPALETTE: ::WORD = 0x0035;
1222 pub const META_ANIMATEPALETTE: ::WORD = 0x0436;
1223 pub const META_SETPALENTRIES: ::WORD = 0x0037;
1224 pub const META_POLYPOLYGON: ::WORD = 0x0538;
1225 pub const META_RESIZEPALETTE: ::WORD = 0x0139;
1226 pub const META_DIBBITBLT: ::WORD = 0x0940;
1227 pub const META_DIBSTRETCHBLT: ::WORD = 0x0b41;
1228 pub const META_DIBCREATEPATTERNBRUSH: ::WORD = 0x0142;
1229 pub const META_STRETCHDIB: ::WORD = 0x0f43;
1230 pub const META_EXTFLOODFILL: ::WORD = 0x0548;
1231 pub const META_SETLAYOUT: ::WORD = 0x0149;
1232 pub const META_DELETEOBJECT: ::WORD = 0x01f0;
1233 pub const META_CREATEPALETTE: ::WORD = 0x00f7;
1234 pub const META_CREATEPATTERNBRUSH: ::WORD = 0x01F9;
1235 pub const META_CREATEPENINDIRECT: ::WORD = 0x02FA;
1236 pub const META_CREATEFONTINDIRECT: ::WORD = 0x02FB;
1237 pub const META_CREATEBRUSHINDIRECT: ::WORD = 0x02FC;
1238 pub const META_CREATEREGION: ::WORD = 0x06FF;
1239