1 // Copyright © 2015-2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 use ctypes::{c_char, c_int, c_long, c_short, c_void};
8 use shared::basetsd::{DWORD_PTR, INT_PTR, LONG_PTR, UINT_PTR};
9 #[cfg(target_arch = "x86_64")] use shared::basetsd::PINT_PTR;
10 use shared::guiddef::{IID, REFIID};
11 use shared::minwindef::{
12     BOOL, BYTE, DWORD, HINSTANCE, HKEY, INT, LPARAM, LPINT, LRESULT, PUINT, UINT, ULONG, WORD,
13     WPARAM,
14 };
15 use shared::windef::{
16     COLORREF, HBITMAP, HBRUSH, HDC, HICON, HMENU, HPEN, HWND, LPCRECT, LPRECT, POINT, RECT, SIZE,
17 };
18 use um::commoncontrols::IImageList;
19 use um::minwinbase::SYSTEMTIME;
20 use um::winnt::{CHAR, LANGID, LONG, LPCSTR, LPCWSTR, LPSTR, LPWSTR, PCWSTR, PVOID, PWSTR, WCHAR};
21 use um::winuser::{
22     CB_DELETESTRING, IMAGE_BITMAP, LPSCROLLINFO, LPTRACKMOUSEEVENT, NMHDR,
23     WINDOWPOS, WM_USER,
24 };
25 use vc::vcruntime::size_t;
26 pub type HRESULT = c_long;
27 extern "system" {
InitCommonControls()28     pub fn InitCommonControls();
29 }
30 //138
31 STRUCT!{struct INITCOMMONCONTROLSEX {
32     dwSize: DWORD,
33     dwICC: DWORD,
34 }}
35 pub type LPINITCOMMONCONTROLSEX = *mut INITCOMMONCONTROLSEX;
36 pub const ICC_LISTVIEW_CLASSES: DWORD = 0x1;
37 pub const ICC_TREEVIEW_CLASSES: DWORD = 0x2;
38 pub const ICC_BAR_CLASSES: DWORD = 0x4;
39 pub const ICC_TAB_CLASSES: DWORD = 0x8;
40 pub const ICC_UPDOWN_CLASS: DWORD = 0x10;
41 pub const ICC_PROGRESS_CLASS: DWORD = 0x20;
42 pub const ICC_HOTKEY_CLASS: DWORD = 0x40;
43 pub const ICC_ANIMATE_CLASS: DWORD = 0x80;
44 pub const ICC_WIN95_CLASSES: DWORD = 0xFF;
45 pub const ICC_DATE_CLASSES: DWORD = 0x100;
46 pub const ICC_USEREX_CLASSES: DWORD = 0x200;
47 pub const ICC_COOL_CLASSES: DWORD = 0x400;
48 pub const ICC_INTERNET_CLASSES: DWORD = 0x800;
49 pub const ICC_PAGESCROLLER_CLASS: DWORD = 0x1000;
50 pub const ICC_NATIVEFNTCTL_CLASS: DWORD = 0x2000;
51 pub const ICC_STANDARD_CLASSES: DWORD = 0x4000;
52 pub const ICC_LINK_CLASS: DWORD = 0x8000;
53 extern "system" {
InitCommonControlsEx( lpInitCtrls: *const INITCOMMONCONTROLSEX, ) -> BOOL54     pub fn InitCommonControlsEx(
55         lpInitCtrls: *const INITCOMMONCONTROLSEX,
56     ) -> BOOL;
57 }
58 pub const ODT_HEADER: UINT = 100;
59 pub const ODT_TAB: UINT = 101;
60 pub const ODT_LISTVIEW: UINT = 102;
61 pub const LVM_FIRST: UINT = 0x1000;
62 pub const TV_FIRST: UINT = 0x1100;
63 pub const HDM_FIRST: UINT = 0x1200;
64 pub const TCM_FIRST: UINT = 0x1300;
65 pub const PGM_FIRST: UINT = 0x1400;
66 pub const ECM_FIRST: UINT = 0x1500;
67 pub const BCM_FIRST: UINT = 0x1600;
68 pub const CBM_FIRST: UINT = 0x1700;
69 pub const CCM_FIRST: UINT = 0x2000;
70 pub const CCM_LAST: UINT = CCM_FIRST + 0x200;
71 pub const CCM_SETBKCOLOR: UINT = CCM_FIRST + 1;
72 STRUCT!{struct COLORSCHEME {
73     dwSize: DWORD,
74     clrBtnHighlight: COLORREF,
75     clrBtnShadow: COLORREF,
76 }}
77 pub type LPCOLORSCHEME = *mut COLORSCHEME;
78 pub const CCM_SETCOLORSCHEME: UINT = CCM_FIRST + 2;
79 pub const CCM_GETCOLORSCHEME: UINT = CCM_FIRST + 3;
80 pub const CCM_GETDROPTARGET: UINT = CCM_FIRST + 4;
81 pub const CCM_SETUNICODEFORMAT: UINT = CCM_FIRST + 5;
82 pub const CCM_GETUNICODEFORMAT: UINT = CCM_FIRST + 6;
83 pub const CCM_SETVERSION: UINT = CCM_FIRST + 7;
84 pub const CCM_GETVERSION: UINT = CCM_FIRST + 8;
85 pub const CCM_SETNOTIFYWINDOW: UINT = CCM_FIRST + 9;
86 pub const CCM_SETWINDOWTHEME: UINT = CCM_FIRST + 0xb;
87 pub const CCM_DPISCALE: UINT = CCM_FIRST + 0xc;
88 pub const INFOTIPSIZE: c_int = 1024;
89 pub const NM_OUTOFMEMORY: UINT = (NM_FIRST as i32 - 1) as u32;
90 pub const NM_CLICK: UINT = (NM_FIRST as i32 - 2) as u32;
91 pub const NM_DBLCLK: UINT = (NM_FIRST as i32 - 3) as u32;
92 pub const NM_RETURN: UINT = (NM_FIRST as i32 - 4) as u32;
93 pub const NM_RCLICK: UINT = (NM_FIRST as i32 - 5) as u32;
94 pub const NM_RDBLCLK: UINT = (NM_FIRST as i32 - 6) as u32;
95 pub const NM_SETFOCUS: UINT = (NM_FIRST as i32 - 7) as u32;
96 pub const NM_KILLFOCUS: UINT = (NM_FIRST as i32 - 8) as u32;
97 pub const NM_CUSTOMDRAW: UINT = (NM_FIRST as i32 - 12) as u32;
98 pub const NM_HOVER: UINT = (NM_FIRST as i32 - 13) as u32;
99 pub const NM_NCHITTEST: UINT = (NM_FIRST as i32 - 14) as u32;
100 pub const NM_KEYDOWN: UINT = (NM_FIRST as i32 - 15) as u32;
101 pub const NM_RELEASEDCAPTURE: UINT = (NM_FIRST as i32 - 16) as u32;
102 pub const NM_SETCURSOR: UINT = (NM_FIRST as i32 - 17) as u32;
103 pub const NM_CHAR: UINT = (NM_FIRST as i32 - 18) as u32;
104 pub const NM_TOOLTIPSCREATED: UINT = (NM_FIRST as i32 - 19) as u32;
105 pub const NM_LDOWN: UINT = (NM_FIRST as i32 - 20) as u32;
106 pub const NM_RDOWN: UINT = (NM_FIRST as i32 - 21) as u32;
107 pub const NM_THEMECHANGED: UINT = (NM_FIRST as i32 - 22) as u32;
108 pub const NM_FONTCHANGED: UINT = (NM_FIRST as i32 - 23) as u32;
109 pub const NM_CUSTOMTEXT: UINT = (NM_FIRST as i32 - 24) as u32;
110 pub const NM_TVSTATEIMAGECHANGING: UINT = (NM_FIRST as i32 - 24) as u32;
111 STRUCT!{struct NMTOOLTIPSCREATED {
112     hdr: NMHDR,
113     hwndToolTips: HWND,
114 }}
115 pub type LPNMTOOLTIPSCREATED = *mut NMTOOLTIPSCREATED;
116 STRUCT!{struct NMMOUSE {
117     hdr: NMHDR,
118     dwItemSpec: DWORD_PTR,
119     dwItemData: DWORD_PTR,
120     pt: POINT,
121     dwHitInfo: LPARAM,
122 }}
123 pub type LPNMMOUSE = *mut NMMOUSE;
124 pub type NMCLICK = NMMOUSE;
125 pub type LPNMCLICK = LPNMMOUSE;
126 STRUCT!{struct NMOBJECTNOTIFY {
127     hdr: NMHDR,
128     iItem: c_int,
129     piid: *const IID,
130     pObject: *mut c_void,
131     hResult: HRESULT,
132     dwFlags: DWORD,
133 }}
134 pub type LPNMOBJECTNOTIFY = *mut NMOBJECTNOTIFY;
135 STRUCT!{struct NMKEY {
136     hdr: NMHDR,
137     nVKey: UINT,
138     uFlags: UINT,
139 }}
140 pub type LPNMKEY = *mut NMKEY;
141 STRUCT!{struct NMCHAR {
142     hdr: NMHDR,
143     ch: UINT,
144     dwItemPrev: DWORD,
145     dwItemNext: DWORD,
146 }}
147 pub type LPNMCHAR = *mut NMCHAR;
148 STRUCT!{struct NMCUSTOMTEXT {
149     hdr: NMHDR,
150     hDC: HDC,
151     lpString: LPCWSTR,
152     nCount: c_int,
153     lpRect: LPRECT,
154     uFormat: UINT,
155     fLink: BOOL,
156 }}
157 pub type LPNMCUSTOMTEXT = *mut NMCUSTOMTEXT;
158 pub const NM_FIRST: UINT = 0;
159 pub const NM_LAST: UINT = -99i32 as u32;
160 pub const LVN_FIRST: UINT = -100i32 as u32;
161 pub const LVN_LAST: UINT = -199i32 as u32;
162 pub const HDN_FIRST: UINT = -300i32 as u32;
163 pub const HDN_LAST: UINT = -399i32 as u32;
164 pub const TVN_FIRST: UINT = -400i32 as u32;
165 pub const TVN_LAST: UINT = -499i32 as u32;
166 pub const TTN_FIRST: UINT = -520i32 as u32;
167 pub const TTN_LAST: UINT = -549i32 as u32;
168 pub const TCN_FIRST: UINT = -550i32 as u32;
169 pub const TCN_LAST: UINT = -580i32 as u32;
170 pub const CDN_FIRST: UINT = -601i32 as u32;
171 pub const CDN_LAST: UINT = -699i32 as u32;
172 pub const TBN_FIRST: UINT = -700i32 as u32;
173 pub const TBN_LAST: UINT = -720i32 as u32;
174 pub const UDN_FIRST: UINT = -721i32 as u32;
175 pub const UDN_LAST: UINT = -729i32 as u32;
176 pub const DTN_FIRST: UINT = -740i32 as u32;
177 pub const DTN_LAST: UINT = -745i32 as u32;
178 pub const MCN_FIRST: UINT = -746i32 as u32;
179 pub const MCN_LAST: UINT = -752i32 as u32;
180 pub const DTN_FIRST2: UINT = -753i32 as u32;
181 pub const DTN_LAST2: UINT = -799i32 as u32;
182 pub const CBEN_FIRST: UINT = -800i32 as u32;
183 pub const CBEN_LAST: UINT = -830i32 as u32;
184 pub const RBN_FIRST: UINT = -831i32 as u32;
185 pub const RBN_LAST: UINT = -859i32 as u32;
186 pub const IPN_FIRST: UINT = -860i32 as u32;
187 pub const IPN_LAST: UINT = -879i32 as u32;
188 pub const SBN_FIRST: UINT = -880i32 as u32;
189 pub const SBN_LAST: UINT = -899i32 as u32;
190 pub const PGN_FIRST: UINT = -900i32 as u32;
191 pub const PGN_LAST: UINT = -950i32 as u32;
192 pub const WMN_FIRST: UINT = -1000i32 as u32;
193 pub const WMN_LAST: UINT = -1200i32 as u32;
194 pub const BCN_FIRST: UINT = -1250i32 as u32;
195 pub const BCN_LAST: UINT = -1350i32 as u32;
196 pub const TRBN_FIRST: UINT = -1501i32 as u32;
197 pub const TRBN_LAST: UINT = -1519i32 as u32;
198 pub const MSGF_COMMCTRL_BEGINDRAG: c_int = 0x4200;
199 pub const MSGF_COMMCTRL_SIZEHEADER: c_int = 0x4201;
200 pub const MSGF_COMMCTRL_DRAGSELECT: c_int = 0x4202;
201 pub const MSGF_COMMCTRL_TOOLBARCUST: c_int = 0x4203;
202 pub const CDRF_DODEFAULT: LRESULT = 0x00000000;
203 pub const CDRF_NEWFONT: LRESULT = 0x00000002;
204 pub const CDRF_SKIPDEFAULT: LRESULT = 0x00000004;
205 pub const CDRF_DOERASE: LRESULT = 0x00000008;
206 pub const CDRF_SKIPPOSTPAINT: LRESULT = 0x00000100;
207 pub const CDRF_NOTIFYPOSTPAINT: LRESULT = 0x00000010;
208 pub const CDRF_NOTIFYITEMDRAW: LRESULT = 0x00000020;
209 pub const CDRF_NOTIFYSUBITEMDRAW: LRESULT = 0x00000020;
210 pub const CDRF_NOTIFYPOSTERASE: LRESULT = 0x00000040;
211 pub const CDDS_PREPAINT: DWORD = 0x00000001;
212 pub const CDDS_POSTPAINT: DWORD = 0x00000002;
213 pub const CDDS_PREERASE: DWORD = 0x00000003;
214 pub const CDDS_POSTERASE: DWORD = 0x00000004;
215 pub const CDDS_ITEM: DWORD = 0x00010000;
216 pub const CDDS_ITEMPREPAINT: DWORD = CDDS_ITEM | CDDS_PREPAINT;
217 pub const CDDS_ITEMPOSTPAINT: DWORD = CDDS_ITEM | CDDS_POSTPAINT;
218 pub const CDDS_ITEMPREERASE: DWORD = CDDS_ITEM | CDDS_PREERASE;
219 pub const CDDS_ITEMPOSTERASE: DWORD = CDDS_ITEM | CDDS_POSTERASE;
220 pub const CDDS_SUBITEM: DWORD = 0x00020000;
221 pub const CDIS_SELECTED: UINT = 0x0001;
222 pub const CDIS_GRAYED: UINT = 0x0002;
223 pub const CDIS_DISABLED: UINT = 0x0004;
224 pub const CDIS_CHECKED: UINT = 0x0008;
225 pub const CDIS_FOCUS: UINT = 0x0010;
226 pub const CDIS_DEFAULT: UINT = 0x0020;
227 pub const CDIS_HOT: UINT = 0x0040;
228 pub const CDIS_MARKED: UINT = 0x0080;
229 pub const CDIS_INDETERMINATE: UINT = 0x0100;
230 pub const CDIS_SHOWKEYBOARDCUES: UINT = 0x0200;
231 pub const CDIS_NEARHOT: UINT = 0x0400;
232 pub const CDIS_OTHERSIDEHOT: UINT = 0x0800;
233 pub const CDIS_DROPHILITED: UINT = 0x1000;
234 STRUCT!{struct NMCUSTOMDRAW {
235     hdr: NMHDR,
236     dwDrawStage: DWORD,
237     hdc: HDC,
238     rc: RECT,
239     dwItemSpec: DWORD_PTR,
240     uItemState: UINT,
241     lItemlParam: LPARAM,
242 }}
243 pub type LPNMCUSTOMDRAW = *mut NMCUSTOMDRAW;
244 STRUCT!{struct NMTTCUSTOMDRAW {
245     nmcd: NMCUSTOMDRAW,
246     uDrawFlags: UINT,
247 }}
248 pub type LPNMTTCUSTOMDRAW = *mut NMTTCUSTOMDRAW;
249 STRUCT!{struct NMCUSTOMSPLITRECTINFO {
250     hdr: NMHDR,
251     rcClient: RECT,
252     rcButton: RECT,
253     rcSplit: RECT,
254 }}
255 pub type LPNMCUSTOMSPLITRECTINFO = *mut NMCUSTOMSPLITRECTINFO;
256 pub const NM_GETCUSTOMSPLITRECT: UINT = BCN_FIRST + 0x0003;
257 pub const CLR_NONE: DWORD = 0xFFFFFFFF;
258 pub const CLR_DEFAULT: DWORD = 0xFF000000;
259 pub enum IMAGELIST {}
260 pub type HIMAGELIST = *mut IMAGELIST;
261 STRUCT!{struct IMAGELISTDRAWPARAMS {
262     cbSize: DWORD,
263     himl: HIMAGELIST,
264     i: c_int,
265     hdcDst: HDC,
266     x: c_int,
267     y: c_int,
268     cx: c_int,
269     cy: c_int,
270     xBitmap: c_int,
271     yBitmap: c_int,
272     rgbBk: COLORREF,
273     rgbFg: COLORREF,
274     fStyle: UINT,
275     dwRop: DWORD,
276     fState: DWORD,
277     Frame: DWORD,
278     crEffect: COLORREF,
279 }}
280 pub type LPIMAGELISTDRAWPARAMS = *mut IMAGELISTDRAWPARAMS;
281 pub const ILC_MASK: UINT = 0x00000001;
282 pub const ILC_COLOR: UINT = 0x00000000;
283 pub const ILC_COLORDDB: UINT = 0x000000FE;
284 pub const ILC_COLOR4: UINT = 0x00000004;
285 pub const ILC_COLOR8: UINT = 0x00000008;
286 pub const ILC_COLOR16: UINT = 0x00000010;
287 pub const ILC_COLOR24: UINT = 0x00000018;
288 pub const ILC_COLOR32: UINT = 0x00000020;
289 pub const ILC_PALETTE: UINT = 0x00000800;
290 pub const ILC_MIRROR: UINT = 0x00002000;
291 pub const ILC_PERITEMMIRROR: UINT = 0x00008000;
292 pub const ILC_ORIGINALSIZE: UINT = 0x00010000;
293 pub const ILC_HIGHQUALITYSCALE: UINT = 0x00020000;
294 extern "system" {
ImageList_Create( cx: c_int, cy: c_int, flags: UINT, cInitial: c_int, cGrow: c_int, ) -> HIMAGELIST295     pub fn ImageList_Create(
296         cx: c_int,
297         cy: c_int,
298         flags: UINT,
299         cInitial: c_int,
300         cGrow: c_int,
301     ) -> HIMAGELIST;
ImageList_Destroy( himl: HIMAGELIST, ) -> BOOL302     pub fn ImageList_Destroy(
303         himl: HIMAGELIST,
304     ) -> BOOL;
ImageList_GetImageCount( himl: HIMAGELIST, ) -> c_int305     pub fn ImageList_GetImageCount(
306         himl: HIMAGELIST,
307     ) -> c_int;
ImageList_SetImageCount( himl: HIMAGELIST, uNewCount: UINT, ) -> BOOL308     pub fn ImageList_SetImageCount(
309         himl: HIMAGELIST,
310         uNewCount: UINT,
311     ) -> BOOL;
ImageList_Add( himl: HIMAGELIST, hbmImage: HBITMAP, hbmMask: HBITMAP, ) -> c_int312     pub fn ImageList_Add(
313         himl: HIMAGELIST,
314         hbmImage: HBITMAP,
315         hbmMask: HBITMAP,
316     ) -> c_int;
ImageList_ReplaceIcon( himl: HIMAGELIST, i: c_int, hicon: HICON, ) -> c_int317     pub fn ImageList_ReplaceIcon(
318         himl: HIMAGELIST,
319         i: c_int,
320         hicon: HICON,
321     ) -> c_int;
ImageList_SetBkColor( himl: HIMAGELIST, clrBk: COLORREF, ) -> COLORREF322     pub fn ImageList_SetBkColor(
323         himl: HIMAGELIST,
324         clrBk: COLORREF,
325     ) -> COLORREF;
ImageList_GetBkColor( himl: HIMAGELIST, ) -> COLORREF326     pub fn ImageList_GetBkColor(
327         himl: HIMAGELIST,
328     ) -> COLORREF;
ImageList_SetOverlayImage( himl: HIMAGELIST, iImage: c_int, iOverlay: c_int, ) -> BOOL329     pub fn ImageList_SetOverlayImage(
330         himl: HIMAGELIST,
331         iImage: c_int,
332         iOverlay: c_int,
333     ) -> BOOL;
334 }
335 #[inline]
ImageList_AddIcon(himl: HIMAGELIST, hicon: HICON) -> c_int336 pub unsafe fn ImageList_AddIcon(himl: HIMAGELIST, hicon: HICON) -> c_int {
337     ImageList_ReplaceIcon(himl, -1, hicon)
338 }
339 pub const ILD_NORMAL: UINT = 0x00000000;
340 pub const ILD_TRANSPARENT: UINT = 0x00000001;
341 pub const ILD_MASK: UINT = 0x00000010;
342 pub const ILD_IMAGE: UINT = 0x00000020;
343 pub const ILD_ROP: UINT = 0x00000040;
344 pub const ILD_BLEND25: UINT = 0x00000002;
345 pub const ILD_BLEND50: UINT = 0x00000004;
346 pub const ILD_OVERLAYMASK: UINT = 0x00000F00;
347 #[inline]
INDEXTOOVERLAYMASK(i: UINT) -> UINT348 pub fn INDEXTOOVERLAYMASK(i: UINT) -> UINT {
349     i << 8
350 }
351 pub const ILD_PRESERVEALPHA: UINT = 0x00001000;
352 pub const ILD_SCALE: UINT = 0x00002000;
353 pub const ILD_DPISCALE: UINT = 0x00004000;
354 pub const ILD_ASYNC: UINT = 0x00008000;
355 pub const ILD_SELECTED: UINT = ILD_BLEND50;
356 pub const ILD_FOCUS: UINT = ILD_BLEND25;
357 pub const ILD_BLEND: UINT = ILD_BLEND50;
358 pub const CLR_HILIGHT: DWORD = CLR_DEFAULT;
359 pub const ILS_NORMAL: DWORD = 0x00000000;
360 pub const ILS_GLOW: DWORD = 0x00000001;
361 pub const ILS_SHADOW: DWORD = 0x00000002;
362 pub const ILS_SATURATE: DWORD = 0x00000004;
363 pub const ILS_ALPHA: DWORD = 0x00000008;
364 pub const ILGT_NORMAL: DWORD = 0x00000000;
365 pub const ILGT_ASYNC : DWORD = 0x00000001;
366 extern "system" {
ImageList_Draw( himl: HIMAGELIST, i: c_int, hdcDst: HDC, x: c_int, y: c_int, fStyle: UINT, ) -> BOOL367     pub fn ImageList_Draw(
368         himl: HIMAGELIST,
369         i: c_int,
370         hdcDst: HDC,
371         x: c_int,
372         y: c_int,
373         fStyle: UINT,
374     ) -> BOOL;
375 }
376 pub const HBITMAP_CALLBACK: HBITMAP = -1isize as HBITMAP;
377 extern "system" {
ImageList_Replace( himl: HIMAGELIST, i: c_int, hbmImage: HBITMAP, hbmMask: HBITMAP, ) -> BOOL378     pub fn ImageList_Replace(
379         himl: HIMAGELIST,
380         i: c_int,
381         hbmImage: HBITMAP,
382         hbmMask: HBITMAP,
383     ) -> BOOL;
ImageList_AddMasked( himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF, ) -> c_int384     pub fn ImageList_AddMasked(
385         himl: HIMAGELIST,
386         hbmImage: HBITMAP,
387         crMask: COLORREF,
388     ) -> c_int;
ImageList_DrawEx( himl: HIMAGELIST, i: c_int, hdcDst: HDC, x: c_int, y: c_int, dx: c_int, dy: c_int, rgbBk: COLORREF, rgbFg: COLORREF, fStyle: UINT, ) -> BOOL389     pub fn ImageList_DrawEx(
390         himl: HIMAGELIST,
391         i: c_int,
392         hdcDst: HDC,
393         x: c_int,
394         y: c_int,
395         dx: c_int,
396         dy: c_int,
397         rgbBk: COLORREF,
398         rgbFg: COLORREF,
399         fStyle: UINT,
400     ) -> BOOL;
ImageList_DrawIndirect( pimldp: *mut IMAGELISTDRAWPARAMS, ) -> BOOL401     pub fn ImageList_DrawIndirect(
402         pimldp: *mut IMAGELISTDRAWPARAMS,
403     ) -> BOOL;
ImageList_Remove( himl: HIMAGELIST, i: c_int, ) -> BOOL404     pub fn ImageList_Remove(
405         himl: HIMAGELIST,
406         i: c_int,
407     ) -> BOOL;
ImageList_GetIcon( himl: HIMAGELIST, i: c_int, flags: UINT, ) -> HICON408     pub fn ImageList_GetIcon(
409         himl: HIMAGELIST,
410         i: c_int,
411         flags: UINT,
412     ) -> HICON;
ImageList_LoadImageA( hi: HINSTANCE, lpbmp: LPCSTR, cx: c_int, cGrow: c_int, crMask: COLORREF, uType: UINT, uFlags: UINT, ) -> HIMAGELIST413     pub fn ImageList_LoadImageA(
414         hi: HINSTANCE,
415         lpbmp: LPCSTR,
416         cx: c_int,
417         cGrow: c_int,
418         crMask: COLORREF,
419         uType: UINT,
420         uFlags: UINT,
421     ) -> HIMAGELIST;
ImageList_LoadImageW( hi: HINSTANCE, lpbmp: LPCWSTR, cx: c_int, cGrow: c_int, crMask: COLORREF, uType: UINT, uFlags: UINT, ) -> HIMAGELIST422     pub fn ImageList_LoadImageW(
423         hi: HINSTANCE,
424         lpbmp: LPCWSTR,
425         cx: c_int,
426         cGrow: c_int,
427         crMask: COLORREF,
428         uType: UINT,
429         uFlags: UINT,
430     ) -> HIMAGELIST;
431 }
432 pub const ILCF_MOVE: UINT = 0x00000000;
433 pub const ILCF_SWAP: UINT = 0x00000001;
434 extern "system" {
ImageList_Copy( himlDst: HIMAGELIST, iDst: c_int, himlSrc: HIMAGELIST, iSrc: c_int, uFlags: UINT, ) -> BOOL435     pub fn ImageList_Copy(
436         himlDst: HIMAGELIST,
437         iDst: c_int,
438         himlSrc: HIMAGELIST,
439         iSrc: c_int,
440         uFlags: UINT,
441     ) -> BOOL;
ImageList_BeginDrag( himlTrack: HIMAGELIST, iTrack: c_int, dxHotspot: c_int, dyHotspot: c_int, ) -> BOOL442     pub fn ImageList_BeginDrag(
443         himlTrack: HIMAGELIST,
444         iTrack: c_int,
445         dxHotspot: c_int,
446         dyHotspot: c_int,
447     ) -> BOOL;
ImageList_EndDrag()448     pub fn ImageList_EndDrag();
ImageList_DragEnter( hwndLock: HWND, x: c_int, y: c_int, ) -> BOOL449     pub fn ImageList_DragEnter(
450         hwndLock: HWND,
451         x: c_int,
452         y: c_int,
453     ) -> BOOL;
ImageList_DragLeave( hwndLock: HWND, ) -> BOOL454     pub fn ImageList_DragLeave(
455         hwndLock: HWND,
456     ) -> BOOL;
ImageList_DragMove( x: c_int, y: c_int, ) -> BOOL457     pub fn ImageList_DragMove(
458         x: c_int,
459         y: c_int,
460     ) -> BOOL;
ImageList_SetDragCursorImage( himlDrag: HIMAGELIST, iDrag: c_int, dxHotspot: c_int, dyHotspot: c_int, ) -> BOOL461     pub fn ImageList_SetDragCursorImage(
462         himlDrag: HIMAGELIST,
463         iDrag: c_int,
464         dxHotspot: c_int,
465         dyHotspot: c_int,
466     ) -> BOOL;
ImageList_DragShowNolock( fShow: BOOL, ) -> BOOL467     pub fn ImageList_DragShowNolock(
468         fShow: BOOL,
469     ) -> BOOL;
ImageList_GetDragImage( ppt: *mut POINT, pptHotspot: *mut POINT, ) -> HIMAGELIST470     pub fn ImageList_GetDragImage(
471         ppt: *mut POINT,
472         pptHotspot: *mut POINT,
473     ) -> HIMAGELIST;
474 }
475 #[inline]
ImageList_RemoveAll(himl: HIMAGELIST) -> BOOL476 pub unsafe fn ImageList_RemoveAll(himl: HIMAGELIST) -> BOOL {
477     ImageList_Remove(himl, -1)
478 }
479 #[inline]
ImageList_ExtractIcon(_: HINSTANCE, himl: HIMAGELIST, i: c_int) -> HICON480 pub unsafe fn ImageList_ExtractIcon(_: HINSTANCE, himl: HIMAGELIST, i: c_int) -> HICON {
481     ImageList_GetIcon(himl, i, 0)
482 }
483 #[inline]
ImageList_LoadBitmap( hi: HINSTANCE, lpbmp: LPCWSTR, cx: c_int, cGrow: c_int, crMask: COLORREF, ) -> HIMAGELIST484 pub unsafe fn ImageList_LoadBitmap(
485     hi: HINSTANCE,
486     lpbmp: LPCWSTR,
487     cx: c_int,
488     cGrow: c_int,
489     crMask: COLORREF,
490 ) -> HIMAGELIST {
491     ImageList_LoadImageW(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0)
492 }
493 pub enum IStream {}
494 extern "system" {
ImageList_Read( pstm: *mut IStream, ) -> HIMAGELIST495     pub fn ImageList_Read(
496         pstm: *mut IStream,
497     ) -> HIMAGELIST;
ImageList_Write( himl: HIMAGELIST, pstm: *mut IStream, ) -> BOOL498     pub fn ImageList_Write(
499         himl: HIMAGELIST,
500         pstm: *mut IStream,
501     ) -> BOOL;
502 }
503 pub const ILP_NORMAL: DWORD = 0;
504 pub const ILP_DOWNLEVEL: DWORD = 0;
505 extern "system" {
ImageList_ReadEx( dwFlags: DWORD, pstm: *mut IStream, riid: REFIID, ppv: *mut PVOID, ) -> HRESULT506     pub fn ImageList_ReadEx(
507         dwFlags: DWORD,
508         pstm: *mut IStream,
509         riid: REFIID,
510         ppv: *mut PVOID,
511     ) -> HRESULT;
ImageList_WriteEx( himl: HIMAGELIST, dwFlags: DWORD, pstm: *mut IStream, ) -> HRESULT512     pub fn ImageList_WriteEx(
513         himl: HIMAGELIST,
514         dwFlags: DWORD,
515         pstm: *mut IStream,
516     ) -> HRESULT;
517 }
518 STRUCT!{struct IMAGEINFO {
519     hbmImage: HBITMAP,
520     hbmMask: HBITMAP,
521     Unused1: c_int,
522     Unused2: c_int,
523     rcImage: RECT,
524 }}
525 pub type LPIMAGEINFO = *mut IMAGEINFO;
526 extern "system" {
ImageList_GetIconSize( himl: HIMAGELIST, cx: *mut c_int, cy: *mut c_int, ) -> BOOL527     pub fn ImageList_GetIconSize(
528         himl: HIMAGELIST,
529         cx: *mut c_int,
530         cy: *mut c_int,
531     ) -> BOOL;
ImageList_SetIconSize( himl: HIMAGELIST, cx: c_int, cy: c_int, ) -> BOOL532     pub fn ImageList_SetIconSize(
533         himl: HIMAGELIST,
534         cx: c_int,
535         cy: c_int,
536     ) -> BOOL;
ImageList_GetImageInfo( himl: HIMAGELIST, i: c_int, pImageInfo: *mut IMAGEINFO, ) -> BOOL537     pub fn ImageList_GetImageInfo(
538         himl: HIMAGELIST,
539         i: c_int,
540         pImageInfo: *mut IMAGEINFO,
541     ) -> BOOL;
ImageList_Merge( himl1: HIMAGELIST, i1: c_int, himl2: HIMAGELIST, i2: c_int, dx: c_int, dy: c_int, ) -> HIMAGELIST542     pub fn ImageList_Merge(
543         himl1: HIMAGELIST,
544         i1: c_int,
545         himl2: HIMAGELIST,
546         i2: c_int,
547         dx: c_int,
548         dy: c_int,
549     ) -> HIMAGELIST;
ImageList_Duplicate( himl: HIMAGELIST, ) -> HIMAGELIST550     pub fn ImageList_Duplicate(
551         himl: HIMAGELIST,
552     ) -> HIMAGELIST;
HIMAGELIST_QueryInterface( himl: HIMAGELIST, riid: REFIID, ppv: *mut *mut c_void, ) -> HRESULT553     pub fn HIMAGELIST_QueryInterface(
554         himl: HIMAGELIST,
555         riid: REFIID,
556         ppv: *mut *mut c_void,
557     ) -> HRESULT;
558 }
559 #[inline]
IImageListToHIMAGELIST(himl: *mut IImageList) -> HIMAGELIST560 pub fn IImageListToHIMAGELIST(himl: *mut IImageList) -> HIMAGELIST {
561     himl as HIMAGELIST
562 }
563 pub const WC_HEADER: &'static str = "SysHeader32";
564 pub const HDS_HORZ: DWORD = 0x0000;
565 pub const HDS_BUTTONS: DWORD = 0x0002;
566 pub const HDS_HOTTRACK: DWORD = 0x0004;
567 pub const HDS_HIDDEN: DWORD = 0x0008;
568 pub const HDS_DRAGDROP: DWORD = 0x0040;
569 pub const HDS_FULLDRAG: DWORD = 0x0080;
570 pub const HDS_FILTERBAR: DWORD = 0x0100;
571 pub const HDS_FLAT: DWORD = 0x0200;
572 pub const HDS_CHECKBOXES: DWORD = 0x0400;
573 pub const HDS_NOSIZING: DWORD = 0x0800;
574 pub const HDS_OVERFLOW: DWORD = 0x1000;
575 pub const HDFT_ISSTRING: UINT = 0x0000;
576 pub const HDFT_ISNUMBER: UINT = 0x0001;
577 pub const HDFT_ISDATE: UINT = 0x0002;
578 pub const HDFT_HASNOVALUE: UINT = 0x8000;
579 STRUCT!{struct HD_TEXTFILTERA {
580     pszText: LPSTR,
581     cchTextMax: INT,
582 }}
583 pub type LPHD_TEXTFILTERA = *mut HD_TEXTFILTERA;
584 STRUCT!{struct HD_TEXTFILTERW {
585     pszText: LPWSTR,
586     cchTextMax: INT,
587 }}
588 pub type LPHD_TEXTFILTERW = *mut HD_TEXTFILTERW;
589 STRUCT!{struct HDITEMA {
590     mask: UINT,
591     cxy: c_int,
592     pszText: LPSTR,
593     hbm: HBITMAP,
594     cchTextMax: c_int,
595     fmt: c_int,
596     lParam: LPARAM,
597     iImage: c_int,
598     iOrder: c_int,
599     _type: UINT,
600     pvFilter: *mut c_void,
601     state: UINT,
602 }}
603 pub type LPHDITEMA = *mut HDITEMA;
604 STRUCT!{struct HDITEMW {
605     mask: UINT,
606     cxy: c_int,
607     pszText: LPWSTR,
608     hbm: HBITMAP,
609     cchTextMax: c_int,
610     fmt: c_int,
611     lParam: LPARAM,
612     iImage: c_int,
613     iOrder: c_int,
614     _type: UINT,
615     pvFilter: *mut c_void,
616     state: UINT,
617 }}
618 pub type LPHDITEMW = *mut HDITEMW;
619 pub const HDI_WIDTH: UINT = 0x0001;
620 pub const HDI_HEIGHT: UINT = HDI_WIDTH;
621 pub const HDI_TEXT: UINT = 0x0002;
622 pub const HDI_FORMAT: UINT = 0x0004;
623 pub const HDI_LPARAM: UINT = 0x0008;
624 pub const HDI_BITMAP: UINT = 0x0010;
625 pub const HDI_IMAGE: UINT = 0x0020;
626 pub const HDI_DI_SETITEM: UINT = 0x0040;
627 pub const HDI_ORDER: UINT = 0x0080;
628 pub const HDI_FILTER: UINT = 0x0100;
629 pub const HDI_STATE: UINT = 0x0200;
630 pub const HDF_LEFT: c_int = 0x0000;
631 pub const HDF_RIGHT: c_int = 0x0001;
632 pub const HDF_CENTER: c_int = 0x0002;
633 pub const HDF_JUSTIFYMASK: c_int = 0x0003;
634 pub const HDF_RTLREADING: c_int = 0x0004;
635 pub const HDF_BITMAP: c_int = 0x2000;
636 pub const HDF_STRING: c_int = 0x4000;
637 pub const HDF_OWNERDRAW: c_int = 0x8000;
638 pub const HDF_IMAGE: c_int = 0x0800;
639 pub const HDF_BITMAP_ON_RIGHT: c_int = 0x1000;
640 pub const HDF_SORTUP: c_int = 0x0400;
641 pub const HDF_SORTDOWN: c_int = 0x0200;
642 pub const HDF_CHECKBOX: c_int = 0x0040;
643 pub const HDF_CHECKED: c_int = 0x0080;
644 pub const HDF_FIXEDWIDTH: c_int = 0x0100;
645 pub const HDF_SPLITBUTTON: c_int = 0x1000000;
646 pub const HDIS_FOCUSED: UINT = 0x00000001;
647 pub const HDM_GETITEMCOUNT: UINT = HDM_FIRST + 0;
648 pub const HDM_INSERTITEMA: UINT = HDM_FIRST + 1;
649 pub const HDM_INSERTITEMW: UINT = HDM_FIRST + 10;
650 pub const HDM_DELETEITEM: UINT = HDM_FIRST + 2;
651 pub const HDM_GETITEMA: UINT = HDM_FIRST + 3;
652 pub const HDM_GETITEMW: UINT = HDM_FIRST + 11;
653 pub const HDM_SETITEMA: UINT = HDM_FIRST + 4;
654 pub const HDM_SETITEMW: UINT = HDM_FIRST + 12;
655 STRUCT!{struct HDLAYOUT {
656     prc: *mut RECT,
657     pwpos: *mut WINDOWPOS,
658 }}
659 pub type LPHDLAYOUT = *mut HDLAYOUT;
660 pub const HDM_LAYOUT: UINT = HDM_FIRST + 5;
661 pub const HHT_NOWHERE: UINT = 0x0001;
662 pub const HHT_ONHEADER: UINT = 0x0002;
663 pub const HHT_ONDIVIDER: UINT = 0x0004;
664 pub const HHT_ONDIVOPEN: UINT = 0x0008;
665 pub const HHT_ONFILTER: UINT = 0x0010;
666 pub const HHT_ONFILTERBUTTON: UINT = 0x0020;
667 pub const HHT_ABOVE: UINT = 0x0100;
668 pub const HHT_BELOW: UINT = 0x0200;
669 pub const HHT_TORIGHT: UINT = 0x0400;
670 pub const HHT_TOLEFT: UINT = 0x0800;
671 pub const HHT_ONITEMSTATEICON: UINT = 0x1000;
672 pub const HHT_ONDROPDOWN: UINT = 0x2000;
673 pub const HHT_ONOVERFLOW: UINT = 0x4000;
674 STRUCT!{struct HDHITTESTINFO {
675     pt: POINT,
676     flags: UINT,
677     iItem: c_int,
678 }}
679 pub type LPHDHITTESTINFO = *mut HDHITTESTINFO;
680 pub type HD_HITTESTINFO = HDHITTESTINFO;
681 pub const HDSIL_NORMAL: WPARAM = 0;
682 pub const HDSIL_STATE: WPARAM = 1;
683 pub const HDM_HITTEST: UINT = HDM_FIRST + 6;
684 pub const HDM_GETITEMRECT: UINT = HDM_FIRST + 7;
685 pub const HDM_SETIMAGELIST: UINT = HDM_FIRST + 8;
686 pub const HDM_GETIMAGELIST: UINT = HDM_FIRST + 9;
687 pub const HDM_ORDERTOINDEX: UINT = HDM_FIRST + 15;
688 pub const HDM_CREATEDRAGIMAGE: UINT = HDM_FIRST + 16;
689 pub const HDM_GETORDERARRAY: UINT = HDM_FIRST + 17;
690 pub const HDM_SETORDERARRAY: UINT = HDM_FIRST + 18;
691 pub const HDM_SETHOTDIVIDER: UINT = HDM_FIRST + 19;
692 pub const HDM_SETBITMAPMARGIN: UINT = HDM_FIRST + 20;
693 pub const HDM_GETBITMAPMARGIN: UINT = HDM_FIRST + 21;
694 pub const HDM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
695 pub const HDM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
696 pub const HDM_SETFILTERCHANGETIMEOUT: UINT = HDM_FIRST + 22;
697 pub const HDM_EDITFILTER: UINT = HDM_FIRST + 23;
698 pub const HDM_CLEARFILTER: UINT = HDM_FIRST + 24;
699 pub const HDM_GETITEMDROPDOWNRECT: UINT = HDM_FIRST + 25;
700 pub const HDM_GETOVERFLOWRECT: UINT = HDM_FIRST + 26;
701 pub const HDM_GETFOCUSEDITEM: UINT = HDM_FIRST + 27;
702 pub const HDM_SETFOCUSEDITEM: UINT = HDM_FIRST + 28;
703 pub const HDN_ITEMCHANGINGA: UINT = HDN_FIRST - 0;
704 pub const HDN_ITEMCHANGINGW: UINT = HDN_FIRST - 20;
705 pub const HDN_ITEMCHANGEDA: UINT = HDN_FIRST - 1;
706 pub const HDN_ITEMCHANGEDW: UINT = HDN_FIRST - 21;
707 pub const HDN_ITEMCLICKA: UINT = HDN_FIRST - 2;
708 pub const HDN_ITEMCLICKW: UINT = HDN_FIRST - 22;
709 pub const HDN_ITEMDBLCLICKA: UINT = HDN_FIRST - 3;
710 pub const HDN_ITEMDBLCLICKW: UINT = HDN_FIRST - 23;
711 pub const HDN_DIVIDERDBLCLICKA: UINT = HDN_FIRST - 5;
712 pub const HDN_DIVIDERDBLCLICKW: UINT = HDN_FIRST - 25;
713 pub const HDN_BEGINTRACKA: UINT = HDN_FIRST - 6;
714 pub const HDN_BEGINTRACKW: UINT = HDN_FIRST - 26;
715 pub const HDN_ENDTRACKA: UINT = HDN_FIRST - 7;
716 pub const HDN_ENDTRACKW: UINT = HDN_FIRST - 27;
717 pub const HDN_TRACKA: UINT = HDN_FIRST - 8;
718 pub const HDN_TRACKW: UINT = HDN_FIRST - 28;
719 pub const HDN_GETDISPINFOA: UINT = HDN_FIRST - 9;
720 pub const HDN_GETDISPINFOW: UINT = HDN_FIRST - 29;
721 pub const HDN_BEGINDRAG: UINT = HDN_FIRST - 10;
722 pub const HDN_ENDDRAG: UINT = HDN_FIRST - 11;
723 pub const HDN_FILTERCHANGE: UINT = HDN_FIRST - 12;
724 pub const HDN_FILTERBTNCLICK: UINT = HDN_FIRST - 13;
725 pub const HDN_BEGINFILTEREDIT: UINT = HDN_FIRST - 14;
726 pub const HDN_ENDFILTEREDIT: UINT = HDN_FIRST - 15;
727 pub const HDN_ITEMSTATEICONCLICK: UINT = HDN_FIRST - 16;
728 pub const HDN_ITEMKEYDOWN: UINT = HDN_FIRST - 17;
729 pub const HDN_DROPDOWN: UINT = HDN_FIRST - 18;
730 pub const HDN_OVERFLOWCLICK: UINT = HDN_FIRST - 19;
731 STRUCT!{struct NMHEADERA {
732     hdr: NMHDR,
733     iItem: c_int,
734     iButton: c_int,
735     pitem: *mut HDITEMA,
736 }}
737 pub type LPNMHEADERA = *mut NMHEADERA;
738 pub type HD_NOTIFYA = NMHEADERA;
739 STRUCT!{struct NMHEADERW {
740     hdr: NMHDR,
741     iItem: c_int,
742     iButton: c_int,
743     pitem: *mut HDITEMW,
744 }}
745 pub type LPNMHEADERW = *mut NMHEADERW;
746 pub type HD_NOTIFYW = NMHEADERW;
747 STRUCT!{struct NMHDDISPINFOW {
748     hdr: NMHDR,
749     iItem: c_int,
750     mask: UINT,
751     pszText: LPWSTR,
752     cchTextMax: c_int,
753     iImage: c_int,
754     lParam: LPARAM,
755 }}
756 pub type LPNMHDDISPINFOW = *mut NMHDDISPINFOW;
757 STRUCT!{struct NMHDDISPINFOA {
758     hdr: NMHDR,
759     iItem: c_int,
760     mask: UINT,
761     pszText: LPSTR,
762     cchTextMax: c_int,
763     iImage: c_int,
764     lParam: LPARAM,
765 }}
766 pub type LPNMHDDISPINFOA = *mut NMHDDISPINFOA;
767 STRUCT!{struct NMHDFILTERBTNCLICK {
768     hdr: NMHDR,
769     iItem: INT,
770     rc: RECT,
771 }}
772 pub type LPNMHDFILTERBTNCLICK = *mut NMHDFILTERBTNCLICK;
773 pub const TOOLBARCLASSNAME: &'static str = "ToolbarWindow32";
774 #[cfg(target_arch = "x86")]
775 STRUCT!{struct TBBUTTON {
776     iBitmap: c_int,
777     idCommand: c_int,
778     fsState: BYTE,
779     fsStyle: BYTE,
780     bReserved: [BYTE; 2],
781     dwData: DWORD_PTR,
782     iString: INT_PTR,
783 }}
784 #[cfg(target_arch = "x86_64")]
785 STRUCT!{struct TBBUTTON {
786     iBitmap: c_int,
787     idCommand: c_int,
788     fsState: BYTE,
789     fsStyle: BYTE,
790     bReserved: [BYTE; 6],
791     dwData: DWORD_PTR,
792     iString: INT_PTR,
793 }}
794 pub type PTBBUTTON = *mut TBBUTTON;
795 pub type LPTBBUTTON = *mut TBBUTTON;
796 pub type LPCTBBUTTON = *const TBBUTTON;
797 STRUCT!{struct COLORMAP {
798     from: COLORREF,
799     to: COLORREF,
800 }}
801 pub type LPCOLORMAP = *mut COLORMAP;
802 extern "system" {
CreateToolbarEx( hwnd: HWND, ws: DWORD, wID: UINT, nBitmaps: c_int, hBMInst: HINSTANCE, wBMID: UINT_PTR, lpButtons: LPCTBBUTTON, iNumButtons: c_int, dxButton: c_int, dyButton: c_int, dxBitmap: c_int, dyBitmap: c_int, uStructSize: UINT, ) -> HWND803     pub fn CreateToolbarEx(
804         hwnd: HWND,
805         ws: DWORD,
806         wID: UINT,
807         nBitmaps: c_int,
808         hBMInst: HINSTANCE,
809         wBMID: UINT_PTR,
810         lpButtons: LPCTBBUTTON,
811         iNumButtons: c_int,
812         dxButton: c_int,
813         dyButton: c_int,
814         dxBitmap: c_int,
815         dyBitmap: c_int,
816         uStructSize: UINT,
817     ) -> HWND;
CreateMappedBitmap( hInstance: HINSTANCE, idBitmap: INT_PTR, wFlags: UINT, lpColorMap: LPCOLORMAP, iNumMaps: c_int, ) -> HBITMAP818     pub fn CreateMappedBitmap(
819         hInstance: HINSTANCE,
820         idBitmap: INT_PTR,
821         wFlags: UINT,
822         lpColorMap: LPCOLORMAP,
823         iNumMaps: c_int,
824     ) -> HBITMAP;
825 }
826 pub const CMB_MASKED: UINT = 0x02;
827 pub const TBSTATE_CHECKED: BYTE = 0x01;
828 pub const TBSTATE_PRESSED: BYTE = 0x02;
829 pub const TBSTATE_ENABLED: BYTE = 0x04;
830 pub const TBSTATE_HIDDEN: BYTE = 0x08;
831 pub const TBSTATE_INDETERMINATE: BYTE = 0x10;
832 pub const TBSTATE_WRAP: BYTE = 0x20;
833 pub const TBSTATE_ELLIPSES: BYTE = 0x40;
834 pub const TBSTATE_MARKED: BYTE = 0x80;
835 pub const TBSTYLE_BUTTON: DWORD = 0x0000;
836 pub const TBSTYLE_SEP: DWORD = 0x0001;
837 pub const TBSTYLE_CHECK: DWORD = 0x0002;
838 pub const TBSTYLE_GROUP: DWORD = 0x0004;
839 pub const TBSTYLE_CHECKGROUP: DWORD = TBSTYLE_GROUP | TBSTYLE_CHECK;
840 pub const TBSTYLE_DROPDOWN: DWORD = 0x0008;
841 pub const TBSTYLE_AUTOSIZE: DWORD = 0x0010;
842 pub const TBSTYLE_NOPREFIX: DWORD = 0x0020;
843 pub const TBSTYLE_TOOLTIPS: DWORD = 0x0100;
844 pub const TBSTYLE_WRAPABLE: DWORD = 0x0200;
845 pub const TBSTYLE_ALTDRAG: DWORD = 0x0400;
846 pub const TBSTYLE_FLAT: DWORD = 0x0800;
847 pub const TBSTYLE_LIST: DWORD = 0x1000;
848 pub const TBSTYLE_CUSTOMERASE: DWORD = 0x2000;
849 pub const TBSTYLE_REGISTERDROP: DWORD = 0x4000;
850 pub const TBSTYLE_TRANSPARENT: DWORD = 0x8000;
851 pub const TBSTYLE_EX_DRAWDDARROWS: DWORD = 0x00000001;
852 pub const BTNS_BUTTON: DWORD = TBSTYLE_BUTTON;
853 pub const BTNS_SEP: DWORD = TBSTYLE_SEP;
854 pub const BTNS_CHECK: DWORD = TBSTYLE_CHECK;
855 pub const BTNS_GROUP: DWORD = TBSTYLE_GROUP;
856 pub const BTNS_CHECKGROUP: DWORD = TBSTYLE_CHECKGROUP;
857 pub const BTNS_DROPDOWN: DWORD = TBSTYLE_DROPDOWN;
858 pub const BTNS_AUTOSIZE: DWORD = TBSTYLE_AUTOSIZE;
859 pub const BTNS_NOPREFIX: DWORD = TBSTYLE_NOPREFIX;
860 pub const BTNS_SHOWTEXT: DWORD = 0x0040;
861 pub const BTNS_WHOLEDROPDOWN: DWORD = 0x0080;
862 pub const TBSTYLE_EX_MIXEDBUTTONS: DWORD = 0x00000008;
863 pub const TBSTYLE_EX_HIDECLIPPEDBUTTONS: DWORD = 0x00000010;
864 pub const TBSTYLE_EX_MULTICOLUMN: DWORD = 0x00000002;
865 pub const TBSTYLE_EX_VERTICAL: DWORD = 0x00000004;
866 pub const TBSTYLE_EX_DOUBLEBUFFER: DWORD = 0x00000080;
867 STRUCT!{struct NMTBCUSTOMDRAW {
868     nmcd: NMCUSTOMDRAW,
869     hbrMonoDither: HBRUSH,
870     hbrLines: HBRUSH,
871     hpenLines: HPEN,
872     clrText: COLORREF,
873     clrMark: COLORREF,
874     clrTextHighlight: COLORREF,
875     clrBtnFace: COLORREF,
876     clrBtnHighlight: COLORREF,
877     clrHighlightHotTrack: COLORREF,
878     rcText: RECT,
879     nStringBkMode: c_int,
880     nHLStringBkMode: c_int,
881     iListGap: c_int,
882 }}
883 pub type LPNMTBCUSTOMDRAW = *mut NMTBCUSTOMDRAW;
884 pub const TBCDRF_NOEDGES: LRESULT = 0x00010000;
885 pub const TBCDRF_HILITEHOTTRACK: LRESULT = 0x00020000;
886 pub const TBCDRF_NOOFFSET: LRESULT = 0x00040000;
887 pub const TBCDRF_NOMARK: LRESULT = 0x00080000;
888 pub const TBCDRF_NOETCHEDEFFECT: LRESULT = 0x00100000;
889 pub const TBCDRF_BLENDICON: LRESULT = 0x00200000;
890 pub const TBCDRF_NOBACKGROUND: LRESULT = 0x00400000;
891 pub const TBCDRF_USECDCOLORS: LRESULT = 0x00800000;
892 pub const TB_ENABLEBUTTON: UINT = WM_USER + 1;
893 pub const TB_CHECKBUTTON: UINT = WM_USER + 2;
894 pub const TB_PRESSBUTTON: UINT = WM_USER + 3;
895 pub const TB_HIDEBUTTON: UINT = WM_USER + 4;
896 pub const TB_INDETERMINATE: UINT = WM_USER + 5;
897 pub const TB_MARKBUTTON: UINT = WM_USER + 6;
898 pub const TB_ISBUTTONENABLED: UINT = WM_USER + 9;
899 pub const TB_ISBUTTONCHECKED: UINT = WM_USER + 10;
900 pub const TB_ISBUTTONPRESSED: UINT = WM_USER + 11;
901 pub const TB_ISBUTTONHIDDEN: UINT = WM_USER + 12;
902 pub const TB_ISBUTTONINDETERMINATE: UINT = WM_USER + 13;
903 pub const TB_ISBUTTONHIGHLIGHTED: UINT = WM_USER + 14;
904 pub const TB_SETSTATE: UINT = WM_USER + 17;
905 pub const TB_GETSTATE: UINT = WM_USER + 18;
906 pub const TB_ADDBITMAP: UINT = WM_USER + 19;
907 STRUCT!{struct TBADDBITMAP {
908     hInst: HINSTANCE,
909     nID: UINT_PTR,
910 }}
911 pub type LPTBADDBITMAP = *mut TBADDBITMAP;
912 pub const HINST_COMMCTRL: HINSTANCE = -1isize as HINSTANCE;
913 pub const IDB_STD_SMALL_COLOR: WPARAM = 0;
914 pub const IDB_STD_LARGE_COLOR: WPARAM = 1;
915 pub const IDB_VIEW_SMALL_COLOR: WPARAM = 4;
916 pub const IDB_VIEW_LARGE_COLOR: WPARAM = 5;
917 pub const IDB_HIST_SMALL_COLOR: WPARAM = 8;
918 pub const IDB_HIST_LARGE_COLOR: WPARAM = 9;
919 pub const IDB_HIST_NORMAL: WPARAM = 12;
920 pub const IDB_HIST_HOT: WPARAM = 13;
921 pub const IDB_HIST_DISABLED: WPARAM = 14;
922 pub const IDB_HIST_PRESSED: WPARAM = 15;
923 pub const STD_CUT: c_int = 0;
924 pub const STD_COPY: c_int = 1;
925 pub const STD_PASTE: c_int = 2;
926 pub const STD_UNDO: c_int = 3;
927 pub const STD_REDOW: c_int = 4;
928 pub const STD_DELETE: c_int = 5;
929 pub const STD_FILENEW: c_int = 6;
930 pub const STD_FILEOPEN: c_int = 7;
931 pub const STD_FILESAVE: c_int = 8;
932 pub const STD_PRINTPRE: c_int = 9;
933 pub const STD_PROPERTIES: c_int = 10;
934 pub const STD_HELP: c_int = 11;
935 pub const STD_FIND: c_int = 12;
936 pub const STD_REPLACE: c_int = 13;
937 pub const STD_PRINT: c_int = 14;
938 pub const VIEW_LARGEICONS: c_int = 0;
939 pub const VIEW_SMALLICONS: c_int = 1;
940 pub const VIEW_LIST: c_int = 2;
941 pub const VIEW_DETAILS: c_int = 3;
942 pub const VIEW_SORTNAME: c_int = 4;
943 pub const VIEW_SORTSIZE: c_int = 5;
944 pub const VIEW_SORTDATE: c_int = 6;
945 pub const VIEW_SORTTYPE: c_int = 7;
946 pub const VIEW_PARENTFOLDER: c_int = 8;
947 pub const VIEW_NETCONNECT: c_int = 9;
948 pub const VIEW_NETDISCONNECT: c_int = 10;
949 pub const VIEW_NEWFOLDER: c_int = 11;
950 pub const VIEW_VIEWMENU: c_int = 12;
951 pub const HIST_BACK: c_int = 0;
952 pub const HIST_FORWARD: c_int = 1;
953 pub const HIST_FAVORITES: c_int = 2;
954 pub const HIST_ADDTOFAVORITES: c_int = 3;
955 pub const HIST_VIEWTREE: c_int = 4;
956 pub const TB_ADDBUTTONSA: UINT = WM_USER + 20;
957 pub const TB_INSERTBUTTONA: UINT = WM_USER + 21;
958 pub const TB_DELETEBUTTON: UINT = WM_USER + 22;
959 pub const TB_GETBUTTON: UINT = WM_USER + 23;
960 pub const TB_BUTTONCOUNT: UINT = WM_USER + 24;
961 pub const TB_COMMANDTOINDEX: UINT = WM_USER + 25;
962 STRUCT!{struct TBSAVEPARAMSA {
963     hkr: HKEY,
964     pszSubKey: LPCSTR,
965     pszValueName: LPCSTR,
966 }}
967 pub type LPTBSAVEPARAMSA = *mut TBSAVEPARAMSA;
968 STRUCT!{struct TBSAVEPARAMSW {
969     hkr: HKEY,
970     pszSubKey: LPCWSTR,
971     pszValueName: LPCWSTR,
972 }}
973 pub type LPTBSAVEPARAMSW = *mut TBSAVEPARAMSW;
974 pub const TB_SAVERESTOREA: UINT = WM_USER + 26;
975 pub const TB_SAVERESTOREW: UINT = WM_USER + 76;
976 pub const TB_CUSTOMIZE: UINT = WM_USER + 27;
977 pub const TB_ADDSTRINGA: UINT = WM_USER + 28;
978 pub const TB_ADDSTRINGW: UINT = WM_USER + 77;
979 pub const TB_GETITEMRECT: UINT = WM_USER + 29;
980 pub const TB_BUTTONSTRUCTSIZE: UINT = WM_USER + 30;
981 pub const TB_SETBUTTONSIZE: UINT = WM_USER + 31;
982 pub const TB_SETBITMAPSIZE: UINT = WM_USER + 32;
983 pub const TB_AUTOSIZE: UINT = WM_USER + 33;
984 pub const TB_GETTOOLTIPS: UINT = WM_USER + 35;
985 pub const TB_SETTOOLTIPS: UINT = WM_USER + 36;
986 pub const TB_SETPARENT: UINT = WM_USER + 37;
987 pub const TB_SETROWS: UINT = WM_USER + 39;
988 pub const TB_GETROWS: UINT = WM_USER + 40;
989 pub const TB_SETCMDID: UINT = WM_USER + 42;
990 pub const TB_CHANGEBITMAP: UINT = WM_USER + 43;
991 pub const TB_GETBITMAP: UINT = WM_USER + 44;
992 pub const TB_GETBUTTONTEXTA: UINT = WM_USER + 45;
993 pub const TB_GETBUTTONTEXTW: UINT = WM_USER + 75;
994 pub const TB_REPLACEBITMAP: UINT = WM_USER + 46;
995 pub const TB_SETINDENT: UINT = WM_USER + 47;
996 pub const TB_SETIMAGELIST: UINT = WM_USER + 48;
997 pub const TB_GETIMAGELIST: UINT = WM_USER + 49;
998 pub const TB_LOADIMAGES: UINT = WM_USER + 50;
999 pub const TB_GETRECT: UINT = WM_USER + 51;
1000 pub const TB_SETHOTIMAGELIST: UINT = WM_USER + 52;
1001 pub const TB_GETHOTIMAGELIST: UINT = WM_USER + 53;
1002 pub const TB_SETDISABLEDIMAGELIST: UINT = WM_USER + 54;
1003 pub const TB_GETDISABLEDIMAGELIST: UINT = WM_USER + 55;
1004 pub const TB_SETSTYLE: UINT = WM_USER + 56;
1005 pub const TB_GETSTYLE: UINT = WM_USER + 57;
1006 pub const TB_GETBUTTONSIZE: UINT = WM_USER + 58;
1007 pub const TB_SETBUTTONWIDTH: UINT = WM_USER + 59;
1008 pub const TB_SETMAXTEXTROWS: UINT = WM_USER + 60;
1009 pub const TB_GETTEXTROWS: UINT = WM_USER + 61;
1010 pub const TB_GETOBJECT: UINT = WM_USER + 62;
1011 pub const TB_GETHOTITEM: UINT = WM_USER + 71;
1012 pub const TB_SETHOTITEM: UINT = WM_USER + 72;
1013 pub const TB_SETANCHORHIGHLIGHT: UINT = WM_USER + 73;
1014 pub const TB_GETANCHORHIGHLIGHT: UINT = WM_USER + 74;
1015 pub const TB_MAPACCELERATORA: UINT = WM_USER + 78;
1016 STRUCT!{struct TBINSERTMARK {
1017     iButton: c_int,
1018     dwFlags: DWORD,
1019 }}
1020 pub type LPTBINSERTMARK = *mut TBINSERTMARK;
1021 pub const TBIMHT_AFTER: DWORD = 0x00000001;
1022 pub const TBIMHT_BACKGROUND: DWORD = 0x00000002;
1023 pub const TB_GETINSERTMARK: UINT = WM_USER + 79;
1024 pub const TB_SETINSERTMARK: UINT = WM_USER + 80;
1025 pub const TB_INSERTMARKHITTEST: UINT = WM_USER + 81;
1026 pub const TB_MOVEBUTTON: UINT = WM_USER + 82;
1027 pub const TB_GETMAXSIZE: UINT = WM_USER + 83;
1028 pub const TB_SETEXTENDEDSTYLE: UINT = WM_USER + 84;
1029 pub const TB_GETEXTENDEDSTYLE: UINT = WM_USER + 85;
1030 pub const TB_GETPADDING: UINT = WM_USER + 86;
1031 pub const TB_SETPADDING: UINT = WM_USER + 87;
1032 pub const TB_SETINSERTMARKCOLOR: UINT = WM_USER + 88;
1033 pub const TB_GETINSERTMARKCOLOR: UINT = WM_USER + 89;
1034 pub const TB_SETCOLORSCHEME: UINT = CCM_SETCOLORSCHEME;
1035 pub const TB_GETCOLORSCHEME: UINT = CCM_GETCOLORSCHEME;
1036 pub const TB_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
1037 pub const TB_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
1038 pub const TB_MAPACCELERATORW: UINT = WM_USER + 90;
1039 STRUCT!{struct TBREPLACEBITMAP {
1040     hInstOld: HINSTANCE,
1041     nIDOld: UINT_PTR,
1042     hInstNew: HINSTANCE,
1043     nIDNew: UINT_PTR,
1044     nButtons: c_int,
1045 }}
1046 pub type LPTBREPLACEBITMAP = *mut TBREPLACEBITMAP;
1047 pub const TBBF_LARGE: DWORD = 0x0001;
1048 pub const TB_GETBITMAPFLAGS: UINT = WM_USER + 41;
1049 pub const TBIF_IMAGE: DWORD = 0x00000001;
1050 pub const TBIF_TEXT: DWORD = 0x00000002;
1051 pub const TBIF_STATE: DWORD = 0x00000004;
1052 pub const TBIF_STYLE: DWORD = 0x00000008;
1053 pub const TBIF_LPARAM: DWORD = 0x00000010;
1054 pub const TBIF_COMMAND: DWORD = 0x00000020;
1055 pub const TBIF_SIZE: DWORD = 0x00000040;
1056 pub const TBIF_BYINDEX: DWORD = 0x80000000;
1057 STRUCT!{struct TBBUTTONINFOA {
1058     cbSize: UINT,
1059     dwMask: DWORD,
1060     idCommand: c_int,
1061     iImage: c_int,
1062     fsState: BYTE,
1063     fsStyle: BYTE,
1064     cx: WORD,
1065     lParam: DWORD_PTR,
1066     pszText: LPSTR,
1067     cchText: c_int,
1068 }}
1069 pub type LPTBBUTTONINFOA = *mut TBBUTTONINFOA;
1070 STRUCT!{struct TBBUTTONINFOW {
1071     cbSize: UINT,
1072     dwMask: DWORD,
1073     idCommand: c_int,
1074     iImage: c_int,
1075     fsState: BYTE,
1076     fsStyle: BYTE,
1077     cx: WORD,
1078     lParam: DWORD_PTR,
1079     pszText: LPWSTR,
1080     cchText: c_int,
1081 }}
1082 pub type LPTBBUTTONINFOW = *mut TBBUTTONINFOW;
1083 pub const TB_GETBUTTONINFOW: UINT = WM_USER + 63;
1084 pub const TB_SETBUTTONINFOW: UINT = WM_USER + 64;
1085 pub const TB_GETBUTTONINFOA: UINT = WM_USER + 65;
1086 pub const TB_SETBUTTONINFOA: UINT = WM_USER + 66;
1087 pub const TB_INSERTBUTTONW: UINT = WM_USER + 67;
1088 pub const TB_ADDBUTTONSW: UINT = WM_USER + 68;
1089 pub const TB_HITTEST: UINT = WM_USER + 69;
1090 pub const TB_SETDRAWTEXTFLAGS: UINT = WM_USER + 70;
1091 pub const TB_GETSTRINGW: UINT = WM_USER + 91;
1092 pub const TB_GETSTRINGA: UINT = WM_USER + 92;
1093 pub const TB_SETBOUNDINGSIZE: UINT = WM_USER + 93;
1094 pub const TB_SETHOTITEM2: UINT = WM_USER + 94;
1095 pub const TB_HASACCELERATOR: UINT = WM_USER + 95;
1096 pub const TB_SETLISTGAP: UINT = WM_USER + 96;
1097 pub const TB_GETIMAGELISTCOUNT: UINT = WM_USER + 98;
1098 pub const TB_GETIDEALSIZE: UINT = WM_USER + 99;
1099 pub const TBMF_PAD: DWORD = 0x00000001;
1100 pub const TBMF_BARPAD: DWORD = 0x00000002;
1101 pub const TBMF_BUTTONSPACING: DWORD = 0x00000004;
1102 STRUCT!{struct TBMETRICS {
1103     cbSize: UINT,
1104     dwMask: DWORD,
1105     cxPad: c_int,
1106     cyPad: c_int,
1107     cxBarPad: c_int,
1108     cyBarPad: c_int,
1109     cxButtonSpacing: c_int,
1110     cyButtonSpacing: c_int,
1111 }}
1112 pub type LPTBMETRICS = *mut TBMETRICS;
1113 pub const TB_GETMETRICS: UINT = WM_USER + 101;
1114 pub const TB_SETMETRICS: UINT = WM_USER + 102;
1115 pub const TB_GETITEMDROPDOWNRECT: UINT = WM_USER + 103;
1116 pub const TB_SETPRESSEDIMAGELIST: UINT = WM_USER + 104;
1117 pub const TB_GETPRESSEDIMAGELIST: UINT = WM_USER + 105;
1118 pub const TB_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
1119 pub const TBN_GETBUTTONINFOA: UINT = TBN_FIRST - 0;
1120 pub const TBN_BEGINDRAG: UINT = TBN_FIRST - 1;
1121 pub const TBN_ENDDRAG: UINT = TBN_FIRST - 2;
1122 pub const TBN_BEGINADJUST: UINT = TBN_FIRST - 3;
1123 pub const TBN_ENDADJUST: UINT = TBN_FIRST - 4;
1124 pub const TBN_RESET: UINT = TBN_FIRST - 5;
1125 pub const TBN_QUERYINSERT: UINT = TBN_FIRST - 6;
1126 pub const TBN_QUERYDELETE: UINT = TBN_FIRST - 7;
1127 pub const TBN_TOOLBARCHANGE: UINT = TBN_FIRST - 8;
1128 pub const TBN_CUSTHELP: UINT = TBN_FIRST - 9;
1129 pub const TBN_DROPDOWN: UINT = TBN_FIRST - 10;
1130 pub const TBN_GETOBJECT: UINT = TBN_FIRST - 12;
1131 STRUCT!{struct NMTBHOTITEM {
1132     hdr: NMHDR,
1133     idOld: c_int,
1134     idNew: c_int,
1135     dwFlags: DWORD,
1136 }}
1137 pub type LPNMTBHOTITEM = *mut NMTBHOTITEM;
1138 pub const HICF_OTHER: DWORD = 0x00000000;
1139 pub const HICF_MOUSE: DWORD = 0x00000001;
1140 pub const HICF_ARROWKEYS: DWORD = 0x00000002;
1141 pub const HICF_ACCELERATOR: DWORD = 0x00000004;
1142 pub const HICF_DUPACCEL: DWORD = 0x00000008;
1143 pub const HICF_ENTERING: DWORD = 0x00000010;
1144 pub const HICF_LEAVING: DWORD = 0x00000020;
1145 pub const HICF_RESELECT: DWORD = 0x00000040;
1146 pub const HICF_LMOUSE: DWORD = 0x00000080;
1147 pub const HICF_TOGGLEDROPDOWN: DWORD = 0x00000100;
1148 pub const TBN_HOTITEMCHANGE: UINT = TBN_FIRST - 13;
1149 pub const TBN_DRAGOUT: UINT = TBN_FIRST - 14;
1150 pub const TBN_DELETINGBUTTON: UINT = TBN_FIRST - 15;
1151 pub const TBN_GETDISPINFOA: UINT = TBN_FIRST - 16;
1152 pub const TBN_GETDISPINFOW: UINT = TBN_FIRST - 17;
1153 pub const TBN_GETINFOTIPA: UINT = TBN_FIRST - 18;
1154 pub const TBN_GETINFOTIPW: UINT = TBN_FIRST - 19;
1155 pub const TBN_GETBUTTONINFOW: UINT = TBN_FIRST - 20;
1156 pub const TBN_RESTORE: UINT = TBN_FIRST - 21;
1157 pub const TBN_SAVE: UINT = TBN_FIRST - 22;
1158 pub const TBN_INITCUSTOMIZE: UINT = TBN_FIRST - 23;
1159 pub const TBNRF_HIDEHELP: LRESULT = 0x00000001;
1160 pub const TBNRF_ENDCUSTOMIZE: LRESULT = 0x00000002;
1161 pub const TBN_WRAPHOTITEM: UINT = TBN_FIRST - 24;
1162 pub const TBN_DUPACCELERATOR: UINT = TBN_FIRST - 25;
1163 pub const TBN_WRAPACCELERATOR: UINT = TBN_FIRST - 26;
1164 pub const TBN_DRAGOVER: UINT = TBN_FIRST - 27;
1165 pub const TBN_MAPACCELERATOR: UINT = TBN_FIRST - 28;
1166 STRUCT!{struct NMTBSAVE {
1167     hdr: NMHDR,
1168     pData: *mut DWORD,
1169     pCurrent: *mut DWORD,
1170     cbData: UINT,
1171     iItem: c_int,
1172     cButtons: c_int,
1173     tbButton: TBBUTTON,
1174 }}
1175 pub type LPNMTBSAVE = *mut NMTBSAVE;
1176 STRUCT!{struct NMTBRESTORE {
1177     hdr: NMHDR,
1178     pData: *mut DWORD,
1179     pCurrent: *mut DWORD,
1180     cbData: UINT,
1181     iItem: c_int,
1182     cButtons: c_int,
1183     cbBytesPerRecord: c_int,
1184     tbButton: TBBUTTON,
1185 }}
1186 pub type LPNMTBRESTORE = *mut NMTBRESTORE;
1187 STRUCT!{struct NMTBGETINFOTIPA {
1188     hdr: NMHDR,
1189     pszText: LPSTR,
1190     cchTextMax: c_int,
1191     iItem: c_int,
1192     lParal: LPARAM,
1193 }}
1194 pub type LPNMTBGETINFOTIPA = *mut NMTBGETINFOTIPA;
1195 STRUCT!{struct NMTBGETINFOTIPW {
1196     hdr: NMHDR,
1197     pszText: LPWSTR,
1198     cchTextMax: c_int,
1199     iItem: c_int,
1200     lParal: LPARAM,
1201 }}
1202 pub type LPNMTBGETINFOTIPW = *mut NMTBGETINFOTIPW;
1203 pub const TBNF_IMAGE: DWORD = 0x00000001;
1204 pub const TBNF_TEXT: DWORD = 0x00000002;
1205 pub const TBNF_DI_SETITEM: DWORD = 0x10000000;
1206 STRUCT!{struct NMTBDISPINFOA {
1207     hdr: NMHDR,
1208     dwMask: DWORD,
1209     idCommand: c_int,
1210     lParam: DWORD_PTR,
1211     iImage: c_int,
1212     pszText: LPSTR,
1213     cchText: c_int,
1214 }}
1215 pub type LPNMTBDISPINFOA = *mut NMTBDISPINFOA;
1216 STRUCT!{struct NMTBDISPINFOW {
1217     hdr: NMHDR,
1218     dwMask: DWORD,
1219     idCommand: c_int,
1220     lParam: DWORD_PTR,
1221     iImage: c_int,
1222     pszText: LPWSTR,
1223     cchText: c_int,
1224 }}
1225 pub type LPNMTBDISPINFOW = *mut NMTBDISPINFOW;
1226 pub const TBDDRET_DEFAULT: LRESULT = 0;
1227 pub const TBDDRET_NODEFAULT: LRESULT = 1;
1228 pub const TBDDRET_TREATPRESSED: LRESULT = 2;
1229 pub type TBNOTIFYA = NMTOOLBARA;
1230 pub type TBNOTIFYW = NMTOOLBARW;
1231 pub type LPTBNOTIFYA = LPNMTOOLBARA;
1232 pub type LPTBNOTIFYW = LPNMTOOLBARW;
1233 STRUCT!{struct NMTOOLBARA {
1234     hdr: NMHDR,
1235     iItem: c_int,
1236     tbButton: TBBUTTON,
1237     cchText: c_int,
1238     pszText: LPSTR,
1239     rcButton: RECT,
1240 }}
1241 pub type LPNMTOOLBARA = *mut NMTOOLBARA;
1242 STRUCT!{struct NMTOOLBARW {
1243     hdr: NMHDR,
1244     iItem: c_int,
1245     tbButton: TBBUTTON,
1246     cchText: c_int,
1247     pszText: LPWSTR,
1248     rcButton: RECT,
1249 }}
1250 pub type LPNMTOOLBARW = *mut NMTOOLBARW;
1251 pub const REBARCLASSNAME: &'static str = "ReBarWindow32";
1252 pub const RBIM_IMAGELIST: UINT = 0x00000001;
1253 pub const RBS_TOOLTIPS: DWORD = 0x00000100;
1254 pub const RBS_VARHEIGHT: DWORD = 0x00000200;
1255 pub const RBS_BANDBORDERS: DWORD = 0x00000400;
1256 pub const RBS_FIXEDORDER: DWORD = 0x00000800;
1257 pub const RBS_REGISTERDROP: DWORD = 0x00001000;
1258 pub const RBS_AUTOSIZE: DWORD = 0x00002000;
1259 pub const RBS_VERTICALGRIPPER: DWORD = 0x00004000;
1260 pub const RBS_DBLCLKTOGGLE: DWORD = 0x00008000;
1261 STRUCT!{struct REBARINFO {
1262     cbSize: UINT,
1263     fMask: UINT,
1264     himl: HIMAGELIST,
1265 }}
1266 pub type LPREBARINFO = *mut REBARINFO;
1267 pub const RBBS_BREAK: UINT = 0x00000001;
1268 pub const RBBS_FIXEDSIZE: UINT = 0x00000002;
1269 pub const RBBS_CHILDEDGE: UINT = 0x00000004;
1270 pub const RBBS_HIDDEN: UINT = 0x00000008;
1271 pub const RBBS_NOVERT: UINT = 0x00000010;
1272 pub const RBBS_FIXEDBMP: UINT = 0x00000020;
1273 pub const RBBS_VARIABLEHEIGHT: UINT = 0x00000040;
1274 pub const RBBS_GRIPPERALWAYS: UINT = 0x00000080;
1275 pub const RBBS_NOGRIPPER: UINT = 0x00000100;
1276 pub const RBBS_USECHEVRON: UINT = 0x00000200;
1277 pub const RBBS_HIDETITLE: UINT = 0x00000400;
1278 pub const RBBS_TOPALIGN: UINT = 0x00000800;
1279 pub const RBBIM_STYLE: UINT = 0x00000001;
1280 pub const RBBIM_COLORS: UINT = 0x00000002;
1281 pub const RBBIM_TEXT: UINT = 0x00000004;
1282 pub const RBBIM_IMAGE: UINT = 0x00000008;
1283 pub const RBBIM_CHILD: UINT = 0x00000010;
1284 pub const RBBIM_CHILDSIZE: UINT = 0x00000020;
1285 pub const RBBIM_SIZE: UINT = 0x00000040;
1286 pub const RBBIM_BACKGROUND: UINT = 0x00000080;
1287 pub const RBBIM_ID: UINT = 0x00000100;
1288 pub const RBBIM_IDEALSIZE: UINT = 0x00000200;
1289 pub const RBBIM_LPARAM: UINT = 0x00000400;
1290 pub const RBBIM_HEADERSIZE: UINT = 0x00000800;
1291 pub const RBBIM_CHEVRONLOCATION: UINT = 0x00001000;
1292 pub const RBBIM_CHEVRONSTATE: UINT = 0x00002000;
1293 STRUCT!{struct REBARBANDINFOA {
1294     cbSize: UINT,
1295     fMask: UINT,
1296     fStyle: UINT,
1297     clrFore: COLORREF,
1298     clrBack: COLORREF,
1299     lpText: LPSTR,
1300     cch: UINT,
1301     iImage: c_int,
1302     hwndChild: HWND,
1303     cxMinChild: UINT,
1304     cyMinChild: UINT,
1305     cx: UINT,
1306     hbmBack: HBITMAP,
1307     wID: UINT,
1308     cyChild: UINT,
1309     cyMaxChild: UINT,
1310     cyIntegral: UINT,
1311     cxIdeal: UINT,
1312     lParam: LPARAM,
1313     cxHeader: UINT,
1314     rcChevronLocation: RECT,
1315     uChevronState: UINT,
1316 }}
1317 pub type LPREBARBANDINFOA = *mut REBARBANDINFOA;
1318 pub type LPCREBARBANDINFOA = *const REBARBANDINFOA;
1319 STRUCT!{struct REBARBANDINFOW {
1320     cbSize: UINT,
1321     fMask: UINT,
1322     fStyle: UINT,
1323     clrFore: COLORREF,
1324     clrBack: COLORREF,
1325     lpText: LPWSTR,
1326     cch: UINT,
1327     iImage: c_int,
1328     hwndChild: HWND,
1329     cxMinChild: UINT,
1330     cyMinChild: UINT,
1331     cx: UINT,
1332     hbmBack: HBITMAP,
1333     wID: UINT,
1334     cyChild: UINT,
1335     cyMaxChild: UINT,
1336     cyIntegral: UINT,
1337     cxIdeal: UINT,
1338     lParam: LPARAM,
1339     cxHeader: UINT,
1340     rcChevronLocation: RECT,
1341     uChevronState: UINT,
1342 }}
1343 pub type LPREBARBANDINFOW = *mut REBARBANDINFOW;
1344 pub type LPCREBARBANDINFOW = *const REBARBANDINFOW;
1345 pub const RB_INSERTBANDA: UINT = WM_USER + 1;
1346 pub const RB_DELETEBAND: UINT = WM_USER + 2;
1347 pub const RB_GETBARINFO: UINT = WM_USER + 3;
1348 pub const RB_SETBARINFO: UINT = WM_USER + 4;
1349 pub const RB_SETBANDINFOA: UINT = WM_USER + 6;
1350 pub const RB_SETPARENT: UINT = WM_USER + 7;
1351 pub const RB_HITTEST: UINT = WM_USER + 8;
1352 pub const RB_GETRECT: UINT = WM_USER + 9;
1353 pub const RB_INSERTBANDW: UINT = WM_USER + 10;
1354 pub const RB_SETBANDINFOW: UINT = WM_USER + 11;
1355 pub const RB_GETBANDCOUNT: UINT = WM_USER + 12;
1356 pub const RB_GETROWCOUNT: UINT = WM_USER + 13;
1357 pub const RB_GETROWHEIGHT: UINT = WM_USER + 14;
1358 pub const RB_IDTOINDEX: UINT = WM_USER + 16;
1359 pub const RB_GETTOOLTIPS: UINT = WM_USER + 17;
1360 pub const RB_SETTOOLTIPS: UINT = WM_USER + 18;
1361 pub const RB_SETBKCOLOR: UINT = WM_USER + 19;
1362 pub const RB_GETBKCOLOR: UINT = WM_USER + 20;
1363 pub const RB_SETTEXTCOLOR: UINT = WM_USER + 21;
1364 pub const RB_GETTEXTCOLOR: UINT = WM_USER + 22;
1365 pub const RBSTR_CHANGERECT: WPARAM = 0x0001;
1366 pub const RB_SIZETORECT: UINT = WM_USER + 23;
1367 pub const RB_SETCOLORSCHEME: UINT = CCM_SETCOLORSCHEME;
1368 pub const RB_GETCOLORSCHEME: UINT = CCM_GETCOLORSCHEME;
1369 pub const RB_BEGINDRAG: UINT = WM_USER + 24;
1370 pub const RB_ENDDRAG: UINT = WM_USER + 25;
1371 pub const RB_DRAGMOVE: UINT = WM_USER + 26;
1372 pub const RB_GETBARHEIGHT: UINT = WM_USER + 27;
1373 pub const RB_GETBANDINFOW: UINT = WM_USER + 28;
1374 pub const RB_GETBANDINFOA: UINT = WM_USER + 29;
1375 pub const RB_MINIMIZEBAND: UINT = WM_USER + 30;
1376 pub const RB_MAXIMIZEBAND: UINT = WM_USER + 31;
1377 pub const RB_GETDROPTARGET: UINT = CCM_GETDROPTARGET;
1378 pub const RB_GETBANDBORDERS: UINT = WM_USER + 34;
1379 pub const RB_SHOWBAND: UINT = WM_USER + 35;
1380 pub const RB_SETPALETTE: UINT = WM_USER + 37;
1381 pub const RB_GETPALETTE: UINT = WM_USER + 38;
1382 pub const RB_MOVEBAND: UINT = WM_USER + 39;
1383 pub const RB_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
1384 pub const RB_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
1385 pub const RB_GETBANDMARGINS: UINT = WM_USER + 40;
1386 pub const RB_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
1387 pub const RB_SETEXTENDEDSTYLE: UINT = WM_USER + 41;
1388 pub const RB_GETEXTENDEDSTYLE: UINT = WM_USER + 42;
1389 pub const RB_PUSHCHEVRON: UINT = WM_USER + 43;
1390 pub const RB_SETBANDWIDTH: UINT = WM_USER + 44;
1391 pub const RBN_HEIGHTCHANGE: UINT = RBN_FIRST - 0;
1392 pub const RBN_GETOBJECT: UINT = RBN_FIRST - 1;
1393 pub const RBN_LAYOUTCHANGED: UINT = RBN_FIRST - 2;
1394 pub const RBN_AUTOSIZE: UINT = RBN_FIRST - 3;
1395 pub const RBN_BEGINDRAG: UINT = RBN_FIRST - 4;
1396 pub const RBN_ENDDRAG: UINT = RBN_FIRST - 5;
1397 pub const RBN_DELETINGBAND: UINT = RBN_FIRST - 6;
1398 pub const RBN_DELETEDBAND: UINT = RBN_FIRST - 7;
1399 pub const RBN_CHILDSIZE: UINT = RBN_FIRST - 8;
1400 pub const RBN_CHEVRONPUSHED: UINT = RBN_FIRST - 10;
1401 pub const RBN_SPLITTERDRAG: UINT = RBN_FIRST - 11;
1402 pub const RBN_MINMAX: UINT = RBN_FIRST - 21;
1403 pub const RBN_AUTOBREAK: UINT = RBN_FIRST - 22;
1404 STRUCT!{struct NMREBARCHILDSIZE {
1405     hdr: NMHDR,
1406     uBand: UINT,
1407     wID: UINT,
1408     rcChild: RECT,
1409     rcBand: RECT,
1410 }}
1411 pub type LPNMREBARCHILDSIZE = *mut NMREBARCHILDSIZE;
1412 STRUCT!{struct NMREBAR {
1413     hdr: NMHDR,
1414     dwMask: DWORD,
1415     uBand: UINT,
1416     fStyle: UINT,
1417     wID: UINT,
1418     lParam: LPARAM,
1419 }}
1420 pub type LPNMREBAR = *mut NMREBAR;
1421 pub const RBNM_ID: DWORD = 0x00000001;
1422 pub const RBNM_STYLE: DWORD = 0x00000002;
1423 pub const RBNM_LPARAM: DWORD = 0x00000004;
1424 STRUCT!{struct NMRBAUTOSIZE {
1425     hdr: NMHDR,
1426     fChanged: BOOL,
1427     rcTarget: RECT,
1428     rcActual: RECT,
1429 }}
1430 pub type LPNMRBAUTOSIZE = *mut NMRBAUTOSIZE;
1431 STRUCT!{struct NMREBARCHEVRON {
1432     hdr: NMHDR,
1433     uBand: UINT,
1434     wID: UINT,
1435     lParam: LPARAM,
1436     rc: RECT,
1437     lParamNM: LPARAM,
1438 }}
1439 pub type LPNMREBARCHEVRON = *mut NMREBARCHEVRON;
1440 STRUCT!{struct NMREBARSPLITTER {
1441     hdr: NMHDR,
1442     rcSizing: RECT,
1443 }}
1444 pub type LPNMREBARSPLITTER = *mut NMREBARSPLITTER;
1445 pub const RBAB_AUTOSIZE: UINT = 0x0001;
1446 pub const RBAB_ADDBAND: UINT = 0x0002;
1447 STRUCT!{struct NMREBARAUTOBREAK {
1448     hdr: NMHDR,
1449     uBand: UINT,
1450     wID: UINT,
1451     lParam: LPARAM,
1452     uMsg: UINT,
1453     fStyleCurrent: UINT,
1454     fAutoBreak: UINT,
1455 }}
1456 pub type LPNMREBARAUTOBREAK = *mut NMREBARAUTOBREAK;
1457 pub const RBHT_NOWHERE: UINT = 0x0001;
1458 pub const RBHT_CAPTION: UINT = 0x0002;
1459 pub const RBHT_CLIENT: UINT = 0x0003;
1460 pub const RBHT_GRABBER: UINT = 0x0004;
1461 pub const RBHT_CHEVRON: UINT = 0x0008;
1462 pub const RBHT_SPLITTER: UINT = 0x0010;
1463 STRUCT!{struct RBHITTESTINFO {
1464     pt: POINT,
1465     flags: UINT,
1466     iBand: c_int,
1467 }}
1468 pub type LPRBHITTESTINFO = *mut RBHITTESTINFO;
1469 pub const TOOLTIPS_CLASS: &'static str = "tooltips_class32";
1470 pub type LPTOOLINFOA = LPTTTOOLINFOA;
1471 pub type LPTOOLINFOW = LPTTTOOLINFOW;
1472 pub type TOOLINFOA = TTTOOLINFOA;
1473 pub type TOOLINFOW = TTTOOLINFOW;
1474 STRUCT!{struct TTTOOLINFOA {
1475     cbSize: UINT,
1476     uFlags: UINT,
1477     hwnd: HWND,
1478     uId: UINT_PTR,
1479     rect: RECT,
1480     hinst: HINSTANCE,
1481     lpszText: LPSTR,
1482     lParam: LPARAM,
1483     lpReserved: *mut c_void,
1484 }}
1485 pub type PTTTOOLINFOA = *mut TTTOOLINFOA;
1486 pub type LPTTTOOLINFOA = *mut TTTOOLINFOA;
1487 STRUCT!{struct TTTOOLINFOW {
1488     cbSize: UINT,
1489     uFlags: UINT,
1490     hwnd: HWND,
1491     uId: UINT_PTR,
1492     rect: RECT,
1493     hinst: HINSTANCE,
1494     lpszText: LPSTR,
1495     lParam: LPARAM,
1496     lpReserved: *mut c_void,
1497 }}
1498 pub type PTTTOOLINFOW = *mut TTTOOLINFOW;
1499 pub type LPTTTOOLINFOW = *mut TTTOOLINFOW;
1500 pub const TTS_ALWAYSTIP: DWORD = 0x01;
1501 pub const TTS_NOPREFIX: DWORD = 0x02;
1502 pub const TTS_NOANIMATE: DWORD = 0x10;
1503 pub const TTS_NOFADE: DWORD = 0x20;
1504 pub const TTS_BALLOON: DWORD = 0x40;
1505 pub const TTS_CLOSE: DWORD = 0x80;
1506 pub const TTS_USEVISUALSTYLE: DWORD = 0x100;
1507 pub const TTF_IDISHWND: UINT = 0x0001;
1508 pub const TTF_CENTERTIP: UINT = 0x0002;
1509 pub const TTF_RTLREADING: UINT = 0x0004;
1510 pub const TTF_SUBCLASS: UINT = 0x0010;
1511 pub const TTF_TRACK: UINT = 0x0020;
1512 pub const TTF_ABSOLUTE: UINT = 0x0080;
1513 pub const TTF_TRANSPARENT: UINT = 0x0100;
1514 pub const TTF_PARSELINKS: UINT = 0x1000;
1515 pub const TTF_DI_SETITEM: UINT = 0x8000;
1516 pub const TTDT_AUTOMATIC: WPARAM = 0;
1517 pub const TTDT_RESHOW: WPARAM = 1;
1518 pub const TTDT_AUTOPOP: WPARAM = 2;
1519 pub const TTDT_INITIAL: WPARAM = 3;
1520 pub const TTI_NONE: WPARAM = 0;
1521 pub const TTI_INFO: WPARAM = 1;
1522 pub const TTI_WARNING: WPARAM = 2;
1523 pub const TTI_ERROR: WPARAM = 3;
1524 pub const TTI_INFO_LARGE: WPARAM = 4;
1525 pub const TTI_WARNING_LARGE: WPARAM = 5;
1526 pub const TTI_ERROR_LARGE: WPARAM = 6;
1527 pub const TTM_ACTIVATE: UINT = WM_USER + 1;
1528 pub const TTM_SETDELAYTIME: UINT = WM_USER + 3;
1529 pub const TTM_ADDTOOLA: UINT = WM_USER + 4;
1530 pub const TTM_ADDTOOLW: UINT = WM_USER + 50;
1531 pub const TTM_DELTOOLA: UINT = WM_USER + 5;
1532 pub const TTM_DELTOOLW: UINT = WM_USER + 51;
1533 pub const TTM_NEWTOOLRECTA: UINT = WM_USER + 6;
1534 pub const TTM_NEWTOOLRECTW: UINT = WM_USER + 52;
1535 pub const TTM_RELAYEVENT: UINT = WM_USER + 7;
1536 pub const TTM_GETTOOLINFOA: UINT = WM_USER + 8;
1537 pub const TTM_GETTOOLINFOW: UINT = WM_USER + 53;
1538 pub const TTM_SETTOOLINFOA: UINT = WM_USER + 9;
1539 pub const TTM_SETTOOLINFOW: UINT = WM_USER + 54;
1540 pub const TTM_HITTESTA: UINT = WM_USER + 10;
1541 pub const TTM_HITTESTW: UINT = WM_USER + 55;
1542 pub const TTM_GETTEXTA: UINT = WM_USER + 11;
1543 pub const TTM_GETTEXTW: UINT = WM_USER + 56;
1544 pub const TTM_UPDATETIPTEXTA: UINT = WM_USER + 12;
1545 pub const TTM_UPDATETIPTEXTW: UINT = WM_USER + 57;
1546 pub const TTM_GETTOOLCOUNT: UINT = WM_USER + 13;
1547 pub const TTM_ENUMTOOLSA: UINT = WM_USER + 14;
1548 pub const TTM_ENUMTOOLSW: UINT = WM_USER + 58;
1549 pub const TTM_GETCURRENTTOOLA: UINT = WM_USER + 15;
1550 pub const TTM_GETCURRENTTOOLW: UINT = WM_USER + 59;
1551 pub const TTM_WINDOWFROMPOINT: UINT = WM_USER + 16;
1552 pub const TTM_TRACKACTIVATE: UINT = WM_USER + 17;
1553 pub const TTM_TRACKPOSITION: UINT = WM_USER + 18;
1554 pub const TTM_SETTIPBKCOLOR: UINT = WM_USER + 19;
1555 pub const TTM_SETTIPTEXTCOLOR: UINT = WM_USER + 20;
1556 pub const TTM_GETDELAYTIME: UINT = WM_USER + 21;
1557 pub const TTM_GETTIPBKCOLOR: UINT = WM_USER + 22;
1558 pub const TTM_GETTIPTEXTCOLOR: UINT = WM_USER + 23;
1559 pub const TTM_SETMAXTIPWIDTH: UINT = WM_USER + 24;
1560 pub const TTM_GETMAXTIPWIDTH: UINT = WM_USER + 25;
1561 pub const TTM_SETMARGIN: UINT = WM_USER + 26;
1562 pub const TTM_GETMARGIN: UINT = WM_USER + 27;
1563 pub const TTM_POP: UINT = WM_USER + 28;
1564 pub const TTM_UPDATE: UINT = WM_USER + 29;
1565 pub const TTM_GETBUBBLESIZE: UINT = WM_USER + 30;
1566 pub const TTM_ADJUSTRECT: UINT = WM_USER + 31;
1567 pub const TTM_SETTITLEA: UINT = WM_USER + 32;
1568 pub const TTM_SETTITLEW: UINT = WM_USER + 33;
1569 pub const TTM_POPUP: UINT = WM_USER + 34;
1570 pub const TTM_GETTITLE: UINT = WM_USER + 35;
1571 STRUCT!{struct TTGETTITLE {
1572     dwSize: DWORD,
1573     uTitleBitmap: UINT,
1574     cch: UINT,
1575     pszTitle: *mut WCHAR,
1576 }}
1577 pub type LPTTGETTITLE = *mut TTGETTITLE;
1578 pub const TTM_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
1579 pub type LPHITTESTINFOW = LPTTHITTESTINFOW;
1580 pub type LPHITTESTINFOA = LPTTHITTESTINFOA;
1581 STRUCT!{struct TTHITTESTINFOA {
1582     hwnd: HWND,
1583     pt: POINT,
1584     ti: TTTOOLINFOA,
1585 }}
1586 pub type LPTTHITTESTINFOA = *mut TTHITTESTINFOA;
1587 STRUCT!{struct TTHITTESTINFOW {
1588     hwnd: HWND,
1589     pt: POINT,
1590     ti: TTTOOLINFOW,
1591 }}
1592 pub type LPTTHITTESTINFOW = *mut TTHITTESTINFOW;
1593 pub const TTN_GETDISPINFOA: UINT = TTN_FIRST - 0;
1594 pub const TTN_GETDISPINFOW: UINT = TTN_FIRST - 10;
1595 pub const TTN_SHOW: UINT = TTN_FIRST - 1;
1596 pub const TTN_POP: UINT = TTN_FIRST - 2;
1597 pub const TTN_LINKCLICK: UINT = TTN_FIRST - 3;
1598 pub const TTN_NEEDTEXTA: UINT = TTN_GETDISPINFOA;
1599 pub const TTN_NEEDTEXTW: UINT = TTN_GETDISPINFOW;
1600 pub type TOOLTIPTEXTW = NMTTDISPINFOW;
1601 pub type TOOLTIPTEXTA = NMTTDISPINFOA;
1602 pub type LPTOOLTIPTEXTA = LPNMTTDISPINFOA;
1603 pub type LPTOOLTIPTEXTW = LPNMTTDISPINFOW;
1604 STRUCT!{struct NMTTDISPINFOA {
1605     hdr: NMHDR,
1606     lpszText: LPSTR,
1607     szText: [c_char; 80],
1608     hinst: HINSTANCE,
1609     uFlags: UINT,
1610     lParam: LPARAM,
1611 }}
1612 pub type LPNMTTDISPINFOA = *mut NMTTDISPINFOA;
1613 STRUCT!{struct NMTTDISPINFOW {
1614     hdr: NMHDR,
1615     lpszText: LPWSTR,
1616     szText: [WCHAR; 80],
1617     hinst: HINSTANCE,
1618     uFlags: UINT,
1619     lParam: LPARAM,
1620 }}
1621 pub type LPNMTTDISPINFOW = *mut NMTTDISPINFOW;
1622 pub const SBARS_SIZEGRIP: DWORD = 0x0100;
1623 pub const SBARS_TOOLTIPS: DWORD = 0x0800;
1624 pub const SBT_TOOLTIPS: DWORD = 0x0800;
1625 extern "system" {
DrawStatusTextA( hDC: HDC, lprc: LPCRECT, pszText: LPCSTR, uFlags: UINT, )1626     pub fn DrawStatusTextA(
1627         hDC: HDC,
1628         lprc: LPCRECT,
1629         pszText: LPCSTR,
1630         uFlags: UINT,
1631     );
DrawStatusTextW( hDC: HDC, lprc: LPCRECT, pszText: LPCWSTR, uFlags: UINT, )1632     pub fn DrawStatusTextW(
1633         hDC: HDC,
1634         lprc: LPCRECT,
1635         pszText: LPCWSTR,
1636         uFlags: UINT,
1637     );
CreateStatusWindowA( style: LONG, lpszText: LPCSTR, hwndParent: HWND, wID: UINT, ) -> HWND1638     pub fn CreateStatusWindowA(
1639         style: LONG,
1640         lpszText: LPCSTR,
1641         hwndParent: HWND,
1642         wID: UINT,
1643     ) -> HWND;
CreateStatusWindowW( style: LONG, lpszText: LPCWSTR, hwndParent: HWND, wID: UINT, ) -> HWND1644     pub fn CreateStatusWindowW(
1645         style: LONG,
1646         lpszText: LPCWSTR,
1647         hwndParent: HWND,
1648         wID: UINT,
1649     ) -> HWND;
1650 }
1651 pub const STATUSCLASSNAME: &'static str = "msctls_statusbar32";
1652 pub const SB_SETTEXTA: UINT = WM_USER + 1;
1653 pub const SB_SETTEXTW: UINT = WM_USER + 11;
1654 pub const SB_GETTEXTA: UINT = WM_USER + 2;
1655 pub const SB_GETTEXTW: UINT = WM_USER + 13;
1656 pub const SB_GETTEXTLENGTHA: UINT = WM_USER + 3;
1657 pub const SB_GETTEXTLENGTHW: UINT = WM_USER + 12;
1658 pub const SB_SETPARTS: UINT = WM_USER + 4;
1659 pub const SB_GETPARTS: UINT = WM_USER + 6;
1660 pub const SB_GETBORDERS: UINT = WM_USER + 7;
1661 pub const SB_SETMINHEIGHT: UINT = WM_USER + 8;
1662 pub const SB_SIMPLE: UINT = WM_USER + 9;
1663 pub const SB_GETRECT: UINT = WM_USER + 10;
1664 pub const SB_ISSIMPLE: UINT = WM_USER + 14;
1665 pub const SB_SETICON: UINT = WM_USER + 15;
1666 pub const SB_SETTIPTEXTA: UINT = WM_USER + 16;
1667 pub const SB_SETTIPTEXTW: UINT = WM_USER + 17;
1668 pub const SB_GETTIPTEXTA: UINT = WM_USER + 18;
1669 pub const SB_GETTIPTEXTW: UINT = WM_USER + 19;
1670 pub const SB_GETICON: UINT = WM_USER + 20;
1671 pub const SB_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
1672 pub const SB_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
1673 pub const SBT_OWNERDRAW: WPARAM = 0x1000;
1674 pub const SBT_NOBORDERS: WPARAM = 0x0100;
1675 pub const SBT_POPOUT: WPARAM = 0x0200;
1676 pub const SBT_RTLREADING: WPARAM = 0x0400;
1677 pub const SBT_NOTABPARSING: WPARAM = 0x0800;
1678 pub const SB_SETBKCOLOR: UINT = CCM_SETBKCOLOR;
1679 pub const SBN_SIMPLEMODECHANGE: UINT = SBN_FIRST - 0;
1680 pub const SB_SIMPLEID: WPARAM = 0x00ff;
1681 extern "system" {
MenuHelp( uMsg: UINT, wParam: WPARAM, lParam: LPARAM, hMainMenu: HMENU, hInst: HINSTANCE, hwndStatus: HWND, lpwIDs: *mut UINT, )1682     pub fn MenuHelp(
1683         uMsg: UINT,
1684         wParam: WPARAM,
1685         lParam: LPARAM,
1686         hMainMenu: HMENU,
1687         hInst: HINSTANCE,
1688         hwndStatus: HWND,
1689         lpwIDs: *mut UINT,
1690     );
ShowHideMenuCtl( hWnd: HWND, uFlags: UINT_PTR, lpInfo: LPINT, ) -> BOOL1691     pub fn ShowHideMenuCtl(
1692         hWnd: HWND,
1693         uFlags: UINT_PTR,
1694         lpInfo: LPINT,
1695     ) -> BOOL;
GetEffectiveClientRect( hWnd: HWND, lprc: LPRECT, lpInfo: *const INT, )1696     pub fn GetEffectiveClientRect(
1697         hWnd: HWND,
1698         lprc: LPRECT,
1699         lpInfo: *const INT,
1700     );
1701 }
1702 pub const TRACKBAR_CLASS: &'static str = "msctls_trackbar32";
1703 pub const TBS_AUTOTICKS: DWORD = 0x0001;
1704 pub const TBS_VERT: DWORD = 0x0002;
1705 pub const TBS_HORZ: DWORD = 0x0000;
1706 pub const TBS_TOP: DWORD = 0x0004;
1707 pub const TBS_BOTTOM: DWORD = 0x0000;
1708 pub const TBS_LEFT: DWORD = 0x0004;
1709 pub const TBS_RIGHT: DWORD = 0x0000;
1710 pub const TBS_BOTH: DWORD = 0x0008;
1711 pub const TBS_NOTICKS: DWORD = 0x0010;
1712 pub const TBS_ENABLESELRANGE: DWORD = 0x0020;
1713 pub const TBS_FIXEDLENGTH: DWORD = 0x0040;
1714 pub const TBS_NOTHUMB: DWORD = 0x0080;
1715 pub const TBS_TOOLTIPS: DWORD = 0x0100;
1716 pub const TBS_REVERSED: DWORD = 0x0200;
1717 pub const TBS_DOWNISLEFT: DWORD = 0x0400;
1718 pub const TBS_NOTIFYBEFOREMOVE: DWORD = 0x0800;
1719 pub const TBS_TRANSPARENTBKGND: DWORD = 0x1000;
1720 pub const TBM_GETPOS: UINT = WM_USER;
1721 pub const TBM_GETRANGEMIN: UINT = WM_USER + 1;
1722 pub const TBM_GETRANGEMAX: UINT = WM_USER + 2;
1723 pub const TBM_GETTIC: UINT = WM_USER + 3;
1724 pub const TBM_SETTIC: UINT = WM_USER + 4;
1725 pub const TBM_SETPOS: UINT = WM_USER + 5;
1726 pub const TBM_SETRANGE: UINT = WM_USER + 6;
1727 pub const TBM_SETRANGEMIN: UINT = WM_USER + 7;
1728 pub const TBM_SETRANGEMAX: UINT = WM_USER + 8;
1729 pub const TBM_CLEARTICS: UINT = WM_USER + 9;
1730 pub const TBM_SETSEL: UINT = WM_USER + 10;
1731 pub const TBM_SETSELSTART: UINT = WM_USER + 11;
1732 pub const TBM_SETSELEND: UINT = WM_USER + 12;
1733 pub const TBM_GETPTICS: UINT = WM_USER + 14;
1734 pub const TBM_GETTICPOS: UINT = WM_USER + 15;
1735 pub const TBM_GETNUMTICS: UINT = WM_USER + 16;
1736 pub const TBM_GETSELSTART: UINT = WM_USER + 17;
1737 pub const TBM_GETSELEND: UINT = WM_USER + 18;
1738 pub const TBM_CLEARSEL: UINT = WM_USER + 19;
1739 pub const TBM_SETTICFREQ: UINT = WM_USER + 20;
1740 pub const TBM_SETPAGESIZE: UINT = WM_USER + 21;
1741 pub const TBM_GETPAGESIZE: UINT = WM_USER + 22;
1742 pub const TBM_SETLINESIZE: UINT = WM_USER + 23;
1743 pub const TBM_GETLINESIZE: UINT = WM_USER + 24;
1744 pub const TBM_GETTHUMBRECT: UINT = WM_USER + 25;
1745 pub const TBM_GETCHANNELRECT: UINT = WM_USER + 26;
1746 pub const TBM_SETTHUMBLENGTH: UINT = WM_USER + 27;
1747 pub const TBM_GETTHUMBLENGTH: UINT = WM_USER + 28;
1748 pub const TBM_SETTOOLTIPS: UINT = WM_USER + 29;
1749 pub const TBM_GETTOOLTIPS: UINT = WM_USER + 30;
1750 pub const TBM_SETTIPSIDE: UINT = WM_USER + 31;
1751 pub const TBTS_TOP: WPARAM = 0;
1752 pub const TBTS_LEFT: WPARAM = 1;
1753 pub const TBTS_BOTTOM: WPARAM = 2;
1754 pub const TBTS_RIGHT: WPARAM = 3;
1755 pub const TBM_SETBUDDY: UINT = WM_USER + 32;
1756 pub const TBM_GETBUDDY: UINT = WM_USER + 33;
1757 pub const TBM_SETPOSNOTIFY: UINT = WM_USER + 34;
1758 pub const TBM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
1759 pub const TBM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
1760 pub const TB_LINEUP: WPARAM = 0;
1761 pub const TB_LINEDOWN: WPARAM = 1;
1762 pub const TB_PAGEUP: WPARAM = 2;
1763 pub const TB_PAGEDOWN: WPARAM = 3;
1764 pub const TB_THUMBPOSITION: WPARAM = 4;
1765 pub const TB_THUMBTRACK: WPARAM = 5;
1766 pub const TB_TOP: WPARAM = 6;
1767 pub const TB_BOTTOM: WPARAM = 7;
1768 pub const TB_ENDTRACK: WPARAM = 8;
1769 pub const TBCD_TICS: DWORD_PTR = 0x0001;
1770 pub const TBCD_THUMB: DWORD_PTR = 0x0001;
1771 pub const TBCD_CHANNEL: DWORD_PTR = 0x0001;
1772 pub const TRBN_THUMBPOSCHANGING: UINT = TRBN_FIRST - 1;
1773 STRUCT!{struct NMTRBTHUMBPOSCHANGING {
1774     hdr: NMHDR,
1775     dwPos: DWORD,
1776     nReason: c_int,
1777 }}
1778 STRUCT!{struct DRAGLISTINFO {
1779     uNotification: UINT,
1780     hWnd: HWND,
1781     ptCursor: POINT,
1782 }}
1783 pub type LPDRAGLISTINFO = *mut DRAGLISTINFO;
1784 pub const DL_BEGINDRAG: UINT = WM_USER + 133;
1785 pub const DL_DRAGGING: UINT = WM_USER + 134;
1786 pub const DL_DROPPED: UINT = WM_USER + 135;
1787 pub const DL_CANCELDRAG: UINT = WM_USER + 136;
1788 pub const DL_CURSORSET: UINT = 0;
1789 pub const DL_STOPCURSOR: UINT = 1;
1790 pub const DL_COPYCURSOR: UINT = 2;
1791 pub const DL_MOVECURSOR: UINT = 3;
1792 pub const DRAGLISTMSGSTRING: &'static str = "commctrl_DragListMsg";
1793 extern "system" {
MakeDragList( hLB: HWND, ) -> BOOL1794     pub fn MakeDragList(
1795         hLB: HWND,
1796     ) -> BOOL;
DrawInsert( handParent: HWND, hLB: HWND, nItem: c_int, )1797     pub fn DrawInsert(
1798         handParent: HWND,
1799         hLB: HWND,
1800         nItem: c_int,
1801     );
LBItemFromPt( hLB: HWND, pt: POINT, bAutoScroll: BOOL, ) -> c_int1802     pub fn LBItemFromPt(
1803         hLB: HWND,
1804         pt: POINT,
1805         bAutoScroll: BOOL,
1806     ) -> c_int;
1807 }
1808 pub const UPDOWN_CLASS: &'static str = "msctls_updown32";
1809 STRUCT!{struct UDACCEL {
1810     nSec: UINT,
1811     nInc: UINT,
1812 }}
1813 pub type LPUDACCEL = *mut UDACCEL;
1814 pub const UD_MAXVAL: c_short = 0x7fff;
1815 pub const UD_MINVAL: c_short = 0 - UD_MAXVAL;
1816 pub const UDS_WRAP: DWORD = 0x0001;
1817 pub const UDS_SETBUDDYINT: DWORD = 0x0002;
1818 pub const UDS_ALIGNRIGHT: DWORD = 0x0004;
1819 pub const UDS_ALIGNLEFT: DWORD = 0x0008;
1820 pub const UDS_AUTOBUDDY: DWORD = 0x0010;
1821 pub const UDS_ARROWKEYS: DWORD = 0x0020;
1822 pub const UDS_HORZ: DWORD = 0x0040;
1823 pub const UDS_NOTHOUSANDS: DWORD = 0x0080;
1824 pub const UDS_HOTTRACK: DWORD = 0x0100;
1825 pub const UDM_SETRANGE: UINT = WM_USER + 101;
1826 pub const UDM_GETRANGE: UINT = WM_USER + 102;
1827 pub const UDM_SETPOS: UINT = WM_USER + 103;
1828 pub const UDM_GETPOS: UINT = WM_USER + 104;
1829 pub const UDM_SETBUDDY: UINT = WM_USER + 105;
1830 pub const UDM_GETBUDDY: UINT = WM_USER + 106;
1831 pub const UDM_SETACCEL: UINT = WM_USER + 107;
1832 pub const UDM_GETACCEL: UINT = WM_USER + 108;
1833 pub const UDM_SETBASE: UINT = WM_USER + 109;
1834 pub const UDM_GETBASE: UINT = WM_USER + 110;
1835 pub const UDM_SETRANGE32: UINT = WM_USER + 111;
1836 pub const UDM_GETRANGE32: UINT = WM_USER + 112;
1837 pub const UDM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
1838 pub const UDM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
1839 pub const UDM_SETPOS32: UINT = WM_USER + 113;
1840 pub const UDM_GETPOS32: UINT = WM_USER + 114;
1841 extern "system" {
CreateUpDownControl( dwStyle: DWORD, x: c_int, y: c_int, cx: c_int, cy: c_int, hParent: HWND, nID: c_int, hInst: HINSTANCE, nBuddy: HWND, nUpper: c_int, nLower: c_int, nPos: c_int, ) -> HWND1842     pub fn CreateUpDownControl(
1843         dwStyle: DWORD,
1844         x: c_int,
1845         y: c_int,
1846         cx: c_int,
1847         cy: c_int,
1848         hParent: HWND,
1849         nID: c_int,
1850         hInst: HINSTANCE,
1851         nBuddy: HWND,
1852         nUpper: c_int,
1853         nLower: c_int,
1854         nPos: c_int,
1855     ) -> HWND;
1856 }
1857 pub type NM_UPDOWN = NMUPDOWN;
1858 pub type LPNM_UPDOWN = LPNMUPDOWN;
1859 STRUCT!{struct NMUPDOWN {
1860     hdr: NMHDR,
1861     iPos: c_int,
1862     iDelta: c_int,
1863 }}
1864 pub type LPNMUPDOWN = *mut NMUPDOWN;
1865 pub const UDN_DELTAPOS: UINT = UDN_FIRST - 1;
1866 pub const PROGRESS_CLASS: &'static str = "msctls_progress32";
1867 pub const PBS_SMOOTH: DWORD = 0x01;
1868 pub const PBS_VERTICAL: DWORD = 0x04;
1869 pub const PBM_SETRANGE: UINT = WM_USER + 1;
1870 pub const PBM_SETPOS: UINT = WM_USER + 2;
1871 pub const PBM_DELTAPOS: UINT = WM_USER + 3;
1872 pub const PBM_SETSTEP: UINT = WM_USER + 4;
1873 pub const PBM_STEPIT: UINT = WM_USER + 5;
1874 pub const PBM_SETRANGE32: UINT = WM_USER + 6;
1875 STRUCT!{struct PBRANGE {
1876     iLow: c_int,
1877     iHigh: c_int,
1878 }}
1879 pub type LPPBRANGE = *mut PBRANGE;
1880 pub const PBM_GETRANGE: UINT = WM_USER + 7;
1881 pub const PBM_GETPOS: UINT = WM_USER + 8;
1882 pub const PBM_SETBARCOLOR: UINT = WM_USER + 9;
1883 pub const PBM_SETBKCOLOR: UINT = CCM_SETBKCOLOR;
1884 pub const PBS_MARQUEE: DWORD = 0x08;
1885 pub const PBM_SETMARQUEE: UINT = WM_USER + 10;
1886 pub const PBS_SMOOTHREVERSE: DWORD = 0x10;
1887 pub const PBM_GETSTEP: UINT = WM_USER + 13;
1888 pub const PBM_GETBKCOLOR: UINT = WM_USER + 14;
1889 pub const PBM_GETBARCOLOR: UINT = WM_USER + 15;
1890 pub const PBM_SETSTATE: UINT = WM_USER + 16;
1891 pub const PBM_GETSTATE: UINT = WM_USER + 17;
1892 pub const PBST_NORMAL: c_int = 0x0001;
1893 pub const PBST_ERROR: c_int = 0x0002;
1894 pub const PBST_PAUSED: c_int = 0x0003;
1895 pub const HOTKEYF_SHIFT: BYTE = 0x01;
1896 pub const HOTKEYF_CONTROL: BYTE = 0x02;
1897 pub const HOTKEYF_ALT: BYTE = 0x04;
1898 pub const HOTKEYF_EXT: BYTE = 0x08;
1899 pub const HKCOMB_NONE: WPARAM = 0x0001;
1900 pub const HKCOMB_S: WPARAM = 0x0002;
1901 pub const HKCOMB_C: WPARAM = 0x0004;
1902 pub const HKCOMB_A: WPARAM = 0x0008;
1903 pub const HKCOMB_SC: WPARAM = 0x0010;
1904 pub const HKCOMB_SA: WPARAM = 0x0020;
1905 pub const HKCOMB_CA: WPARAM = 0x0040;
1906 pub const HKCOMB_SCA: WPARAM = 0x0080;
1907 pub const HKM_SETHOTKEY: UINT = WM_USER + 1;
1908 pub const HKM_GETHOTKEY: UINT = WM_USER + 2;
1909 pub const HKM_SETRULES: UINT = WM_USER + 3;
1910 pub const HOTKEY_CLASS: &'static str = "msctls_hotkey32";
1911 pub const CCS_TOP: DWORD = 0x00000001;
1912 pub const CCS_NOMOVEY: DWORD = 0x00000002;
1913 pub const CCS_BOTTOM: DWORD = 0x00000003;
1914 pub const CCS_NORESIZE: DWORD = 0x00000004;
1915 pub const CCS_NOPARENTALIGN: DWORD = 0x00000008;
1916 pub const CCS_ADJUSTABLE: DWORD = 0x00000020;
1917 pub const CCS_NODIVIDER: DWORD = 0x00000040;
1918 pub const CCS_VERT: DWORD = 0x00000080;
1919 pub const CCS_LEFT: DWORD = CCS_VERT | CCS_TOP;
1920 pub const CCS_RIGHT: DWORD = CCS_VERT | CCS_BOTTOM;
1921 pub const CCS_NOMOVEX: DWORD = CCS_VERT | CCS_NOMOVEY;
1922 pub const INVALID_LINK_INDEX: c_int = -1;
1923 pub const MAX_LINKID_TEXT: usize = 48;
1924 pub const L_MAX_URL_LENGTH: usize = 2048 + 32 + 4;
1925 pub const WC_LINK: &'static str = "SysLink";
1926 pub const LWS_TRANSPARENT: DWORD = 0x0001;
1927 pub const LWS_IGNORERETURN: DWORD = 0x0002;
1928 pub const LWS_NOPREFIX: DWORD = 0x0004;
1929 pub const LWS_USEVISUALSTYLE: DWORD = 0x0008;
1930 pub const LWS_USECUSTOMTEXT: DWORD = 0x0010;
1931 pub const LWS_RIGHT: DWORD = 0x0020;
1932 pub const LIF_ITEMINDEX: UINT = 0x00000001;
1933 pub const LIF_STATE: UINT = 0x00000002;
1934 pub const LIF_ITEMID: UINT = 0x00000004;
1935 pub const LIF_URL: UINT = 0x00000008;
1936 pub const LIS_FOCUSED: UINT = 0x00000001;
1937 pub const LIS_ENABLED: UINT = 0x00000002;
1938 pub const LIS_VISITED: UINT = 0x00000004;
1939 pub const LIS_HOTTRACK: UINT = 0x00000008;
1940 pub const LIS_DEFAULTCOLORS: UINT = 0x00000010;
1941 STRUCT!{struct LITEM {
1942     mask: UINT,
1943     iLink: c_int,
1944     state: UINT,
1945     stateMask: UINT,
1946     szID: [WCHAR; MAX_LINKID_TEXT],
1947     szUrl: [WCHAR; L_MAX_URL_LENGTH],
1948 }}
1949 pub type PLITEM = *mut LITEM;
1950 STRUCT!{struct LHITTESTINFO {
1951     pt: POINT,
1952     item: LITEM,
1953 }}
1954 pub type PLHITTESTINFO = *mut LHITTESTINFO;
1955 STRUCT!{struct NMLINK {
1956     hdr: NMHDR,
1957     item: LITEM,
1958 }}
1959 pub type PNMLINK = *mut NMLINK;
1960 pub const LM_HITTEST: UINT = WM_USER + 0x300;
1961 pub const LM_GETIDEALHEIGHT: UINT = WM_USER + 0x301;
1962 pub const LM_SETITEM: UINT = WM_USER + 0x302;
1963 pub const LM_GETITEM: UINT = WM_USER + 0x303;
1964 pub const LM_GETIDEALSIZE: UINT = LM_GETIDEALHEIGHT;
1965 pub const WC_LISTVIEW: &'static str = "SysListView32";
1966 pub const LVS_ICON: DWORD = 0x0000;
1967 pub const LVS_REPORT: DWORD = 0x0001;
1968 pub const LVS_SMALLICON: DWORD = 0x0002;
1969 pub const LVS_LIST: DWORD = 0x0003;
1970 pub const LVS_TYPEMASK: DWORD = 0x0003;
1971 pub const LVS_SINGLESEL: DWORD = 0x0004;
1972 pub const LVS_SHOWSELALWAYS: DWORD = 0x0008;
1973 pub const LVS_SORTASCENDING: DWORD = 0x0010;
1974 pub const LVS_SORTDESCENDING: DWORD = 0x0020;
1975 pub const LVS_SHAREIMAGELISTS: DWORD = 0x0040;
1976 pub const LVS_NOLABELWRAP: DWORD = 0x0080;
1977 pub const LVS_AUTOARRANGE: DWORD = 0x0100;
1978 pub const LVS_EDITLABELS: DWORD = 0x0200;
1979 pub const LVS_OWNERDATA: DWORD = 0x1000;
1980 pub const LVS_NOSCROLL: DWORD = 0x2000;
1981 pub const LVS_TYPESTYLEMASK: DWORD = 0xfc00;
1982 pub const LVS_ALIGNTOP: DWORD = 0x0000;
1983 pub const LVS_ALIGNLEFT: DWORD = 0x0800;
1984 pub const LVS_ALIGNMASK: DWORD = 0x0c00;
1985 pub const LVS_OWNERDRAWFIXED: DWORD = 0x0400;
1986 pub const LVS_NOCOLUMNHEADER: DWORD = 0x4000;
1987 pub const LVS_NOSORTHEADER: DWORD = 0x8000;
1988 pub const LVM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
1989 pub const LVM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
1990 pub const LVM_GETBKCOLOR: UINT = LVM_FIRST + 0;
1991 pub const LVM_SETBKCOLOR: UINT = LVM_FIRST + 1;
1992 pub const LVM_GETIMAGELIST: UINT = LVM_FIRST + 2;
1993 pub const LVSIL_NORMAL: c_int = 0;
1994 pub const LVSIL_SMALL: c_int = 1;
1995 pub const LVSIL_STATE: c_int = 2;
1996 pub const LVSIL_GROUPHEADER: c_int = 3;
1997 pub const LVM_SETIMAGELIST: UINT = LVM_FIRST + 3;
1998 pub const LVM_GETITEMCOUNT: UINT = LVM_FIRST + 4;
1999 pub const LVIF_TEXT: UINT = 0x00000001;
2000 pub const LVIF_IMAGE: UINT = 0x00000002;
2001 pub const LVIF_PARAM: UINT = 0x00000004;
2002 pub const LVIF_STATE: UINT = 0x00000008;
2003 pub const LVIF_INDENT: UINT = 0x00000010;
2004 pub const LVIF_NORECOMPUTE: UINT = 0x00000800;
2005 pub const LVIF_GROUPID: UINT = 0x00000100;
2006 pub const LVIF_COLUMNS: UINT = 0x00000200;
2007 pub const LVIF_COLFMT: UINT = 0x00010000;
2008 pub const LVIS_FOCUSED: UINT = 0x0001;
2009 pub const LVIS_SELECTED: UINT = 0x0002;
2010 pub const LVIS_CUT: UINT = 0x0004;
2011 pub const LVIS_DROPHILITED: UINT = 0x0008;
2012 pub const LVIS_GLOW: UINT = 0x0010;
2013 pub const LVIS_ACTIVATING: UINT = 0x0020;
2014 pub const LVIS_OVERLAYMASK: UINT = 0x0F00;
2015 pub const LVIS_STATEIMAGEMASK: UINT = 0xF000;
2016 #[inline]
INDEXTOSTATEIMAGEMASK(i: UINT) -> UINT2017 pub fn INDEXTOSTATEIMAGEMASK(i: UINT) -> UINT {
2018     i << 12
2019 }
2020 pub const I_INDENTCALLBACK: c_int = -1;
2021 pub type LV_ITEMA = LVITEMA;
2022 pub type LV_ITEMW = LVITEMW;
2023 pub const I_GROUPIDCALLBACK: c_int = -1;
2024 pub const I_GROUPIDNONE: c_int = -2;
2025 STRUCT!{struct LVITEMA {
2026     mask: UINT,
2027     iItem: c_int,
2028     iSubItem: c_int,
2029     state: UINT,
2030     stateMask: UINT,
2031     pszText: LPSTR,
2032     cchTextMax: c_int,
2033     iImage: c_int,
2034     lParam: LPARAM,
2035     iIndent: c_int,
2036     iGroupId: c_int,
2037     cColumns: UINT,
2038     puColumns: PUINT,
2039     piColFmt: *mut c_int,
2040     iGroup: c_int,
2041 }}
2042 pub type LPLVITEMA = *mut LVITEMA;
2043 STRUCT!{struct LVITEMW {
2044     mask: UINT,
2045     iItem: c_int,
2046     iSubItem: c_int,
2047     state: UINT,
2048     stateMask: UINT,
2049     pszText: LPWSTR,
2050     cchTextMax: c_int,
2051     iImage: c_int,
2052     lParam: LPARAM,
2053     iIndent: c_int,
2054     iGroupId: c_int,
2055     cColumns: UINT,
2056     puColumns: PUINT,
2057     piColFmt: *mut c_int,
2058     iGroup: c_int,
2059 }}
2060 pub type LPLVITEMW = *mut LVITEMW;
2061 pub const LPSTR_TEXTCALLBACKW: LPWSTR = -1isize as LPWSTR;
2062 pub const LPSTR_TEXTCALLBACKA: LPSTR = -1isize as LPSTR;
2063 pub const I_IMAGECALLBACK: c_int = -1;
2064 pub const I_IMAGENONE: c_int = -2;
2065 pub const I_COLUMNSCALLBACK: UINT = -1i32 as u32;
2066 pub const LVM_GETITEMA: UINT = LVM_FIRST + 5;
2067 pub const LVM_GETITEMW: UINT = LVM_FIRST + 75;
2068 pub const LVM_SETITEMA: UINT = LVM_FIRST + 6;
2069 pub const LVM_SETITEMW: UINT = LVM_FIRST + 76;
2070 pub const LVM_INSERTITEMA: UINT = LVM_FIRST + 7;
2071 pub const LVM_INSERTITEMW: UINT = LVM_FIRST + 77;
2072 pub const LVM_DELETEITEM: UINT = LVM_FIRST + 8;
2073 pub const LVM_DELETEALLITEMS: UINT = LVM_FIRST + 9;
2074 pub const LVM_GETCALLBACKMASK: UINT = LVM_FIRST + 10;
2075 pub const LVM_SETCALLBACKMASK: UINT = LVM_FIRST + 11;
2076 pub const LVNI_ALL: LPARAM = 0x0000;
2077 pub const LVNI_FOCUSED: LPARAM = 0x0001;
2078 pub const LVNI_SELECTED: LPARAM = 0x0002;
2079 pub const LVNI_CUT: LPARAM = 0x0004;
2080 pub const LVNI_DROPHILITED: LPARAM = 0x0008;
2081 pub const LVNI_STATEMASK: LPARAM = LVNI_FOCUSED | LVNI_SELECTED | LVNI_CUT | LVNI_DROPHILITED;
2082 pub const LVNI_VISIBLEORDER: LPARAM = 0x0010;
2083 pub const LVNI_PREVIOUS: LPARAM = 0x0020;
2084 pub const LVNI_VISIBLEONLY: LPARAM = 0x0040;
2085 pub const LVNI_SAMEGROUPONLY: LPARAM = 0x0080;
2086 pub const LVNI_ABOVE: LPARAM = 0x0100;
2087 pub const LVNI_BELOW: LPARAM = 0x0200;
2088 pub const LVNI_TOLEFT: LPARAM = 0x0400;
2089 pub const LVNI_TORIGHT: LPARAM = 0x0800;
2090 pub const LVNI_DIRECTIONMASK: LPARAM = LVNI_ABOVE | LVNI_BELOW | LVNI_TOLEFT | LVNI_TORIGHT;
2091 pub const LVM_GETNEXTITEM: UINT = LVM_FIRST + 12;
2092 pub const LVFI_PARAM: UINT = 0x0001;
2093 pub const LVFI_STRING: UINT = 0x0002;
2094 pub const LVFI_SUBSTRING: UINT = 0x0004;
2095 pub const LVFI_PARTIAL: UINT = 0x0008;
2096 pub const LVFI_WRAP: UINT = 0x0020;
2097 pub const LVFI_NEARESTXY: UINT = 0x0040;
2098 pub type LV_FINDINFOA = LVFINDINFOA;
2099 pub type LV_FINDINFOW = LVFINDINFOW;
2100 STRUCT!{struct LVFINDINFOA {
2101     flags: UINT,
2102     psz: LPCSTR,
2103     lParam: LPARAM,
2104     pt: POINT,
2105     vkDirection: UINT,
2106 }}
2107 pub type LPFINDINFOA = *mut LVFINDINFOA;
2108 STRUCT!{struct LVFINDINFOW {
2109     flags: UINT,
2110     psz: LPCWSTR,
2111     lParam: LPARAM,
2112     pt: POINT,
2113     vkDirection: UINT,
2114 }}
2115 pub type LPFINDINFOW = *mut LVFINDINFOW;
2116 pub const LVM_FINDITEMA: UINT = LVM_FIRST + 13;
2117 pub const LVM_FINDITEMW: UINT = LVM_FIRST + 83;
2118 pub const LVIR_BOUNDS: c_int = 0;
2119 pub const LVIR_ICON: c_int = 1;
2120 pub const LVIR_LABEL: c_int = 2;
2121 pub const LVIR_SELECTBOUNDS: c_int = 3;
2122 pub const LVM_GETITEMRECT: UINT = LVM_FIRST + 14;
2123 pub const LVM_SETITEMPOSITION: UINT = LVM_FIRST + 15;
2124 pub const LVM_GETITEMPOSITION: UINT = LVM_FIRST + 16;
2125 pub const LVM_GETSTRINGWIDTHA: UINT = LVM_FIRST + 17;
2126 pub const LVM_GETSTRINGWIDTHW: UINT = LVM_FIRST + 87;
2127 pub const LVHT_NOWHERE: UINT = 0x00000001;
2128 pub const LVHT_ONITEMICON: UINT = 0x00000002;
2129 pub const LVHT_ONITEMLABEL: UINT = 0x00000004;
2130 pub const LVHT_ONITEMSTATEICON: UINT = 0x00000008;
2131 pub const LVHT_ONITEM: UINT = LVHT_ONITEMICON | LVHT_ONITEMLABEL | LVHT_ONITEMSTATEICON;
2132 pub const LVHT_ABOVE: UINT = 0x00000008;
2133 pub const LVHT_BELOW: UINT = 0x00000010;
2134 pub const LVHT_TORIGHT: UINT = 0x00000020;
2135 pub const LVHT_TOLEFT: UINT = 0x00000040;
2136 pub const LVHT_EX_GROUP_HEADER: UINT = 0x10000000;
2137 pub const LVHT_EX_GROUP_FOOTER: UINT = 0x20000000;
2138 pub const LVHT_EX_GROUP_COLLAPSE: UINT = 0x40000000;
2139 pub const LVHT_EX_GROUP_BACKGROUND: UINT = 0x80000000;
2140 pub const LVHT_EX_GROUP_STATEICON: UINT = 0x01000000;
2141 pub const LVHT_EX_GROUP_SUBSETLINK: UINT = 0x02000000;
2142 pub const LVHT_EX_GROUP: UINT = LVHT_EX_GROUP_BACKGROUND | LVHT_EX_GROUP_COLLAPSE
2143     | LVHT_EX_GROUP_FOOTER | LVHT_EX_GROUP_HEADER | LVHT_EX_GROUP_STATEICON
2144     | LVHT_EX_GROUP_SUBSETLINK;
2145 pub const LVHT_EX_ONCONTENTS: UINT = 0x04000000;
2146 pub const LVHT_EX_FOOTER: UINT = 0x08000000;
2147 pub type LV_HITTESTINFO = LVHITTESTINFO;
2148 STRUCT!{struct LVHITTESTINFO {
2149     pt: POINT,
2150     flags: UINT,
2151     iItem: c_int,
2152     iSubItem: c_int,
2153     iGroup: c_int,
2154 }}
2155 pub type LPLVHITTESTINFO = *mut LVHITTESTINFO;
2156 pub const LVM_HITTEST: UINT = LVM_FIRST + 18;
2157 pub const LVM_ENSUREVISIBLE: UINT = LVM_FIRST + 19;
2158 pub const LVM_SCROLL: UINT = LVM_FIRST + 20;
2159 pub const LVM_REDRAWITEMS: UINT = LVM_FIRST + 21;
2160 pub const LVA_DEFAULT: WPARAM = 0x0000;
2161 pub const LVA_ALIGNLEFT: WPARAM = 0x0001;
2162 pub const LVA_ALIGNTOP: WPARAM = 0x0002;
2163 pub const LVA_SNAPTOGRID: WPARAM = 0x0005;
2164 pub const LVM_ARRANGE: UINT = LVM_FIRST + 22;
2165 pub const LVM_EDITLABELA: UINT = LVM_FIRST + 23;
2166 pub const LVM_EDITLABELW: UINT = LVM_FIRST + 118;
2167 pub const LVM_GETEDITCONTROL: UINT = LVM_FIRST + 24;
2168 pub type LV_COLUMNA = LVCOLUMNA;
2169 pub type LV_COLUMNW = LVCOLUMNW;
2170 STRUCT!{struct LVCOLUMNA {
2171     mask: UINT,
2172     fmt: c_int,
2173     cx: c_int,
2174     pszText: LPSTR,
2175     cchTextMax: c_int,
2176     iSubItem: c_int,
2177     iImage: c_int,
2178     iOrder: c_int,
2179     cxMin: c_int,
2180     cxDefault: c_int,
2181     cxIdeal: c_int,
2182 }}
2183 pub type LPLVCOLUMNA = *mut LVCOLUMNA;
2184 STRUCT!{struct LVCOLUMNW {
2185     mask: UINT,
2186     fmt: c_int,
2187     cx: c_int,
2188     pszText: LPWSTR,
2189     cchTextMax: c_int,
2190     iSubItem: c_int,
2191     iImage: c_int,
2192     iOrder: c_int,
2193     cxMin: c_int,
2194     cxDefault: c_int,
2195     cxIdeal: c_int,
2196 }}
2197 pub type LPLVCOLUMNW = *mut LVCOLUMNW;
2198 pub const LVCF_FMT: UINT = 0x0001;
2199 pub const LVCF_WIDTH: UINT = 0x0002;
2200 pub const LVCF_TEXT: UINT = 0x0004;
2201 pub const LVCF_SUBITEM: UINT = 0x0008;
2202 pub const LVCF_IMAGE: UINT = 0x0010;
2203 pub const LVCF_ORDER: UINT = 0x0020;
2204 pub const LVCF_MINWIDTH: UINT = 0x0040;
2205 pub const LVCF_DEFAULTWIDTH: UINT = 0x0080;
2206 pub const LVCF_IDEALWIDTH: UINT = 0x0100;
2207 pub const LVCFMT_LEFT: c_int = 0x0000;
2208 pub const LVCFMT_RIGHT: c_int = 0x0001;
2209 pub const LVCFMT_CENTER: c_int = 0x0002;
2210 pub const LVCFMT_JUSTIFYMASK: c_int = 0x0003;
2211 pub const LVCFMT_IMAGE: c_int = 0x0800;
2212 pub const LVCFMT_BITMAP_ON_RIGHT: c_int = 0x1000;
2213 pub const LVCFMT_COL_HAS_IMAGES: c_int = 0x8000;
2214 pub const LVCFMT_FIXED_WIDTH: c_int = 0x00100;
2215 pub const LVCFMT_NO_DPI_SCALE: c_int = 0x40000;
2216 pub const LVCFMT_FIXED_RATIO: c_int = 0x80000;
2217 pub const LVCFMT_LINE_BREAK: c_int = 0x100000;
2218 pub const LVCFMT_FILL: c_int = 0x200000;
2219 pub const LVCFMT_WRAP: c_int = 0x400000;
2220 pub const LVCFMT_NO_TITLE: c_int = 0x800000;
2221 pub const LVCFMT_TILE_PLACEMENTMASK: c_int = LVCFMT_LINE_BREAK | LVCFMT_FILL;
2222 pub const LVCFMT_SPLITBUTTON: c_int = 0x1000000;
2223 pub const LVM_GETCOLUMNA: UINT = LVM_FIRST + 25;
2224 pub const LVM_GETCOLUMNW: UINT = LVM_FIRST + 95;
2225 pub const LVM_SETCOLUMNA: UINT = LVM_FIRST + 26;
2226 pub const LVM_SETCOLUMNW: UINT = LVM_FIRST + 96;
2227 pub const LVM_INSERTCOLUMNA: UINT = LVM_FIRST + 27;
2228 pub const LVM_INSERTCOLUMNW: UINT = LVM_FIRST + 97;
2229 pub const LVM_DELETECOLUMN: UINT = LVM_FIRST + 28;
2230 pub const LVM_GETCOLUMNWIDTH: UINT = LVM_FIRST + 29;
2231 pub const LVSCW_AUTOSIZE: c_int = -1;
2232 pub const LVSCW_AUTOSIZE_USEHEADER: c_int = -2;
2233 pub const LVM_SETCOLUMNWIDTH: UINT = LVM_FIRST + 30;
2234 pub const LVM_GETHEADER: UINT = LVM_FIRST + 31;
2235 pub const LVM_CREATEDRAGIMAGE: UINT = LVM_FIRST + 33;
2236 pub const LVM_GETVIEWRECT: UINT = LVM_FIRST + 34;
2237 pub const LVM_GETTEXTCOLOR: UINT = LVM_FIRST + 35;
2238 pub const LVM_SETTEXTCOLOR: UINT = LVM_FIRST + 36;
2239 pub const LVM_GETTEXTBKCOLOR: UINT = LVM_FIRST + 37;
2240 pub const LVM_SETTEXTBKCOLOR: UINT = LVM_FIRST + 38;
2241 pub const LVM_GETTOPINDEX: UINT = LVM_FIRST + 39;
2242 pub const LVM_GETCOUNTPERPAGE: UINT = LVM_FIRST + 40;
2243 pub const LVM_GETORIGIN: UINT = LVM_FIRST + 41;
2244 pub const LVM_UPDATE: UINT = LVM_FIRST + 42;
2245 pub const LVM_SETITEMSTATE: UINT = LVM_FIRST + 43;
2246 pub const LVM_GETITEMSTATE: UINT = LVM_FIRST + 44;
2247 pub const LVM_GETITEMTEXTA: UINT = LVM_FIRST + 45;
2248 pub const LVM_GETITEMTEXTW: UINT = LVM_FIRST + 115;
2249 pub const LVM_SETITEMTEXTA: UINT = LVM_FIRST + 46;
2250 pub const LVM_SETITEMTEXTW: UINT = LVM_FIRST + 116;
2251 pub const LVSICF_NOINVALIDATEALL: LPARAM = 0x00000001;
2252 pub const LVSICF_NOSCROLL: LPARAM = 0x00000002;
2253 pub const LVM_SETITEMCOUNT: UINT = LVM_FIRST + 47;
2254 FN!{stdcall PFNLVCOMPARE(
2255     LPARAM,
2256     LPARAM,
2257     LPARAM,
2258 ) -> c_int}
2259 pub const LVM_SORTITEMS: UINT = LVM_FIRST + 48;
2260 pub const LVM_SETITEMPOSITION32: UINT = LVM_FIRST + 49;
2261 pub const LVM_GETSELECTEDCOUNT: UINT = LVM_FIRST + 50;
2262 pub const LVM_GETITEMSPACING: UINT = LVM_FIRST + 51;
2263 pub const LVM_GETISEARCHSTRINGA: UINT = LVM_FIRST + 52;
2264 pub const LVM_GETISEARCHSTRINGW: UINT = LVM_FIRST + 117;
2265 pub const LVM_SETICONSPACING: UINT = LVM_FIRST + 53;
2266 pub const LVM_SETEXTENDEDLISTVIEWSTYLE: UINT = LVM_FIRST + 54;
2267 pub const LVM_GETEXTENDEDLISTVIEWSTYLE: UINT = LVM_FIRST + 55;
2268 pub const LVS_EX_GRIDLINES: DWORD = 0x00000001;
2269 pub const LVS_EX_SUBITEMIMAGES: DWORD = 0x00000002;
2270 pub const LVS_EX_CHECKBOXES: DWORD = 0x00000004;
2271 pub const LVS_EX_TRACKSELECT: DWORD = 0x00000008;
2272 pub const LVS_EX_HEADERDRAGDROP: DWORD = 0x00000010;
2273 pub const LVS_EX_FULLROWSELECT: DWORD = 0x00000020;
2274 pub const LVS_EX_ONECLICKACTIVATE: DWORD = 0x00000040;
2275 pub const LVS_EX_TWOCLICKACTIVATE: DWORD = 0x00000080;
2276 pub const LVS_EX_FLATSB: DWORD = 0x00000100;
2277 pub const LVS_EX_REGIONAL: DWORD = 0x00000200;
2278 pub const LVS_EX_INFOTIP: DWORD = 0x00000400;
2279 pub const LVS_EX_UNDERLINEHOT: DWORD = 0x00000800;
2280 pub const LVS_EX_UNDERLINECOLD: DWORD = 0x00001000;
2281 pub const LVS_EX_MULTIWORKAREAS: DWORD = 0x00002000;
2282 pub const LVS_EX_LABELTIP: DWORD = 0x00004000;
2283 pub const LVS_EX_BORDERSELECT: DWORD = 0x00008000;
2284 pub const LVS_EX_DOUBLEBUFFER: DWORD = 0x00010000;
2285 pub const LVS_EX_HIDELABELS: DWORD = 0x00020000;
2286 pub const LVS_EX_SINGLEROW: DWORD = 0x00040000;
2287 pub const LVS_EX_SNAPTOGRID: DWORD = 0x00080000;
2288 pub const LVS_EX_SIMPLESELECT: DWORD = 0x00100000;
2289 pub const LVS_EX_JUSTIFYCOLUMNS: DWORD = 0x00200000;
2290 pub const LVS_EX_TRANSPARENTBKGND: DWORD = 0x00400000;
2291 pub const LVS_EX_TRANSPARENTSHADOWTEXT: DWORD = 0x00800000;
2292 pub const LVS_EX_AUTOAUTOARRANGE: DWORD = 0x01000000;
2293 pub const LVS_EX_HEADERINALLVIEWS: DWORD = 0x02000000;
2294 pub const LVS_EX_AUTOCHECKSELECT: DWORD = 0x08000000;
2295 pub const LVS_EX_AUTOSIZECOLUMNS: DWORD = 0x10000000;
2296 pub const LVS_EX_COLUMNSNAPPOINTS: DWORD = 0x40000000;
2297 pub const LVS_EX_COLUMNOVERFLOW: DWORD = 0x80000000;
2298 pub const LVM_GETSUBITEMRECT: UINT = LVM_FIRST + 56;
2299 pub const LVM_SUBITEMHITTEST: UINT = LVM_FIRST + 57;
2300 pub const LVM_SETCOLUMNORDERARRAY: UINT = LVM_FIRST + 58;
2301 pub const LVM_GETCOLUMNORDERARRAY: UINT = LVM_FIRST + 59;
2302 pub const LVM_SETHOTITEM: UINT = LVM_FIRST + 60;
2303 pub const LVM_GETHOTITEM: UINT = LVM_FIRST + 61;
2304 pub const LVM_SETHOTCURSOR: UINT = LVM_FIRST + 62;
2305 pub const LVM_GETHOTCURSOR: UINT = LVM_FIRST + 63;
2306 pub const LVM_APPROXIMATEVIEWRECT: UINT = LVM_FIRST + 64;
2307 pub const LV_MAX_WORKAREAS: WPARAM = 16;
2308 pub const LVM_SETWORKAREAS: UINT = LVM_FIRST + 65;
2309 pub const LVM_GETWORKAREAS: UINT = LVM_FIRST + 70;
2310 pub const LVM_GETNUMBEROFWORKAREAS: UINT = LVM_FIRST + 73;
2311 pub const LVM_GETSELECTIONMARK: UINT = LVM_FIRST + 66;
2312 pub const LVM_SETSELECTIONMARK: UINT = LVM_FIRST + 67;
2313 pub const LVM_SETHOVERTIME: UINT = LVM_FIRST + 71;
2314 pub const LVM_GETHOVERTIME: UINT = LVM_FIRST + 72;
2315 pub const LVM_SETTOOLTIPS: UINT = LVM_FIRST + 74;
2316 pub const LVM_GETTOOLTIPS: UINT = LVM_FIRST + 78;
2317 pub const LVM_SORTITEMSEX: UINT = LVM_FIRST + 81;
2318 STRUCT!{struct LVBKIMAGEA {
2319     ulFlags: ULONG,
2320     hbm: HBITMAP,
2321     pszImage: LPSTR,
2322     cchImageMax: UINT,
2323     xOffsetPercent: c_int,
2324     yOffsetPercent: c_int,
2325 }}
2326 pub type LPLVBKIMAGEA = *mut LVBKIMAGEA;
2327 STRUCT!{struct LVBKIMAGEW {
2328     ulFlags: ULONG,
2329     hbm: HBITMAP,
2330     pszImage: LPWSTR,
2331     cchImageMax: UINT,
2332     xOffsetPercent: c_int,
2333     yOffsetPercent: c_int,
2334 }}
2335 pub type LPLVBKIMAGEW = *mut LVBKIMAGEW;
2336 pub const LVBKIF_SOURCE_NONE: ULONG = 0x00000000;
2337 pub const LVBKIF_SOURCE_HBITMAP: ULONG = 0x00000001;
2338 pub const LVBKIF_SOURCE_URL: ULONG = 0x00000002;
2339 pub const LVBKIF_SOURCE_MASK: ULONG = 0x00000003;
2340 pub const LVBKIF_STYLE_NORMAL: ULONG = 0x00000000;
2341 pub const LVBKIF_STYLE_TILE: ULONG = 0x00000010;
2342 pub const LVBKIF_STYLE_MASK: ULONG = 0x00000010;
2343 pub const LVBKIF_FLAG_TILEOFFSET: ULONG = 0x00000100;
2344 pub const LVBKIF_TYPE_WATERMARK: ULONG = 0x10000000;
2345 pub const LVBKIF_FLAG_ALPHABLEND: ULONG = 0x20000000;
2346 pub const LVM_SETBKIMAGEA: UINT = LVM_FIRST + 68;
2347 pub const LVM_SETBKIMAGEW: UINT = LVM_FIRST + 138;
2348 pub const LVM_GETBKIMAGEA: UINT = LVM_FIRST + 69;
2349 pub const LVM_GETBKIMAGEW: UINT = LVM_FIRST + 139;
2350 pub const LVM_SETSELECTEDCOLUMN: UINT = LVM_FIRST + 140;
2351 pub const LV_VIEW_ICON: DWORD = 0x0000;
2352 pub const LV_VIEW_DETAILS: DWORD = 0x0001;
2353 pub const LV_VIEW_SMALLICON: DWORD = 0x0002;
2354 pub const LV_VIEW_LIST: DWORD = 0x0003;
2355 pub const LV_VIEW_TILE: DWORD = 0x0004;
2356 pub const LV_VIEW_MAX: DWORD = 0x0004;
2357 pub const LVM_SETVIEW: UINT = LVM_FIRST + 142;
2358 pub const LVM_GETVIEW: UINT = LVM_FIRST + 143;
2359 pub const LVGF_NONE: UINT = 0x00000000;
2360 pub const LVGF_HEADER: UINT = 0x00000001;
2361 pub const LVGF_FOOTER: UINT = 0x00000002;
2362 pub const LVGF_STATE: UINT = 0x00000004;
2363 pub const LVGF_ALIGN: UINT = 0x00000008;
2364 pub const LVGF_GROUPID: UINT = 0x00000010;
2365 pub const LVGF_SUBTITLE: UINT = 0x00000100;
2366 pub const LVGF_TASK: UINT = 0x00000200;
2367 pub const LVGF_DESCRIPTIONTOP: UINT = 0x00000400;
2368 pub const LVGF_DESCRIPTIONBOTTOM: UINT = 0x00000800;
2369 pub const LVGF_TITLEIMAGE: UINT = 0x00001000;
2370 pub const LVGF_EXTENDEDIMAGE: UINT = 0x00002000;
2371 pub const LVGF_ITEMS: UINT = 0x00004000;
2372 pub const LVGF_SUBSET: UINT = 0x00008000;
2373 pub const LVGF_SUBSETITEMS: UINT = 0x00010000;
2374 pub const LVGS_NORMAL: UINT = 0x00000000;
2375 pub const LVGS_COLLAPSED: UINT = 0x00000001;
2376 pub const LVGS_HIDDEN: UINT = 0x00000002;
2377 pub const LVGS_NOHEADER: UINT = 0x00000004;
2378 pub const LVGS_COLLAPSIBLE: UINT = 0x00000008;
2379 pub const LVGS_FOCUSED: UINT = 0x00000010;
2380 pub const LVGS_SELECTED: UINT = 0x00000020;
2381 pub const LVGS_SUBSETED: UINT = 0x00000040;
2382 pub const LVGS_SUBSETLINKFOCUSED: UINT = 0x00000080;
2383 pub const LVGA_HEADER_LEFT: UINT = 0x00000001;
2384 pub const LVGA_HEADER_CENTER: UINT = 0x00000002;
2385 pub const LVGA_HEADER_RIGHT: UINT = 0x00000004;
2386 pub const LVGA_FOOTER_LEFT: UINT = 0x00000008;
2387 pub const LVGA_FOOTER_CENTER: UINT = 0x00000010;
2388 pub const LVGA_FOOTER_RIGHT: UINT = 0x00000020;
2389 STRUCT!{struct LVGROUP {
2390     cbSize: UINT,
2391     mask: UINT,
2392     pszHeader: LPWSTR,
2393     cchHeader: c_int,
2394     pszFooter: LPWSTR,
2395     cchFooter: c_int,
2396     iGroupId: c_int,
2397     stateMask: UINT,
2398     state: UINT,
2399     uAlign: UINT,
2400     pszSubtitle: LPWSTR,
2401     cchSubtitle: UINT,
2402     pszTask: LPWSTR,
2403     cchTask: UINT,
2404     pszDescriptionTop: LPWSTR,
2405     cchDescriptionTop: UINT,
2406     pszDescriptionBottom: LPWSTR,
2407     cchDescriptionBottom: UINT,
2408     iTitleImage: c_int,
2409     iExtendedImage: c_int,
2410     iFirstItem: c_int,
2411     cItems: UINT,
2412     pszSubsetTitle: LPWSTR,
2413     cchSubsetTitle: UINT,
2414 }}
2415 pub type PLVGROUP = *mut LVGROUP;
2416 pub const LVM_INSERTGROUP: UINT = LVM_FIRST + 145;
2417 pub const LVM_SETGROUPINFO: UINT = LVM_FIRST + 147;
2418 pub const LVM_GETGROUPINFO: UINT = LVM_FIRST + 149;
2419 pub const LVM_REMOVEGROUP: UINT = LVM_FIRST + 150;
2420 pub const LVM_MOVEGROUP: UINT = LVM_FIRST + 151;
2421 pub const LVM_GETGROUPCOUNT: UINT = LVM_FIRST + 152;
2422 pub const LVM_GETGROUPINFOBYINDEX: UINT = LVM_FIRST + 153;
2423 pub const LVM_MOVEITEMTOGROUP: UINT = LVM_FIRST + 154;
2424 pub const LVGGR_GROUP: LPARAM = 0;
2425 pub const LVGGR_HEADER: LPARAM = 1;
2426 pub const LVGGR_LABEL: LPARAM = 2;
2427 pub const LVGGR_SUBSETLINK: LPARAM = 3;
2428 pub const LVM_GETGROUPRECT: UINT = LVM_FIRST + 98;
2429 pub const LVGMF_NONE: UINT = 0x00000000;
2430 pub const LVGMF_BORDERSIZE: UINT = 0x00000001;
2431 pub const LVGMF_BORDERCOLOR: UINT = 0x00000002;
2432 pub const LVGMF_TEXTCOLOR: UINT = 0x00000004;
2433 STRUCT!{struct LVGROUPMETRICS {
2434     cbSize: UINT,
2435     mask: UINT,
2436     Left: UINT,
2437     Top: UINT,
2438     Right: UINT,
2439     Bottom: UINT,
2440     crLeft: COLORREF,
2441     crTop: COLORREF,
2442     crRight: COLORREF,
2443     crBottom: COLORREF,
2444     crHeader: COLORREF,
2445     crFooter: COLORREF,
2446 }}
2447 pub type PLVGROUPMETRICS = *mut LVGROUPMETRICS;
2448 pub const LVM_SETGROUPMETRICS: UINT = LVM_FIRST + 155;
2449 pub const LVM_GETGROUPMETRICS: UINT = LVM_FIRST + 156;
2450 pub const LVM_ENABLEGROUPVIEW: UINT = LVM_FIRST + 157;
2451 FN!{stdcall PFNLVGROUPCOMPARE(
2452     c_int,
2453     c_int,
2454     *mut c_void,
2455 ) -> c_int}
2456 pub const LVM_SORTGROUPS: UINT = LVM_FIRST + 158;
2457 STRUCT!{struct LVINSERTGROUPSORTED {
2458     pfnGroupCompare: PFNLVGROUPCOMPARE,
2459     pvData: *mut c_void,
2460     lvGroup: LVGROUP,
2461 }}
2462 pub type PLVINSERTGROUPSORTED = *mut LVINSERTGROUPSORTED;
2463 pub const LVM_INSERTGROUPSORTED: UINT = LVM_FIRST + 159;
2464 pub const LVM_REMOVEALLGROUPS: UINT = LVM_FIRST + 160;
2465 pub const LVM_HASGROUP: UINT = LVM_FIRST + 161;
2466 pub const LVM_GETGROUPSTATE: UINT = LVM_FIRST + 92;
2467 pub const LVM_GETFOCUSEDGROUP: UINT = LVM_FIRST + 93;
2468 pub const LVTVIF_AUTOSIZE: DWORD = 0x00000000;
2469 pub const LVTVIF_FIXEDWIDTH: DWORD = 0x00000001;
2470 pub const LVTVIF_FIXEDHEIGHT: DWORD = 0x00000002;
2471 pub const LVTVIF_FIXEDSIZE: DWORD = 0x00000003;
2472 pub const LVTVIF_EXTENDED: DWORD = 0x00000004;
2473 pub const LVTVIM_TILESIZE: DWORD = 0x00000001;
2474 pub const LVTVIM_COLUMNS: DWORD = 0x00000002;
2475 pub const LVTVIM_LABELMARGIN: DWORD = 0x00000004;
2476 STRUCT!{struct LVTILEVIEWINFO {
2477     cbSize: UINT,
2478     dwMask: DWORD,
2479     dwFlags: DWORD,
2480     sizeTile: SIZE,
2481     cLines: c_int,
2482     rcLabelMargin: RECT,
2483 }}
2484 pub type PLVTILEVIEWINFO = *mut LVTILEVIEWINFO;
2485 STRUCT!{struct LVTILEINFO {
2486     cbSize: UINT,
2487     iItem: c_int,
2488     cColumns: UINT,
2489     puColumns: PUINT,
2490     piColFmt: *mut c_int,
2491 }}
2492 pub type PLVTILEINFO = *mut LVTILEINFO;
2493 pub const LVM_SETTILEVIEWINFO: UINT = LVM_FIRST + 162;
2494 pub const LVM_GETTILEVIEWINFO: UINT = LVM_FIRST + 163;
2495 pub const LVM_SETTILEINFO: UINT = LVM_FIRST + 164;
2496 pub const LVM_GETTILEINFO: UINT = LVM_FIRST + 165;
2497 STRUCT!{struct LVINSERTMARK {
2498     cbSize: UINT,
2499     dwFlags: DWORD,
2500     iItem: c_int,
2501     dwReserved: DWORD,
2502 }}
2503 pub type LPLVINSERTMARK = *mut LVINSERTMARK;
2504 pub const LVIM_AFTER: DWORD = 0x00000001;
2505 pub const LVM_SETINSERTMARK: UINT = LVM_FIRST + 166;
2506 pub const LVM_GETINSERTMARK: UINT = LVM_FIRST + 167;
2507 pub const LVM_INSERTMARKHITTEST: UINT = LVM_FIRST + 168;
2508 pub const LVM_GETINSERTMARKRECT: UINT = LVM_FIRST + 169;
2509 pub const LVM_SETINSERTMARKCOLOR: UINT = LVM_FIRST + 170;
2510 pub const LVM_GETINSERTMARKCOLOR: UINT = LVM_FIRST + 171;
2511 STRUCT!{struct LVSETINFOTIP {
2512     cbSize: UINT,
2513     dwFlags: DWORD,
2514     pszText: LPWSTR,
2515     iItem: c_int,
2516     iSubItem: c_int,
2517 }}
2518 pub type PLVSETINFOTIP = *mut LVSETINFOTIP;
2519 pub const LVM_SETINFOTIP: UINT = LVM_FIRST + 173;
2520 pub const LVM_GETSELECTEDCOLUMN: UINT = LVM_FIRST + 174;
2521 pub const LVM_ISGROUPVIEWENABLED: UINT = LVM_FIRST + 175;
2522 pub const LVM_GETOUTLINECOLOR: UINT = LVM_FIRST + 176;
2523 pub const LVM_SETOUTLINECOLOR: UINT = LVM_FIRST + 177;
2524 pub const LVM_CANCELEDITLABEL: UINT = LVM_FIRST + 179;
2525 pub const LVM_MAPINDEXTOID: UINT = LVM_FIRST + 180;
2526 pub const LVM_MAPIDTOINDEX: UINT = LVM_FIRST + 181;
2527 pub const LVM_ISITEMVISIBLE: UINT = LVM_FIRST + 182;
2528 pub const LVM_GETEMPTYTEXT: UINT = LVM_FIRST + 204;
2529 pub const LVM_GETFOOTERRECT: UINT = LVM_FIRST + 205;
2530 pub const LVFF_ITEMCOUNT: UINT = 0x00000001;
2531 STRUCT!{struct LVFOOTERINFO {
2532     mask: UINT,
2533     pszText: LPWSTR,
2534     cchTextMax: c_int,
2535     cItems: UINT,
2536 }}
2537 pub type LPLVFOOTERINFO = *mut LVFOOTERINFO;
2538 pub const LVM_GETFOOTERINFO: UINT = LVM_FIRST + 206;
2539 pub const LVM_GETFOOTERITEMRECT: UINT = LVM_FIRST + 207;
2540 pub const LVFIF_TEXT: UINT = 0x00000001;
2541 pub const LVFIF_STATE: UINT = 0x00000002;
2542 pub const LVFIS_FOCUSED: UINT = 0x0001;
2543 STRUCT!{struct LVFOOTERITEM {
2544     mask: UINT,
2545     iItem: c_int,
2546     pszText: LPWSTR,
2547     cchTextMax: c_int,
2548     state: UINT,
2549     stateMask: UINT,
2550 }}
2551 pub type LPLVFOOTERITEM = *mut LVFOOTERITEM;
2552 pub const LVM_GETFOOTERITEM: UINT = LVM_FIRST + 208;
2553 STRUCT!{struct LVITEMINDEX {
2554     iItem: c_int,
2555     iGroup: c_int,
2556 }}
2557 pub type PLVITEMINDEX = *mut LVITEMINDEX;
2558 pub const LVM_GETITEMINDEXRECT: UINT = LVM_FIRST + 209;
2559 pub const LVM_SETITEMINDEXSTATE: UINT = LVM_FIRST + 210;
2560 pub const LVM_GETNEXTITEMINDEX: UINT = LVM_FIRST + 211;
2561 pub type LPNM_LISTVIEW = LPNMLISTVIEW;
2562 pub type NM_LISTVIEW = NMLISTVIEW;
2563 STRUCT!{struct NMLISTVIEW {
2564     hdr: NMHDR,
2565     iItem: c_int,
2566     iSubItem: c_int,
2567     uNewState: UINT,
2568     uOldState: UINT,
2569     uChanged: UINT,
2570     ptAction: POINT,
2571     lParam: LPARAM,
2572 }}
2573 pub type LPNMLISTVIEW = *mut NMLISTVIEW;
2574 STRUCT!{struct NMITEMACTIVATE {
2575     hdr: NMHDR,
2576     iItem: c_int,
2577     iSubItem: c_int,
2578     uNewState: UINT,
2579     uOldState: UINT,
2580     uChanged: UINT,
2581     ptAction: POINT,
2582     lParam: LPARAM,
2583     uKeyFlags: UINT,
2584 }}
2585 pub type LPNMITEMACTIVATE = *mut NMITEMACTIVATE;
2586 pub const LVKF_ALT: UINT = 0x0001;
2587 pub const LVKF_CONTROL: UINT = 0x0002;
2588 pub const LVKF_SHIFT: UINT = 0x0004;
2589 STRUCT!{struct NMLVCUSTOMDRAW {
2590     nmcd: NMCUSTOMDRAW,
2591     clrText: COLORREF,
2592     clrTextBk: COLORREF,
2593     iSubItem: c_int,
2594     dwItemType: DWORD,
2595     clrFace: COLORREF,
2596     iIconEffect: c_int,
2597     iIconPhase: c_int,
2598     iPartId: c_int,
2599     iStateId: c_int,
2600     rcText: RECT,
2601     uAlign: UINT,
2602 }}
2603 pub type LPNMLVCUSTOMDRAW = *mut NMLVCUSTOMDRAW;
2604 pub const LVCDI_ITEM: DWORD = 0x00000000;
2605 pub const LVCDI_GROUP: DWORD = 0x00000001;
2606 pub const LVCDI_ITEMSLIST: DWORD = 0x00000002;
2607 pub const LVCDRF_NOSELECT: LRESULT = 0x00010000;
2608 pub const LVCDRF_NOGROUPFRAME: LRESULT = 0x00020000;
2609 STRUCT!{struct NMLVCACHEHINT {
2610     hdr: NMHDR,
2611     iFrom: c_int,
2612     iTo: c_int,
2613 }}
2614 pub type LPNMLVCACHEHINT = *mut NMLVCACHEHINT;
2615 pub type LPNM_CACHEHINT = LPNMLVCACHEHINT;
2616 pub type PNM_CACHEHINT = LPNMLVCACHEHINT;
2617 pub type NM_CACHEHINT = NMLVCACHEHINT;
2618 STRUCT!{struct NMLVFINDITEMA {
2619     hdr: NMHDR,
2620     iStart: c_int,
2621     lvfi: LVFINDINFOA,
2622 }}
2623 pub type LPNMLVFINDITEMA = *mut NMLVFINDITEMA;
2624 STRUCT!{struct NMLVFINDITEMW {
2625     hdr: NMHDR,
2626     iStart: c_int,
2627     lvfi: LVFINDINFOW,
2628 }}
2629 pub type LPNMLVFINDITEMW = *mut NMLVFINDITEMW;
2630 pub type PNM_FINDITEMA = LPNMLVFINDITEMA;
2631 pub type LPNM_FINDITEMA = LPNMLVFINDITEMA;
2632 pub type NM_FINDITEMA = NMLVFINDITEMA;
2633 pub type PNM_FINDITEMW = LPNMLVFINDITEMW;
2634 pub type LPNM_FINDITEMW = LPNMLVFINDITEMW;
2635 pub type NM_FINDITEMW = NMLVFINDITEMW;
2636 STRUCT!{struct NMLVODSTATECHANGE {
2637     hdr: NMHDR,
2638     iFrom: c_int,
2639     iTo: c_int,
2640     uNewState: UINT,
2641     uOldState: UINT,
2642 }}
2643 pub type LPNMLVODSTATECHANGE = *mut NMLVODSTATECHANGE;
2644 pub type PNM_ODSTATECHANGE = LPNMLVODSTATECHANGE;
2645 pub type LPNM_ODSTATECHANGE = LPNMLVODSTATECHANGE;
2646 pub type NM_ODSTATECHANGE = NMLVODSTATECHANGE;
2647 pub const LVN_ITEMCHANGING: UINT = LVN_FIRST - 0;
2648 pub const LVN_ITEMCHANGED: UINT = LVN_FIRST - 1;
2649 pub const LVN_INSERTITEM: UINT = LVN_FIRST - 2;
2650 pub const LVN_DELETEITEM: UINT = LVN_FIRST - 3;
2651 pub const LVN_DELETEALLITEMS: UINT = LVN_FIRST - 4;
2652 pub const LVN_BEGINLABELEDITA: UINT = LVN_FIRST - 5;
2653 pub const LVN_BEGINLABELEDITW: UINT = LVN_FIRST - 75;
2654 pub const LVN_ENDLABELEDITA: UINT = LVN_FIRST - 6;
2655 pub const LVN_ENDLABELEDITW: UINT = LVN_FIRST - 76;
2656 pub const LVN_COLUMNCLICK: UINT = LVN_FIRST - 8;
2657 pub const LVN_BEGINDRAG: UINT = LVN_FIRST - 9;
2658 pub const LVN_BEGINRDRAG: UINT = LVN_FIRST - 11;
2659 pub const LVN_ODCACHEHINT: UINT = LVN_FIRST - 13;
2660 pub const LVN_ODFINDITEMA: UINT = LVN_FIRST - 52;
2661 pub const LVN_ODFINDITEMW: UINT = LVN_FIRST - 79;
2662 pub const LVN_ITEMACTIVATE: UINT = LVN_FIRST - 14;
2663 pub const LVN_ODSTATECHANGED: UINT = LVN_FIRST - 15;
2664 pub const LVN_HOTTRACK: UINT = LVN_FIRST - 21;
2665 pub const LVN_GETDISPINFOA: UINT = LVN_FIRST - 50;
2666 pub const LVN_GETDISPINFOW: UINT = LVN_FIRST - 77;
2667 pub const LVN_SETDISPINFOA: UINT = LVN_FIRST - 51;
2668 pub const LVN_SETDISPINFOW: UINT = LVN_FIRST - 78;
2669 pub const LVIF_DI_SETITEM: UINT = 0x1000;
2670 pub type LV_DISPINFOA = NMLVDISPINFOA;
2671 pub type LV_DISPINFOW = NMLVDISPINFOW;
2672 STRUCT!{struct NMLVDISPINFOA {
2673     hdr: NMHDR,
2674     item: LVITEMA,
2675 }}
2676 pub type LPNMLVDISPINFOA = *mut NMLVDISPINFOA;
2677 STRUCT!{struct NMLVDISPINFOW {
2678     hdr: NMHDR,
2679     item: LVITEMW,
2680 }}
2681 pub type LPNMLVDISPINFOW = *mut NMLVDISPINFOW;
2682 pub const LVN_KEYDOWN: UINT = LVN_FIRST - 55;
2683 pub type LV_KEYDOWN = NMLVKEYDOWN;
2684 STRUCT!{#[repr(packed)] struct NMLVKEYDOWN {
2685     hdr: NMHDR,
2686     wVKey: WORD,
2687     flags: UINT,
2688 }}
2689 pub type LPNMLVKEYDOWN = *mut NMLVKEYDOWN;
2690 pub const LVN_MARQUEEBEGIN: UINT = LVN_FIRST - 56;
2691 STRUCT!{struct NMLVLINK {
2692     hdr: NMHDR,
2693     link: LITEM,
2694     iItem: c_int,
2695     iSubItem: c_int,
2696 }}
2697 pub type PNMLVLINK = *mut NMLVLINK;
2698 STRUCT!{struct NMLVGETINFOTIPA {
2699     hdr: NMHDR,
2700     dwFlags: DWORD,
2701     pszText: LPSTR,
2702     cchTextMax: c_int,
2703     iItem: c_int,
2704     iSubItem: c_int,
2705     lParam: LPARAM,
2706 }}
2707 pub type LPNMLVGETINFOTIPA = *mut NMLVGETINFOTIPA;
2708 STRUCT!{struct NMLVGETINFOTIPW {
2709     hdr: NMHDR,
2710     dwFlags: DWORD,
2711     pszText: LPWSTR,
2712     cchTextMax: c_int,
2713     iItem: c_int,
2714     iSubItem: c_int,
2715     lParam: LPARAM,
2716 }}
2717 pub type LPNMLVGETINFOTIPW = *mut NMLVGETINFOTIPW;
2718 pub const LVGIT_UNFOLDED: DWORD = 0x0001;
2719 pub const LVN_GETINFOTIPA: UINT = LVN_FIRST - 57;
2720 pub const LVN_GETINFOTIPW: UINT = LVN_FIRST - 58;
2721 pub const LVNSCH_DEFAULT: LPARAM = -1;
2722 pub const LVNSCH_ERROR: LPARAM = -2;
2723 pub const LVNSCH_IGNORE: LPARAM = -3;
2724 pub const LVN_INCREMENTALSEARCHA: UINT = LVN_FIRST - 62;
2725 pub const LVN_INCREMENTALSEARCHW: UINT = LVN_FIRST - 63;
2726 pub const LVN_COLUMNDROPDOWN: UINT = LVN_FIRST - 64;
2727 pub const LVN_COLUMNOVERFLOWCLICK: UINT = LVN_FIRST - 66;
2728 STRUCT!{struct NMLVSCROLL {
2729     hdr: NMHDR,
2730     dx: c_int,
2731     dy: c_int,
2732 }}
2733 pub type LPNMLVSCROLL = *mut NMLVSCROLL;
2734 pub const LVN_BEGINSCROLL: UINT = LVN_FIRST - 80;
2735 pub const LVN_ENDSCROLL: UINT = LVN_FIRST - 81;
2736 pub const LVN_LINKCLICK: UINT = LVN_FIRST - 84;
2737 pub const EMF_CENTERED: DWORD = 0x00000001;
2738 STRUCT!{struct NMLVEMPTYMARKUP {
2739     hdr: NMHDR,
2740     dwFlags: DWORD,
2741     szMarkup: [WCHAR; L_MAX_URL_LENGTH],
2742 }}
2743 pub const LVN_GETEMPTYMARKUP: UINT = LVN_FIRST - 87;
2744 pub const WC_TREEVIEW: &'static str = "SysTreeView32";
2745 pub const TVS_HASBUTTONS: DWORD = 0x0001;
2746 pub const TVS_HASLINES: DWORD = 0x0002;
2747 pub const TVS_LINESATROOT: DWORD = 0x0004;
2748 pub const TVS_EDITLABELS: DWORD = 0x0008;
2749 pub const TVS_DISABLEDRAGDROP: DWORD = 0x0010;
2750 pub const TVS_SHOWSELALWAYS: DWORD = 0x0020;
2751 pub const TVS_RTLREADING: DWORD = 0x0040;
2752 pub const TVS_NOTOOLTIPS: DWORD = 0x0080;
2753 pub const TVS_CHECKBOXES: DWORD = 0x0100;
2754 pub const TVS_TRACKSELECT: DWORD = 0x0200;
2755 pub const TVS_SINGLEEXPAND: DWORD = 0x0400;
2756 pub const TVS_INFOTIP: DWORD = 0x0800;
2757 pub const TVS_FULLROWSELECT: DWORD = 0x1000;
2758 pub const TVS_NOSCROLL: DWORD = 0x2000;
2759 pub const TVS_NONEVENHEIGHT: DWORD = 0x4000;
2760 pub const TVS_NOHSCROLL: DWORD = 0x8000;
2761 pub const TVS_EX_NOSINGLECOLLAPSE: DWORD = 0x0001;
2762 pub const TVS_EX_MULTISELECT: DWORD = 0x0002;
2763 pub const TVS_EX_DOUBLEBUFFER: DWORD = 0x0004;
2764 pub const TVS_EX_NOINDENTSTATE: DWORD = 0x0008;
2765 pub const TVS_EX_RICHTOOLTIP: DWORD = 0x0010;
2766 pub const TVS_EX_AUTOHSCROLL: DWORD = 0x0020;
2767 pub const TVS_EX_FADEINOUTEXPANDOS: DWORD = 0x0040;
2768 pub const TVS_EX_PARTIALCHECKBOXES: DWORD = 0x0080;
2769 pub const TVS_EX_EXCLUSIONCHECKBOXES: DWORD = 0x0100;
2770 pub const TVS_EX_DIMMEDCHECKBOXES: DWORD = 0x0200;
2771 pub const TVS_EX_DRAWIMAGEASYNC: DWORD = 0x0400;
2772 pub enum TREEITEM {}
2773 pub type HTREEITEM = *mut TREEITEM;
2774 pub const TVIF_TEXT: UINT = 0x0001;
2775 pub const TVIF_IMAGE: UINT = 0x0002;
2776 pub const TVIF_PARAM: UINT = 0x0004;
2777 pub const TVIF_STATE: UINT = 0x0008;
2778 pub const TVIF_HANDLE: UINT = 0x0010;
2779 pub const TVIF_SELECTEDIMAGE: UINT = 0x0020;
2780 pub const TVIF_CHILDREN: UINT = 0x0040;
2781 pub const TVIF_INTEGRAL: UINT = 0x0080;
2782 pub const TVIF_STATEEX: UINT = 0x0100;
2783 pub const TVIF_EXPANDEDIMAGE: UINT = 0x0200;
2784 pub const TVIS_SELECTED: UINT = 0x0002;
2785 pub const TVIS_CUT: UINT = 0x0004;
2786 pub const TVIS_DROPHILITED: UINT = 0x0008;
2787 pub const TVIS_BOLD: UINT = 0x0010;
2788 pub const TVIS_EXPANDED: UINT = 0x0020;
2789 pub const TVIS_EXPANDEDONCE: UINT = 0x0040;
2790 pub const TVIS_EXPANDPARTIAL: UINT = 0x0080;
2791 pub const TVIS_OVERLAYMASK: UINT = 0x0F00;
2792 pub const TVIS_STATEIMAGEMASK: UINT = 0xF000;
2793 pub const TVIS_USERMASK: UINT = 0xF000;
2794 pub const TVIS_EX_FLAT: UINT = 0x0001;
2795 pub const TVIS_EX_DISABLED: UINT = 0x0002;
2796 pub const TVIS_EX_ALL: UINT = 0x0002;
2797 STRUCT!{struct NMTVSTATEIMAGECHANGING {
2798     hdr: NMHDR,
2799     hti: HTREEITEM,
2800     iOldStateImageIndex: c_int,
2801     iNewStateImageIndex: c_int,
2802 }}
2803 pub type LPNMTVSTATEIMAGECHANGING = *mut NMTVSTATEIMAGECHANGING;
2804 pub const I_CHILDRENCALLBACK: c_int = -1;
2805 pub const I_CHILDRENAUTO: c_int = -2;
2806 pub type LPTV_ITEMW = LPTVITEMW;
2807 pub type LPTV_ITEMA = LPTVITEMA;
2808 pub type TV_ITEMW = TVITEMW;
2809 pub type TV_ITEMA = TVITEMA;
2810 STRUCT!{struct TVITEMA {
2811     mask: UINT,
2812     hItem: HTREEITEM,
2813     state: UINT,
2814     stateMask: UINT,
2815     pszText: LPSTR,
2816     cchTextMax: c_int,
2817     iImage: c_int,
2818     iSelectedImage: c_int,
2819     cChildren: c_int,
2820     lParam: LPARAM,
2821 }}
2822 pub type LPTVITEMA = *mut TVITEMA;
2823 STRUCT!{struct TVITEMW {
2824     mask: UINT,
2825     hItem: HTREEITEM,
2826     state: UINT,
2827     stateMask: UINT,
2828     pszText: LPWSTR,
2829     cchTextMax: c_int,
2830     iImage: c_int,
2831     iSelectedImage: c_int,
2832     cChildren: c_int,
2833     lParam: LPARAM,
2834 }}
2835 pub type LPTVITEMW = *mut TVITEMW;
2836 STRUCT!{struct TVITEMEXA {
2837     mask: UINT,
2838     hItem: HTREEITEM,
2839     state: UINT,
2840     stateMask: UINT,
2841     pszText: LPSTR,
2842     cchTextMax: c_int,
2843     iImage: c_int,
2844     iSelectedImage: c_int,
2845     cChildren: c_int,
2846     lParam: LPARAM,
2847     iIntegral: c_int,
2848     uStateEx: UINT,
2849     hwnd: HWND,
2850     iExpandedImage: c_int,
2851     iReserved: c_int,
2852 }}
2853 pub type LPTVITEMEXA = *mut TVITEMEXA;
2854 STRUCT!{struct TVITEMEXW {
2855     mask: UINT,
2856     hItem: HTREEITEM,
2857     state: UINT,
2858     stateMask: UINT,
2859     pszText: LPWSTR,
2860     cchTextMax: c_int,
2861     iImage: c_int,
2862     iSelectedImage: c_int,
2863     cChildren: c_int,
2864     lParam: LPARAM,
2865     iIntegral: c_int,
2866     uStateEx: UINT,
2867     hwnd: HWND,
2868     iExpandedImage: c_int,
2869     iReserved: c_int,
2870 }}
2871 pub type LPTVITEMEXW = *mut TVITEMEXW;
2872 pub const TVI_ROOT: HTREEITEM = -0x10000isize as HTREEITEM;
2873 pub const TVI_FIRST: HTREEITEM = -0x0FFFFisize as HTREEITEM;
2874 pub const TVI_LAST: HTREEITEM = -0x0FFFEisize as HTREEITEM;
2875 pub const TVI_SORT: HTREEITEM = -0x0FFFDisize as HTREEITEM;
2876 pub type LPTV_INSERTSTRUCTA = LPTVINSERTSTRUCTA;
2877 pub type LPTV_INSERTSTRUCTW = LPTVINSERTSTRUCTW;
2878 pub type TV_INSERTSTRUCTA = TVINSERTSTRUCTA;
2879 pub type TV_INSERTSTRUCTW = TVINSERTSTRUCTW;
2880 UNION!{union TVINSERTSTRUCTA_u {
2881     [u32; 15] [u64; 10],
2882     itemex itemex_mut: TVITEMEXA,
2883     item item_mut: TV_ITEMA,
2884 }}
2885 STRUCT!{struct TVINSERTSTRUCTA {
2886     hParent: HTREEITEM,
2887     hInsertAfter: HTREEITEM,
2888     u: TVINSERTSTRUCTA_u,
2889 }}
2890 pub type LPTVINSERTSTRUCTA = *mut TVINSERTSTRUCTA;
2891 UNION!{union TVINSERTSTRUCTW_u {
2892     [u32; 15] [u64; 10],
2893     itemex itemex_mut: TVITEMEXW,
2894     item item_mut: TV_ITEMW,
2895 }}
2896 STRUCT!{struct TVINSERTSTRUCTW {
2897     hParent: HTREEITEM,
2898     hInsertAfter: HTREEITEM,
2899     u: TVINSERTSTRUCTW_u,
2900 }}
2901 pub type LPTVINSERTSTRUCTW = *mut TVINSERTSTRUCTW;
2902 pub const TVM_INSERTITEMA: UINT = TV_FIRST + 0;
2903 pub const TVM_INSERTITEMW: UINT = TV_FIRST + 50;
2904 pub const TVM_DELETEITEM: UINT = TV_FIRST + 1;
2905 pub const TVM_EXPAND: UINT = TV_FIRST + 2;
2906 pub const TVE_COLLAPSE: WPARAM = 0x0001;
2907 pub const TVE_EXPAND: WPARAM = 0x0002;
2908 pub const TVE_TOGGLE: WPARAM = 0x0003;
2909 pub const TVE_EXPANDPARTIAL: WPARAM = 0x4000;
2910 pub const TVE_COLLAPSERESET: WPARAM = 0x8000;
2911 pub const TVM_GETITEMRECT: UINT = TV_FIRST + 4;
2912 pub const TVM_GETCOUNT: UINT = TV_FIRST + 5;
2913 pub const TVM_GETINDENT: UINT = TV_FIRST + 6;
2914 pub const TVM_SETINDENT: UINT = TV_FIRST + 7;
2915 pub const TVM_GETIMAGELIST: UINT = TV_FIRST + 8;
2916 pub const TVSIL_NORMAL: WPARAM = 0;
2917 pub const TVSIL_STATE: WPARAM = 2;
2918 pub const TVM_SETIMAGELIST: UINT = TV_FIRST + 9;
2919 pub const TVM_GETNEXTITEM: UINT = TV_FIRST + 10;
2920 pub const TVGN_ROOT: WPARAM = 0x0000;
2921 pub const TVGN_NEXT: WPARAM = 0x0001;
2922 pub const TVGN_PREVIOUS: WPARAM = 0x0002;
2923 pub const TVGN_PARENT: WPARAM = 0x0003;
2924 pub const TVGN_CHILD: WPARAM = 0x0004;
2925 pub const TVGN_FIRSTVISIBLE: WPARAM = 0x0005;
2926 pub const TVGN_NEXTVISIBLE: WPARAM = 0x0006;
2927 pub const TVGN_PREVIOUSVISIBLE: WPARAM = 0x0007;
2928 pub const TVGN_DROPHILITE: WPARAM = 0x0008;
2929 pub const TVGN_CARET: WPARAM = 0x0009;
2930 pub const TVGN_LASTVISIBLE: WPARAM = 0x000A;
2931 pub const TVGN_NEXTSELECTED: WPARAM = 0x000B;
2932 pub const TVSI_NOSINGLEEXPAND: WPARAM = 0x8000;
2933 pub const TVM_SELECTITEM: UINT = TV_FIRST + 11;
2934 pub const TVM_GETITEMA: UINT = TV_FIRST + 12;
2935 pub const TVM_GETITEMW: UINT = TV_FIRST + 62;
2936 pub const TVM_SETITEMA: UINT = TV_FIRST + 13;
2937 pub const TVM_SETITEMW: UINT = TV_FIRST + 63;
2938 pub const TVM_EDITLABELA: UINT = TV_FIRST + 14;
2939 pub const TVM_EDITLABELW: UINT = TV_FIRST + 65;
2940 pub const TVM_GETEDITCONTROL: UINT = TV_FIRST + 15;
2941 pub const TVM_GETVISIBLECOUNT: UINT = TV_FIRST + 16;
2942 pub const TVM_HITTEST: UINT = TV_FIRST + 17;
2943 pub type LPTV_HITTESTINFO = LPTVHITTESTINFO;
2944 pub type TV_HITTESTINFO = TVHITTESTINFO;
2945 STRUCT!{struct TVHITTESTINFO {
2946     pt: POINT,
2947     flags: UINT,
2948     hItem: HTREEITEM,
2949 }}
2950 pub type LPTVHITTESTINFO = *mut TVHITTESTINFO;
2951 pub const TVHT_NOWHERE: UINT = 0x0001;
2952 pub const TVHT_ONITEMICON: UINT = 0x0002;
2953 pub const TVHT_ONITEMLABEL: UINT = 0x0004;
2954 pub const TVHT_ONITEM: UINT = TVHT_ONITEMICON | TVHT_ONITEMLABEL | TVHT_ONITEMSTATEICON;
2955 pub const TVHT_ONITEMINDENT: UINT = 0x0008;
2956 pub const TVHT_ONITEMBUTTON: UINT = 0x0010;
2957 pub const TVHT_ONITEMRIGHT: UINT = 0x0020;
2958 pub const TVHT_ONITEMSTATEICON: UINT = 0x0040;
2959 pub const TVHT_ABOVE: UINT = 0x0100;
2960 pub const TVHT_BELOW: UINT = 0x0200;
2961 pub const TVHT_TORIGHT: UINT = 0x0400;
2962 pub const TVHT_TOLEFT: UINT = 0x0800;
2963 pub const TVM_CREATEDRAGIMAGE: UINT = TV_FIRST + 18;
2964 pub const TVM_SORTCHILDREN: UINT = TV_FIRST + 19;
2965 pub const TVM_ENSUREVISIBLE: UINT = TV_FIRST + 20;
2966 pub const TVM_SORTCHILDRENCB: UINT = TV_FIRST + 21;
2967 pub const TVM_ENDEDITLABELNOW: UINT = TV_FIRST + 22;
2968 pub const TVM_GETISEARCHSTRINGA: UINT = TV_FIRST + 23;
2969 pub const TVM_GETISEARCHSTRINGW: UINT = TV_FIRST + 64;
2970 pub const TVM_SETTOOLTIPS: UINT = TV_FIRST + 24;
2971 pub const TVM_GETTOOLTIPS: UINT = TV_FIRST + 25;
2972 pub const TVM_SETINSERTMARK: UINT = TV_FIRST + 26;
2973 pub const TVM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
2974 pub const TVM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
2975 pub const TVM_SETITEMHEIGHT: UINT = TV_FIRST + 27;
2976 pub const TVM_GETITEMHEIGHT: UINT = TV_FIRST + 28;
2977 pub const TVM_SETBKCOLOR: UINT = TV_FIRST + 29;
2978 pub const TVM_SETTEXTCOLOR: UINT = TV_FIRST + 30;
2979 pub const TVM_GETBKCOLOR: UINT = TV_FIRST + 31;
2980 pub const TVM_GETTEXTCOLOR: UINT = TV_FIRST + 32;
2981 pub const TVM_SETSCROLLTIME: UINT = TV_FIRST + 33;
2982 pub const TVM_GETSCROLLTIME: UINT = TV_FIRST + 34;
2983 pub const TVM_SETINSERTMARKCOLOR: UINT = TV_FIRST + 37;
2984 pub const TVM_GETINSERTMARKCOLOR: UINT = TV_FIRST + 38;
2985 pub const TVM_SETBORDER: UINT = TV_FIRST + 35;
2986 pub const TVSBF_XBORDER: WPARAM = 0x00000001;
2987 pub const TVSBF_YBORDER: WPARAM = 0x00000002;
2988 pub const TVM_GETITEMSTATE: UINT = TV_FIRST + 39;
2989 pub const TVM_SETLINECOLOR: UINT = TV_FIRST + 40;
2990 pub const TVM_GETLINECOLOR: UINT = TV_FIRST + 41;
2991 pub const TVM_MAPACCIDTOHTREEITEM: UINT = TV_FIRST + 42;
2992 pub const TVM_MAPHTREEITEMTOACCID: UINT = TV_FIRST + 43;
2993 pub const TVM_SETEXTENDEDSTYLE: UINT = TV_FIRST + 44;
2994 pub const TVM_GETEXTENDEDSTYLE: UINT = TV_FIRST + 45;
2995 pub const TVM_SETAUTOSCROLLINFO: UINT = TV_FIRST + 59;
2996 pub const TVM_SETHOT: UINT = TV_FIRST + 58;
2997 pub const TVM_GETSELECTEDCOUNT: UINT = TV_FIRST + 70;
2998 pub const TVM_SHOWINFOTIP: UINT = TV_FIRST + 71;
2999 ENUM!{enum TVITEMPART {
3000     TVGIPR_BUTTON = 0x0001,
3001 }}
3002 STRUCT!{struct TVGETITEMPARTRECTINFO {
3003     hti: HTREEITEM,
3004     prc: *mut RECT,
3005     partID: TVITEMPART,
3006 }}
3007 pub const TVM_GETITEMPARTRECT: UINT = TV_FIRST + 72;
3008 FN!{stdcall PFNTVCOMPARE(
3009     lParam1: LPARAM,
3010     lParam2: LPARAM,
3011     lParamSort: LPARAM,
3012 ) -> c_int}
3013 pub type LPTV_SORTCB = LPTVSORTCB;
3014 pub type TV_SORTCB = TVSORTCB;
3015 STRUCT!{struct TVSORTCB {
3016     hParent: HTREEITEM,
3017     lpfnCompare: PFNTVCOMPARE,
3018     lParam: LPARAM,
3019 }}
3020 pub type LPTVSORTCB = *mut TVSORTCB;
3021 pub type LPNM_TREEVIEWA = LPNMTREEVIEWA;
3022 pub type LPNM_TREEVIEWW = LPNMTREEVIEWW;
3023 pub type NM_TREEVIEWA = NMTREEVIEWA;
3024 pub type NM_TREEVIEWW = NMTREEVIEWW;
3025 STRUCT!{struct NMTREEVIEWA {
3026     hdr: NMHDR,
3027     action: UINT,
3028     itemOld: TVITEMA,
3029     itemNew: TVITEMA,
3030     ptDrag: POINT,
3031 }}
3032 pub type LPNMTREEVIEWA = *mut NMTREEVIEWA;
3033 STRUCT!{struct NMTREEVIEWW {
3034     hdr: NMHDR,
3035     action: UINT,
3036     itemOld: TVITEMW,
3037     itemNew: TVITEMW,
3038     ptDrag: POINT,
3039 }}
3040 pub type LPNMTREEVIEWW = *mut NMTREEVIEWW;
3041 pub const TVN_SELCHANGINGA: UINT = TVN_FIRST - 1;
3042 pub const TVN_SELCHANGINGW: UINT = TVN_FIRST - 50;
3043 pub const TVN_SELCHANGEDA: UINT = TVN_FIRST - 2;
3044 pub const TVN_SELCHANGEDW: UINT = TVN_FIRST - 51;
3045 pub const TVC_UNKNOWN: LPARAM = 0x0000;
3046 pub const TVC_BYMOUSE: LPARAM = 0x0001;
3047 pub const TVC_BYKEYBOARD: LPARAM = 0x0002;
3048 pub const TVN_GETDISPINFOA: UINT = TVN_FIRST - 3;
3049 pub const TVN_GETDISPINFOW: UINT = TVN_FIRST - 52;
3050 pub const TVN_SETDISPINFOA: UINT = TVN_FIRST - 4;
3051 pub const TVN_SETDISPINFOW: UINT = TVN_FIRST - 53;
3052 pub const TVIF_DI_SETITEM: UINT = 0x1000;
3053 pub type TV_DISPINFOA = NMTVDISPINFOA;
3054 pub type TV_DISPINFOW = NMTVDISPINFOW;
3055 STRUCT!{struct NMTVDISPINFOA {
3056     hdr: NMHDR,
3057     item: TVITEMA,
3058 }}
3059 pub type LPNMTVDISPINFOA = *mut NMTVDISPINFOA;
3060 STRUCT!{struct NMTVDISPINFOW {
3061     hdr: NMHDR,
3062     item: TVITEMW,
3063 }}
3064 pub type LPNMTVDISPINFOW = *mut NMTVDISPINFOW;
3065 STRUCT!{struct NMTVDISPINFOEXA {
3066     hdr: NMHDR,
3067     item: TVITEMEXA,
3068 }}
3069 pub type LPNMTVDISPINFOEXA = *mut NMTVDISPINFOEXA;
3070 STRUCT!{struct NMTVDISPINFOEXW {
3071     hdr: NMHDR,
3072     item: TVITEMEXW,
3073 }}
3074 pub type LPNMTVDISPINFOEXW = *mut NMTVDISPINFOEXW;
3075 pub type TV_DISPINFOEXA = NMTVDISPINFOEXA;
3076 pub type TV_DISPINFOEXW = NMTVDISPINFOEXW;
3077 pub const TVN_ITEMEXPANDINGA: UINT = TVN_FIRST - 5;
3078 pub const TVN_ITEMEXPANDINGW: UINT = TVN_FIRST - 54;
3079 pub const TVN_ITEMEXPANDEDA: UINT = TVN_FIRST - 6;
3080 pub const TVN_ITEMEXPANDEDW: UINT = TVN_FIRST - 55;
3081 pub const TVN_BEGINDRAGA: UINT = TVN_FIRST - 7;
3082 pub const TVN_BEGINDRAGW: UINT = TVN_FIRST - 56;
3083 pub const TVN_BEGINRDRAGA: UINT = TVN_FIRST - 8;
3084 pub const TVN_BEGINRDRAGW: UINT = TVN_FIRST - 57;
3085 pub const TVN_DELETEITEMA: UINT = TVN_FIRST - 9;
3086 pub const TVN_DELETEITEMW: UINT = TVN_FIRST - 58;
3087 pub const TVN_BEGINLABELEDITA: UINT = TVN_FIRST - 10;
3088 pub const TVN_BEGINLABELEDITW: UINT = TVN_FIRST - 59;
3089 pub const TVN_ENDLABELEDITA: UINT = TVN_FIRST - 11;
3090 pub const TVN_ENDLABELEDITW: UINT = TVN_FIRST - 60;
3091 pub const TVN_KEYDOWN: UINT = TVN_FIRST - 12;
3092 pub const TVN_GETINFOTIPA: UINT = TVN_FIRST - 13;
3093 pub const TVN_GETINFOTIPW: UINT = TVN_FIRST - 14;
3094 pub const TVN_SINGLEEXPAND: UINT = TVN_FIRST - 15;
3095 pub const TVNRET_DEFAULT: LRESULT = 0;
3096 pub const TVNRET_SKIPOLD: LRESULT = 1;
3097 pub const TVNRET_SKIPNEW: LRESULT = 2;
3098 pub const TVN_ITEMCHANGINGA: UINT = TVN_FIRST - 16;
3099 pub const TVN_ITEMCHANGINGW: UINT = TVN_FIRST - 17;
3100 pub const TVN_ITEMCHANGEDA: UINT = TVN_FIRST - 18;
3101 pub const TVN_ITEMCHANGEDW: UINT = TVN_FIRST - 19;
3102 pub const TVN_ASYNCDRAW: UINT = TVN_FIRST - 20;
3103 pub type TV_KEYDOWN = NMTVKEYDOWN;
3104 STRUCT!{#[repr(packed)] struct NMTVKEYDOWN {
3105     hdr: NMHDR,
3106     wVKey: WORD,
3107     flags: UINT,
3108 }}
3109 pub type LPNMTVKEYDOWN = *mut NMTVKEYDOWN;
3110 STRUCT!{struct NMTVCUSTOMDRAW {
3111     nmcd: NMCUSTOMDRAW,
3112     clrText: COLORREF,
3113     clrTextBk: COLORREF,
3114     iLevel: c_int,
3115 }}
3116 pub type LPNMTVCUSTOMDRAW = *mut NMTVCUSTOMDRAW;
3117 STRUCT!{struct NMTVGETINFOTIPA {
3118     hdr: NMHDR,
3119     pszText: LPSTR,
3120     cchTextMax: c_int,
3121     hItem: HTREEITEM,
3122     lParam: LPARAM,
3123 }}
3124 pub type LPNMTVGETINFOTIPA = *mut NMTVGETINFOTIPA;
3125 STRUCT!{struct NMTVGETINFOTIPW {
3126     hdr: NMHDR,
3127     pszText: LPWSTR,
3128     cchTextMax: c_int,
3129     hItem: HTREEITEM,
3130     lParam: LPARAM,
3131 }}
3132 pub type LPNMTVGETINFOTIPW = *mut NMTVGETINFOTIPW;
3133 pub const TVCDRF_NOIMAGES: LRESULT = 0x00010000;
3134 STRUCT!{struct NMTVITEMCHANGE {
3135     hdr: NMHDR,
3136     uChanged: UINT,
3137     hItem: HTREEITEM,
3138     uStateNew: UINT,
3139     uStateOld: UINT,
3140     lParam: LPARAM,
3141 }}
3142 STRUCT!{struct NMTVASYNCDRAW {
3143     hdr: NMHDR,
3144     pimldp: *mut IMAGELISTDRAWPARAMS,
3145     hr: HRESULT,
3146     hItem: HTREEITEM,
3147     lParam: LPARAM,
3148     dwRetFlags: DWORD,
3149     iRetImageIndex: c_int,
3150 }}
3151 pub const WC_COMBOBOXEX: &'static str = "ComboBoxEx32";
3152 pub const CBEIF_TEXT: UINT = 0x00000001;
3153 pub const CBEIF_IMAGE: UINT = 0x00000002;
3154 pub const CBEIF_SELECTEDIMAGE: UINT = 0x00000004;
3155 pub const CBEIF_OVERLAY: UINT = 0x00000008;
3156 pub const CBEIF_INDENT: UINT = 0x00000010;
3157 pub const CBEIF_LPARAM: UINT = 0x00000020;
3158 pub const CBEIF_DI_SETITEM: UINT = 0x10000000;
3159 STRUCT!{struct COMBOBOXEXITEMA {
3160     mask: UINT,
3161     iItem: INT_PTR,
3162     pszText: LPSTR,
3163     cchTextMax: c_int,
3164     iImage: c_int,
3165     iSelectedImage: c_int,
3166     iOverlay: c_int,
3167     iIndent: c_int,
3168     lParam: LPARAM,
3169 }}
3170 pub type PCOMBOBOXEXITEMA = *mut COMBOBOXEXITEMA;
3171 pub type PCCOMBOBOXEXITEMA = *const COMBOBOXEXITEMA;
3172 STRUCT!{struct COMBOBOXEXITEMW {
3173     mask: UINT,
3174     iItem: INT_PTR,
3175     pszText: LPWSTR,
3176     cchTextMax: c_int,
3177     iImage: c_int,
3178     iSelectedImage: c_int,
3179     iOverlay: c_int,
3180     iIndent: c_int,
3181     lParam: LPARAM,
3182 }}
3183 pub type PCOMBOBOXEXITEMW = *mut COMBOBOXEXITEMW;
3184 pub type PCCOMBOBOXEXITEMW = *const COMBOBOXEXITEMW;
3185 pub const CBEM_INSERTITEMA: UINT = WM_USER + 1;
3186 pub const CBEM_SETIMAGELIST: UINT = WM_USER + 2;
3187 pub const CBEM_GETIMAGELIST: UINT = WM_USER + 3;
3188 pub const CBEM_GETITEMA: UINT = WM_USER + 4;
3189 pub const CBEM_SETITEMA: UINT = WM_USER + 5;
3190 pub const CBEM_DELETEITEM: UINT = CB_DELETESTRING;
3191 pub const CBEM_GETCOMBOCONTROL: UINT = WM_USER + 6;
3192 pub const CBEM_GETEDITCONTROL: UINT = WM_USER + 7;
3193 pub const CBEM_SETEXSTYLE: UINT = WM_USER + 8;
3194 pub const CBEM_SETEXTENDEDSTYLE: UINT = WM_USER + 14;
3195 pub const CBEM_GETEXSTYLE: UINT = WM_USER + 9;
3196 pub const CBEM_GETEXTENDEDSTYLE: UINT = WM_USER + 9;
3197 pub const CBEM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
3198 pub const CBEM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
3199 pub const CBEM_HASEDITCHANGED: UINT = WM_USER + 10;
3200 pub const CBEM_INSERTITEMW: UINT = WM_USER + 11;
3201 pub const CBEM_SETITEMW: UINT = WM_USER + 12;
3202 pub const CBEM_GETITEMW: UINT = WM_USER + 13;
3203 pub const CBEM_SETWINDOWTHEME: UINT = CCM_SETWINDOWTHEME;
3204 pub const CBES_EX_NOEDITIMAGE: DWORD = 0x00000001;
3205 pub const CBES_EX_NOEDITIMAGEINDENT: DWORD = 0x00000002;
3206 pub const CBES_EX_PATHWORDBREAKPROC: DWORD = 0x00000004;
3207 pub const CBES_EX_NOSIZELIMIT: DWORD = 0x00000008;
3208 pub const CBES_EX_CASESENSITIVE: DWORD = 0x00000010;
3209 pub const CBES_EX_TEXTENDELLIPSIS: DWORD = 0x00000020;
3210 STRUCT!{struct NMCOMBOBOXEXA {
3211     hdr: NMHDR,
3212     ceItem: COMBOBOXEXITEMA,
3213 }}
3214 pub type PNMCOMBOBOXEXA = *mut NMCOMBOBOXEXA;
3215 STRUCT!{struct NMCOMBOBOXEXW {
3216     hdr: NMHDR,
3217     ceItem: COMBOBOXEXITEMW,
3218 }}
3219 pub type PNMCOMBOBOXEXW = *mut NMCOMBOBOXEXW;
3220 pub const CBEN_GETDISPINFOA: UINT = CBEN_FIRST - 0;
3221 pub const CBEN_INSERTITEM: UINT = CBEN_FIRST - 1;
3222 pub const CBEN_DELETEITEM: UINT = CBEN_FIRST - 2;
3223 pub const CBEN_BEGINEDIT: UINT = CBEN_FIRST - 4;
3224 pub const CBEN_ENDEDITA: UINT = CBEN_FIRST - 5;
3225 pub const CBEN_ENDEDITW: UINT = CBEN_FIRST - 6;
3226 pub const CBEN_GETDISPINFOW: UINT = CBEN_FIRST - 7;
3227 pub const CBEN_DRAGBEGINA: UINT = CBEN_FIRST - 8;
3228 pub const CBEN_DRAGBEGINW: UINT = CBEN_FIRST - 9;
3229 pub const CBENF_KILLFOCUS: c_int = 1;
3230 pub const CBENF_RETURN: c_int = 2;
3231 pub const CBENF_ESCAPE: c_int = 3;
3232 pub const CBENF_DROPDOWN: c_int = 4;
3233 pub const CBEMAXSTRLEN: usize = 260;
3234 STRUCT!{struct NMCBEDRAGBEGINW {
3235     hdr: NMHDR,
3236     iItemid: c_int,
3237     szText: [WCHAR; CBEMAXSTRLEN],
3238 }}
3239 pub type PNMCBEDRAGBEGINW = *mut NMCBEDRAGBEGINW;
3240 pub type LPNMCBEDRAGBEGINW = *mut NMCBEDRAGBEGINW;
3241 STRUCT!{struct NMCBEDRAGBEGINA {
3242     hdr: NMHDR,
3243     iItemid: c_int,
3244     szText: [c_char; CBEMAXSTRLEN],
3245 }}
3246 pub type PNMCBEDRAGBEGINA = *mut NMCBEDRAGBEGINA;
3247 pub type LPNMCBEDRAGBEGINA = *mut NMCBEDRAGBEGINA;
3248 STRUCT!{struct NMCBEENDEDITW {
3249     hdr: NMHDR,
3250     fChanged: BOOL,
3251     iNewSelection: c_int,
3252     szText: [WCHAR; CBEMAXSTRLEN],
3253     iWhy: c_int,
3254 }}
3255 pub type PNMCBEENDEDITW = *mut NMCBEENDEDITW;
3256 pub type LPNMCBEENDEDITW = *mut NMCBEENDEDITW;
3257 STRUCT!{struct NMCBEENDEDITA {
3258     hdr: NMHDR,
3259     fChanged: BOOL,
3260     iNewSelection: c_int,
3261     szText: [c_char; CBEMAXSTRLEN],
3262     iWhy: c_int,
3263 }}
3264 pub type PNMCBEENDEDITA = *mut NMCBEENDEDITA;
3265 pub type LPNMCBEENDEDITA = *mut NMCBEENDEDITA;
3266 pub const WC_TABCONTROL: &'static str = "SysTabControl32";
3267 pub const TCS_SCROLLOPPOSITE: DWORD = 0x0001;
3268 pub const TCS_BOTTOM: DWORD = 0x0002;
3269 pub const TCS_RIGHT: DWORD = 0x0002;
3270 pub const TCS_MULTISELECT: DWORD = 0x0004;
3271 pub const TCS_FLATBUTTONS: DWORD = 0x0008;
3272 pub const TCS_FORCEICONLEFT: DWORD = 0x0010;
3273 pub const TCS_FORCELABELLEFT: DWORD = 0x0020;
3274 pub const TCS_HOTTRACK: DWORD = 0x0040;
3275 pub const TCS_VERTICAL: DWORD = 0x0080;
3276 pub const TCS_TABS: DWORD = 0x0000;
3277 pub const TCS_BUTTONS: DWORD = 0x0100;
3278 pub const TCS_SINGLELINE: DWORD = 0x0000;
3279 pub const TCS_MULTILINE: DWORD = 0x0200;
3280 pub const TCS_RIGHTJUSTIFY: DWORD = 0x0000;
3281 pub const TCS_FIXEDWIDTH: DWORD = 0x0400;
3282 pub const TCS_RAGGEDRIGHT: DWORD = 0x0800;
3283 pub const TCS_FOCUSONBUTTONDOWN: DWORD = 0x1000;
3284 pub const TCS_OWNERDRAWFIXED: DWORD = 0x2000;
3285 pub const TCS_TOOLTIPS: DWORD = 0x4000;
3286 pub const TCS_FOCUSNEVER: DWORD = 0x8000;
3287 pub const TCS_EX_FLATSEPARATORS: DWORD = 0x00000001;
3288 pub const TCS_EX_REGISTERDROP: DWORD = 0x00000002;
3289 pub const TCM_GETIMAGELIST: UINT = TCM_FIRST + 2;
3290 pub const TCM_SETIMAGELIST: UINT = TCM_FIRST + 3;
3291 pub const TCM_GETITEMCOUNT: UINT = TCM_FIRST + 4;
3292 pub const TCIF_TEXT: UINT = 0x0001;
3293 pub const TCIF_IMAGE: UINT = 0x0002;
3294 pub const TCIF_RTLREADING: UINT = 0x0004;
3295 pub const TCIF_PARAM: UINT = 0x0008;
3296 pub const TCIF_STATE: UINT = 0x0010;
3297 pub const TCIS_BUTTONPRESSED: DWORD = 0x0001;
3298 pub const TCIS_HIGHLIGHTED: DWORD = 0x0002;
3299 pub type TC_ITEMHEADERA = TCITEMHEADERA;
3300 pub type TC_ITEMHEADERW = TCITEMHEADERW;
3301 STRUCT!{struct TCITEMHEADERA {
3302     mask: UINT,
3303     lpReserved1: UINT,
3304     lpReserved2: UINT,
3305     pszText: LPSTR,
3306     cchTextMax: c_int,
3307     iImage: c_int,
3308 }}
3309 pub type LPTCITEMHEADERA = *mut TCITEMHEADERA;
3310 STRUCT!{struct TCITEMHEADERW {
3311     mask: UINT,
3312     lpReserved1: UINT,
3313     lpReserved2: UINT,
3314     pszText: LPWSTR,
3315     cchTextMax: c_int,
3316     iImage: c_int,
3317 }}
3318 pub type LPTCITEMHEADERW = *mut TCITEMHEADERW;
3319 pub type TC_ITEMA = TCITEMA;
3320 pub type TC_ITEMW = TCITEMW;
3321 STRUCT!{struct TCITEMA {
3322     mask: UINT,
3323     dwState: DWORD,
3324     dwStateMask: DWORD,
3325     pszText: LPSTR,
3326     cchTextMax: c_int,
3327     iImage: c_int,
3328     lParam: LPARAM,
3329 }}
3330 pub type LPTCITEMA = *mut TCITEMA;
3331 STRUCT!{struct TCITEMW {
3332     mask: UINT,
3333     dwState: DWORD,
3334     dwStateMask: DWORD,
3335     pszText: LPWSTR,
3336     cchTextMax: c_int,
3337     iImage: c_int,
3338     lParam: LPARAM,
3339 }}
3340 pub type LPTCITEMW = *mut TCITEMW;
3341 pub const TCM_GETITEMA: UINT = TCM_FIRST + 5;
3342 pub const TCM_GETITEMW: UINT = TCM_FIRST + 60;
3343 pub const TCM_SETITEMA: UINT = TCM_FIRST + 6;
3344 pub const TCM_SETITEMW: UINT = TCM_FIRST + 61;
3345 pub const TCM_INSERTITEMA: UINT = TCM_FIRST + 7;
3346 pub const TCM_INSERTITEMW: UINT = TCM_FIRST + 62;
3347 pub const TCM_DELETEITEM: UINT = TCM_FIRST + 8;
3348 pub const TCM_DELETEALLITEMS: UINT = TCM_FIRST + 9;
3349 pub const TCM_GETITEMRECT: UINT = TCM_FIRST + 10;
3350 pub const TCM_GETCURSEL: UINT = TCM_FIRST + 11;
3351 pub const TCM_SETCURSEL: UINT = TCM_FIRST + 12;
3352 pub const TCHT_NOWHERE: UINT = 0x0001;
3353 pub const TCHT_ONITEMICON: UINT = 0x0002;
3354 pub const TCHT_ONITEMLABEL: UINT = 0x0004;
3355 pub const TCHT_ONITEM: UINT = TCHT_ONITEMICON | TCHT_ONITEMLABEL;
3356 pub type LPTC_HITTESTINFO = LPTCHITTESTINFO;
3357 pub type TC_HITTESTINFO = TCHITTESTINFO;
3358 STRUCT!{struct TCHITTESTINFO {
3359     pt: POINT,
3360     flags: UINT,
3361 }}
3362 pub type LPTCHITTESTINFO = *mut TCHITTESTINFO;
3363 pub const TCM_HITTEST: UINT = TCM_FIRST + 13;
3364 pub const TCM_SETITEMEXTRA: UINT = TCM_FIRST + 14;
3365 pub const TCM_ADJUSTRECT: UINT = TCM_FIRST + 40;
3366 pub const TCM_SETITEMSIZE: UINT = TCM_FIRST + 41;
3367 pub const TCM_REMOVEIMAGE: UINT = TCM_FIRST + 42;
3368 pub const TCM_SETPADDING: UINT = TCM_FIRST + 43;
3369 pub const TCM_GETROWCOUNT: UINT = TCM_FIRST + 44;
3370 pub const TCM_GETTOOLTIPS: UINT = TCM_FIRST + 45;
3371 pub const TCM_SETTOOLTIPS: UINT = TCM_FIRST + 46;
3372 pub const TCM_GETCURFOCUS: UINT = TCM_FIRST + 47;
3373 pub const TCM_SETCURFOCUS: UINT = TCM_FIRST + 48;
3374 pub const TCM_SETMINTABWIDTH: UINT = TCM_FIRST + 49;
3375 pub const TCM_DESELECTALL: UINT = TCM_FIRST + 50;
3376 pub const TCM_HIGHLIGHTITEM: UINT = TCM_FIRST + 51;
3377 pub const TCM_SETEXTENDEDSTYLE: UINT = TCM_FIRST + 52;
3378 pub const TCM_GETEXTENDEDSTYLE: UINT = TCM_FIRST + 53;
3379 pub const TCM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
3380 pub const TCM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
3381 pub const TCN_KEYDOWN: UINT = TCN_FIRST - 0;
3382 pub type TC_KEYDOWN = NMTCKEYDOWN;
3383 STRUCT!{#[repr(packed)] struct NMTCKEYDOWN {
3384     hdr: NMHDR,
3385     wVKey: WORD,
3386     flags: UINT,
3387 }}
3388 pub const TCN_SELCHANGE: UINT = TCN_FIRST - 1;
3389 pub const TCN_SELCHANGING: UINT = TCN_FIRST - 2;
3390 pub const TCN_GETOBJECT: UINT = TCN_FIRST - 3;
3391 pub const TCN_FOCUSCHANGE: UINT = TCN_FIRST - 4;
3392 pub const ANIMATE_CLASS: &'static str = "SysAnimate32";
3393 pub const ACS_CENTER: DWORD = 0x0001;
3394 pub const ACS_TRANSPARENT: DWORD = 0x0002;
3395 pub const ACS_AUTOPLAY: DWORD = 0x0004;
3396 pub const ACS_TIMER: DWORD = 0x0008;
3397 pub const ACM_OPENA: UINT = WM_USER + 100;
3398 pub const ACM_OPENW: UINT = WM_USER + 103;
3399 pub const ACM_PLAY: UINT = WM_USER + 101;
3400 pub const ACM_STOP: UINT = WM_USER + 102;
3401 pub const ACM_ISPLAYING: UINT = WM_USER + 104;
3402 pub const ACN_START: WPARAM = 1;
3403 pub const ACN_STOP: WPARAM = 2;
3404 pub const MONTHCAL_CLASS: &'static str = "SysMonthCal32";
3405 pub type MONTHDAYSTATE = DWORD;
3406 pub type LPMONTHDAYSTATE = *mut DWORD;
3407 pub const MCM_FIRST: UINT = 0x1000;
3408 pub const MCM_GETCURSEL: UINT = MCM_FIRST + 1;
3409 pub const MCM_SETCURSEL: UINT = MCM_FIRST + 2;
3410 pub const MCM_GETMAXSELCOUNT: UINT = MCM_FIRST + 3;
3411 pub const MCM_SETMAXSELCOUNT: UINT = MCM_FIRST + 4;
3412 pub const MCM_GETSELRANGE: UINT = MCM_FIRST + 5;
3413 pub const MCM_SETSELRANGE: UINT = MCM_FIRST + 6;
3414 pub const MCM_GETMONTHRANGE: UINT = MCM_FIRST + 7;
3415 pub const MCM_SETDAYSTATE: UINT = MCM_FIRST + 8;
3416 pub const MCM_GETMINREQRECT: UINT = MCM_FIRST + 9;
3417 pub const MCM_SETCOLOR: UINT = MCM_FIRST + 10;
3418 pub const MCM_GETCOLOR: UINT = MCM_FIRST + 11;
3419 pub const MCSC_BACKGROUND: WPARAM = 0;
3420 pub const MCSC_TEXT: WPARAM = 1;
3421 pub const MCSC_TITLEBK: WPARAM = 2;
3422 pub const MCSC_TITLETEXT: WPARAM = 3;
3423 pub const MCSC_MONTHBK: WPARAM = 4;
3424 pub const MCSC_TRAILINGTEXT: WPARAM = 5;
3425 pub const MCM_SETTODAY: UINT = MCM_FIRST + 12;
3426 pub const MCM_GETTODAY: UINT = MCM_FIRST + 13;
3427 pub const MCM_HITTEST: UINT = MCM_FIRST + 14;
3428 STRUCT!{struct MCHITTESTINFO {
3429     cbSize: UINT,
3430     pt: POINT,
3431     uHit: UINT,
3432     st: SYSTEMTIME,
3433     rc: RECT,
3434     iOffset: c_int,
3435     iRow: c_int,
3436     iCol: c_int,
3437 }}
3438 pub type PMCHITTESTINFO = *mut MCHITTESTINFO;
3439 pub const MCHT_TITLE: UINT = 0x00010000;
3440 pub const MCHT_CALENDAR: UINT = 0x00020000;
3441 pub const MCHT_TODAYLINK: UINT = 0x00030000;
3442 pub const MCHT_CALENDARCONTROL: UINT = 0x00100000;
3443 pub const MCHT_NEXT: UINT = 0x01000000;
3444 pub const MCHT_PREV: UINT = 0x02000000;
3445 pub const MCHT_NOWHERE: UINT = 0x00000000;
3446 pub const MCHT_TITLEBK: UINT = MCHT_TITLE;
3447 pub const MCHT_TITLEMONTH: UINT = MCHT_TITLE | 0x0001;
3448 pub const MCHT_TITLEYEAR: UINT = MCHT_TITLE | 0x0002;
3449 pub const MCHT_TITLEBTNNEXT: UINT = MCHT_TITLE | MCHT_NEXT | 0x0003;
3450 pub const MCHT_TITLEBTNPREV: UINT = MCHT_TITLE | MCHT_PREV | 0x0003;
3451 pub const MCHT_CALENDARBK: UINT = MCHT_CALENDAR;
3452 pub const MCHT_CALENDARDATE: UINT = MCHT_CALENDAR | 0x0001;
3453 pub const MCHT_CALENDARDATENEXT: UINT = MCHT_CALENDARDATE | MCHT_NEXT;
3454 pub const MCHT_CALENDARDATEPREV: UINT = MCHT_CALENDARDATE | MCHT_PREV;
3455 pub const MCHT_CALENDARDAY: UINT = MCHT_CALENDAR | 0x0002;
3456 pub const MCHT_CALENDARWEEKNUM: UINT = MCHT_CALENDAR | 0x0003;
3457 pub const MCHT_CALENDARDATEMIN: UINT = MCHT_CALENDAR | 0x0004;
3458 pub const MCHT_CALENDARDATEMAX: UINT = MCHT_CALENDAR | 0x0005;
3459 pub const MCM_SETFIRSTDAYOFWEEK: UINT = MCM_FIRST + 15;
3460 pub const MCM_GETFIRSTDAYOFWEEK: UINT = MCM_FIRST + 16;
3461 pub const MCM_GETRANGE: UINT = MCM_FIRST + 17;
3462 pub const MCM_SETRANGE: UINT = MCM_FIRST + 18;
3463 pub const MCM_GETMONTHDELTA: UINT = MCM_FIRST + 19;
3464 pub const MCM_SETMONTHDELTA: UINT = MCM_FIRST + 20;
3465 pub const MCM_GETMAXTODAYWIDTH: UINT = MCM_FIRST + 21;
3466 pub const MCM_SETUNICODEFORMAT: UINT = CCM_SETUNICODEFORMAT;
3467 pub const MCM_GETUNICODEFORMAT: UINT = CCM_GETUNICODEFORMAT;
3468 pub const MCMV_MONTH: DWORD = 0;
3469 pub const MCMV_YEAR: DWORD = 1;
3470 pub const MCMV_DECADE: DWORD = 2;
3471 pub const MCMV_CENTURY: DWORD = 3;
3472 pub const MCMV_MAX: DWORD = MCMV_CENTURY;
3473 pub const MCM_GETCURRENTVIEW: UINT = MCM_FIRST + 22;
3474 pub const MCM_GETCALENDARCOUNT: UINT = MCM_FIRST + 23;
3475 pub const MCGIP_CALENDARCONTROL: DWORD = 0;
3476 pub const MCGIP_NEXT: DWORD = 1;
3477 pub const MCGIP_PREV: DWORD = 2;
3478 pub const MCGIP_FOOTER: DWORD = 3;
3479 pub const MCGIP_CALENDAR: DWORD = 4;
3480 pub const MCGIP_CALENDARHEADER: DWORD = 5;
3481 pub const MCGIP_CALENDARBODY: DWORD = 6;
3482 pub const MCGIP_CALENDARROW: DWORD = 7;
3483 pub const MCGIP_CALENDARCELL: DWORD = 8;
3484 pub const MCGIF_DATE: DWORD = 0x00000001;
3485 pub const MCGIF_RECT: DWORD = 0x00000002;
3486 pub const MCGIF_NAME: DWORD = 0x00000004;
3487 STRUCT!{struct MCGRIDINFO {
3488     cbSize: UINT,
3489     dwPart: DWORD,
3490     dwFlags: DWORD,
3491     iCalendar: c_int,
3492     iRow: c_int,
3493     iCol: c_int,
3494     bSelected: BOOL,
3495     stStart: SYSTEMTIME,
3496     stEnd: SYSTEMTIME,
3497     rc: RECT,
3498     pszName: PWSTR,
3499     cchName: size_t,
3500 }}
3501 pub type PMCGRIDINFO = *mut MCGRIDINFO;
3502 pub const MCM_GETCALENDARGRIDINFO: UINT = MCM_FIRST + 24;
3503 pub const MCM_GETCALID: UINT = MCM_FIRST + 27;
3504 pub const MCM_SETCALID: UINT = MCM_FIRST + 28;
3505 pub const MCM_SIZERECTTOMIN: UINT = MCM_FIRST + 29;
3506 pub const MCM_SETCALENDARBORDER: UINT = MCM_FIRST + 30;
3507 pub const MCM_GETCALENDARBORDER: UINT = MCM_FIRST + 31;
3508 pub const MCM_SETCURRENTVIEW: UINT = MCM_FIRST + 32;
3509 STRUCT!{struct NMSELCHANGE {
3510     nmhdr: NMHDR,
3511     stSelStart: SYSTEMTIME,
3512     stSelEnd: SYSTEMTIME,
3513 }}
3514 pub type LPNMSELCHANGE = *mut NMSELCHANGE;
3515 pub const MCN_SELCHANGE: UINT = MCN_FIRST - 3;
3516 STRUCT!{struct NMDAYSTATE {
3517     nmhdr: NMHDR,
3518     stStart: SYSTEMTIME,
3519     cDayState: c_int,
3520     prgDayState: LPMONTHDAYSTATE,
3521 }}
3522 pub type LPNMDAYSTATE = *mut NMDAYSTATE;
3523 pub const MCN_GETDAYSTATE: UINT = MCN_FIRST - 1;
3524 pub type NMSELECT = NMSELCHANGE;
3525 pub type LPNMSELECT = *mut NMSELCHANGE;
3526 pub const MCN_SELECT: UINT = MCN_FIRST;
3527 STRUCT!{struct NMVIEWCHANGE {
3528     nmhdr: NMHDR,
3529     dwOldView: DWORD,
3530     dwNewView: DWORD,
3531 }}
3532 pub type LPNMVIEWCHANGE = *mut NMVIEWCHANGE;
3533 pub const MCN_VIEWCHANGE: UINT = MCN_FIRST - 4;
3534 pub const MCS_DAYSTATE: DWORD = 0x0001;
3535 pub const MCS_MULTISELECT: DWORD = 0x0002;
3536 pub const MCS_WEEKNUMBERS: DWORD = 0x0004;
3537 pub const MCS_NOTODAYCIRCLE: DWORD = 0x0008;
3538 pub const MCS_NOTODAY: DWORD = 0x0010;
3539 pub const MCS_NOTRAILINGDATES: DWORD = 0x0040;
3540 pub const MCS_SHORTDAYSOFWEEK: DWORD = 0x0080;
3541 pub const MCS_NOSELCHANGEONNAV: DWORD = 0x0100;
3542 pub const GMR_VISIBLE: DWORD = 0;
3543 pub const GMR_DAYSTATE: DWORD = 1;
3544 pub const DATETIMEPICK_CLASS: &'static str = "SysDateTimePick32";
3545 STRUCT!{struct DATETIMEPICKERINFO {
3546     cbSize: UINT,
3547     rcCheck: RECT,
3548     stateCheck: DWORD,
3549     rcButton: RECT,
3550     stateButton: DWORD,
3551     hwndEdit: HWND,
3552     hwndUD: HWND,
3553     hwndDropDown: HWND,
3554 }}
3555 pub type LPDATETIMEPICKERINFO = *mut DATETIMEPICKERINFO;
3556 pub const DTM_FIRST: UINT = 0x1000;
3557 pub const DTM_GETSYSTEMTIME: UINT = DTM_FIRST + 1;
3558 pub const DTM_SETSYSTEMTIME: UINT = DTM_FIRST + 2;
3559 pub const DTM_GETRANGE: UINT = DTM_FIRST + 3;
3560 pub const DTM_SETRANGE: UINT = DTM_FIRST + 4;
3561 pub const DTM_SETFORMATA: UINT = DTM_FIRST + 5;
3562 pub const DTM_SETFORMATW: UINT = DTM_FIRST + 50;
3563 pub const DTM_SETMCCOLOR: UINT = DTM_FIRST + 6;
3564 pub const DTM_GETMCCOLOR: UINT = DTM_FIRST + 7;
3565 pub const DTM_GETMONTHCAL: UINT = DTM_FIRST + 8;
3566 pub const DTM_SETMCFONT: UINT = DTM_FIRST + 9;
3567 pub const DTM_GETMCFONT: UINT = DTM_FIRST + 10;
3568 pub const DTM_SETMCSTYLE: UINT = DTM_FIRST + 11;
3569 pub const DTM_GETMCSTYLE: UINT = DTM_FIRST + 12;
3570 pub const DTM_CLOSEMONTHCAL: UINT = DTM_FIRST + 13;
3571 pub const DTM_GETDATETIMEPICKERINFO: UINT = DTM_FIRST + 14;
3572 pub const DTM_GETIDEALSIZE: UINT = DTM_FIRST + 15;
3573 pub const DTS_UPDOWN: DWORD = 0x0001;
3574 pub const DTS_SHOWNONE: DWORD = 0x0002;
3575 pub const DTS_SHORTDATEFORMAT: DWORD = 0x0000;
3576 pub const DTS_LONGDATEFORMAT: DWORD = 0x0004;
3577 pub const DTS_SHORTDATECENTURYFORMAT: DWORD = 0x000C;
3578 pub const DTS_TIMEFORMAT: DWORD = 0x0009;
3579 pub const DTS_APPCANPARSE: DWORD = 0x0010;
3580 pub const DTS_RIGHTALIGN: DWORD = 0x0020;
3581 pub const DTN_DATETIMECHANGE: UINT = DTN_FIRST2 - 6;
3582 STRUCT!{struct NMDATETIMECHANGE {
3583     nmhdr: NMHDR,
3584     dwFlags: DWORD,
3585     st: SYSTEMTIME,
3586 }}
3587 pub type LPNMDATETIMECHANGE = *mut NMDATETIMECHANGE;
3588 pub const DTN_USERSTRINGA: UINT = DTN_FIRST2 - 5;
3589 pub const DTN_USERSTRINGW: UINT = DTN_FIRST - 5;
3590 STRUCT!{struct NMDATETIMESTRINGA {
3591     nmhdr: NMHDR,
3592     pszUserString: LPCSTR,
3593     st: SYSTEMTIME,
3594     dwFlags: DWORD,
3595 }}
3596 pub type LPNMDATETIMESTRINGA = *mut NMDATETIMESTRINGA;
3597 STRUCT!{struct NMDATETIMESTRINGW {
3598     nmhdr: NMHDR,
3599     pszUserString: LPCWSTR,
3600     st: SYSTEMTIME,
3601     dwFlags: DWORD,
3602 }}
3603 pub type LPNMDATETIMESTRINGW = *mut NMDATETIMESTRINGW;
3604 pub const DTN_WMKEYDOWNA: UINT = DTN_FIRST2 - 4;
3605 pub const DTN_WMKEYDOWNW: UINT = DTN_FIRST - 4;
3606 STRUCT!{struct NMDATETIMEWMKEYDOWNA {
3607     nmhdr: NMHDR,
3608     nVirtKey: c_int,
3609     pszFormat: LPCSTR,
3610     st: SYSTEMTIME,
3611 }}
3612 pub type LPNMDATETIMEWMKEYDOWNA = *mut NMDATETIMEWMKEYDOWNA;
3613 STRUCT!{struct NMDATETIMEWMKEYDOWNW {
3614     nmhdr: NMHDR,
3615     nVirtKey: c_int,
3616     pszFormat: LPCWSTR,
3617     st: SYSTEMTIME,
3618 }}
3619 pub type LPNMDATETIMEWMKEYDOWNW = *mut NMDATETIMEWMKEYDOWNW;
3620 pub const DTN_FORMATA: UINT = DTN_FIRST2 - 3;
3621 pub const DTN_FORMATW: UINT = DTN_FIRST - 3;
3622 STRUCT!{struct NMDATETIMEFORMATA {
3623     nmhdr: NMHDR,
3624     pszFormat: LPCSTR,
3625     st: SYSTEMTIME,
3626     pszDisplay: LPCSTR,
3627     szDisplay: [CHAR; 64],
3628 }}
3629 pub type LPNMDATETIMEFORMATA = *mut NMDATETIMEFORMATA;
3630 STRUCT!{struct NMDATETIMEFORMATW {
3631     nmhdr: NMHDR,
3632     pszFormat: LPCWSTR,
3633     st: SYSTEMTIME,
3634     pszDisplay: LPCWSTR,
3635     szDisplay: [WCHAR; 64],
3636 }}
3637 pub type LPNMDATETIMEFORMATW = *mut NMDATETIMEFORMATW;
3638 pub const DTN_FORMATQUERYA: UINT = DTN_FIRST2 - 2;
3639 pub const DTN_FORMATQUERYW: UINT = DTN_FIRST - 2;
3640 STRUCT!{struct NMDATETIMEFORMATQUERYA {
3641     nmhdr: NMHDR,
3642     pszFormat: LPCSTR,
3643     szMax: SIZE,
3644 }}
3645 pub type LPNMDATETIMEFORMATQUERYA = *mut NMDATETIMEFORMATQUERYA;
3646 STRUCT!{struct NMDATETIMEFORMATQUERYW {
3647     nmhdr: NMHDR,
3648     pszFormat: LPCWSTR,
3649     szMax: SIZE,
3650 }}
3651 pub type LPNMDATETIMEFORMATQUERYW = *mut NMDATETIMEFORMATQUERYW;
3652 pub const DTN_DROPDOWN: UINT = DTN_FIRST2 - 1;
3653 pub const DTN_CLOSEUP: UINT = DTN_FIRST2;
3654 pub const GDTR_MIN: WPARAM = 0x0001;
3655 pub const GDTR_MAX: WPARAM = 0x0002;
3656 pub const GDT_ERROR: LRESULT = -1;
3657 pub const GDT_VALID: LRESULT = 0;
3658 pub const GDT_NONE: LRESULT = 1;
3659 pub const IPM_CLEARADDRESS: UINT = WM_USER + 100;
3660 pub const IPM_SETADDRESS: UINT = WM_USER + 101;
3661 pub const IPM_GETADDRESS: UINT = WM_USER + 102;
3662 pub const IPM_SETRANGE: UINT = WM_USER + 103;
3663 pub const IPM_SETFOCUS: UINT = WM_USER + 104;
3664 pub const IPM_ISBLANK: UINT = WM_USER + 105;
3665 pub const WC_IPADDRESS: &'static str = "SysIPAddress32";
3666 pub const IPN_FIELDCHANGED: UINT = IPN_FIRST - 0;
3667 STRUCT!{struct NMIPADDRESS {
3668     hdr: NMHDR,
3669     iField: c_int,
3670     iValue: c_int,
3671 }}
3672 pub type LPNMIPADDRESS = *mut NMIPADDRESS;
3673 #[inline]
MAKEIPRANGE(low: BYTE, high: BYTE) -> LPARAM3674 pub fn MAKEIPRANGE(low: BYTE, high: BYTE) -> LPARAM {
3675     (((high as WORD) << 8) + low as WORD) as LPARAM
3676 }
3677 #[inline]
MAKEIPADDRESS(b1: DWORD, b2: DWORD, b3: DWORD, b4: DWORD) -> LPARAM3678 pub fn MAKEIPADDRESS(b1: DWORD, b2: DWORD, b3: DWORD, b4: DWORD) -> LPARAM {
3679     ((b1 << 24) + (b2 << 16) + (b3 << 8) + b4) as LPARAM
3680 }
3681 #[inline]
FIRST_IPADDRESS(x: LPARAM) -> BYTE3682 pub fn FIRST_IPADDRESS(x: LPARAM) -> BYTE {
3683     ((x >> 24) & 0xff) as BYTE
3684 }
3685 #[inline]
SECOND_IPADDRESS(x: LPARAM) -> BYTE3686 pub fn SECOND_IPADDRESS(x: LPARAM) -> BYTE {
3687     ((x >> 16) & 0xff) as BYTE
3688 }
3689 #[inline]
THIRD_IPADDRESS(x: LPARAM) -> BYTE3690 pub fn THIRD_IPADDRESS(x: LPARAM) -> BYTE {
3691     ((x >> 8) & 0xff) as BYTE
3692 }
3693 #[inline]
FOURTH_IPADDRESS(x: LPARAM) -> BYTE3694 pub fn FOURTH_IPADDRESS(x: LPARAM) -> BYTE {
3695     (x & 0xff) as BYTE
3696 }
3697 pub const WC_PAGESCROLLER: &'static str = "SysPager";
3698 pub const PGS_VERT: DWORD = 0x00000000;
3699 pub const PGS_HORZ: DWORD = 0x00000001;
3700 pub const PGS_AUTOSCROLL: DWORD = 0x00000002;
3701 pub const PGS_DRAGNDROP: DWORD = 0x00000004;
3702 pub const PGF_INVISIBLE: DWORD = 0;
3703 pub const PGF_NORMAL: DWORD = 1;
3704 pub const PGF_GRAYED: DWORD = 2;
3705 pub const PGF_DEPRESSED: DWORD = 4;
3706 pub const PGF_HOT: DWORD = 8;
3707 pub const PGB_TOPORLEFT: c_int = 0;
3708 pub const PGB_BOTTOMORRIGHT: c_int = 1;
3709 pub const PGM_SETCHILD: UINT = PGM_FIRST + 1;
3710 pub const PGM_RECALCSIZE: UINT = PGM_FIRST + 2;
3711 pub const PGM_FORWARDMOUSE: UINT = PGM_FIRST + 3;
3712 pub const PGM_SETBKCOLOR: UINT = PGM_FIRST + 4;
3713 pub const PGM_GETBKCOLOR: UINT = PGM_FIRST + 5;
3714 pub const PGM_SETBORDER: UINT = PGM_FIRST + 6;
3715 pub const PGM_GETBORDER: UINT = PGM_FIRST + 7;
3716 pub const PGM_SETPOS: UINT = PGM_FIRST + 8;
3717 pub const PGM_GETPOS: UINT = PGM_FIRST + 9;
3718 pub const PGM_SETBUTTONSIZE: UINT = PGM_FIRST + 10;
3719 pub const PGM_GETBUTTONSIZE: UINT = PGM_FIRST + 11;
3720 pub const PGM_GETBUTTONSTATE: UINT = PGM_FIRST + 12;
3721 pub const PGM_GETDROPTARGET: UINT = CCM_GETDROPTARGET;
3722 pub const PGM_SETSCROLLINFO: UINT = PGM_FIRST + 13;
3723 pub const PGN_SCROLL: UINT = PGN_FIRST - 1;
3724 pub const PGF_SCROLLUP: c_int = 1;
3725 pub const PGF_SCROLLDOWN: c_int = 2;
3726 pub const PGF_SCROLLLEFT: c_int = 4;
3727 pub const PGF_SCROLLRIGHT: c_int = 8;
3728 pub const PGK_SHIFT: BOOL = 1;
3729 pub const PGK_CONTROL: BOOL = 2;
3730 pub const PGK_MENU: BOOL = 4;
3731 STRUCT!{#[repr(packed)] struct NMPGSCROLL {
3732     hdr: NMHDR,
3733     fwKeys: WORD,
3734     rcParent: RECT,
3735     iDir: c_int,
3736     iXpos: c_int,
3737     iYpos: c_int,
3738     iScroll: c_int,
3739 }}
3740 pub type LPNMPGSCROLL = *mut NMPGSCROLL;
3741 pub const PGN_CALCSIZE: UINT = PGN_FIRST - 2;
3742 pub const PGF_CALCWIDTH: DWORD = 1;
3743 pub const PGF_CALCHEIGHT: DWORD = 2;
3744 STRUCT!{struct NMPGCALCSIZE {
3745     hdr: NMHDR,
3746     dwFlag: DWORD,
3747     iWidth: c_int,
3748     iHeight: c_int,
3749 }}
3750 pub type LPNMPGCALCSIZE = *mut NMPGCALCSIZE;
3751 pub const PGN_HOTITEMCHANGE: UINT = PGN_FIRST - 3;
3752 STRUCT!{struct NMPGHOTITEM {
3753     hdr: NMHDR,
3754     idOld: c_int,
3755     idNew: c_int,
3756     dwFlags: DWORD,
3757 }}
3758 pub type LPNMPGHOTITEM = *mut NMPGHOTITEM;
3759 pub const WC_NATIVEFONTCTL: &'static str = "NativeFontCtl";
3760 pub const NFS_EDIT: DWORD = 0x0001;
3761 pub const NFS_STATIC: DWORD = 0x0002;
3762 pub const NFS_LISTCOMBO: DWORD = 0x0004;
3763 pub const NFS_BUTTON: DWORD = 0x0008;
3764 pub const NFS_ALL: DWORD = 0x0010;
3765 pub const NFS_USEFONTASSOC: DWORD = 0x0020;
3766 pub const WC_BUTTONA: &'static str = "Button";
3767 pub const BUTTON_IMAGELIST_ALIGN_LEFT: UINT = 0;
3768 pub const BUTTON_IMAGELIST_ALIGN_RIGHT: UINT = 1;
3769 pub const BUTTON_IMAGELIST_ALIGN_TOP: UINT = 2;
3770 pub const BUTTON_IMAGELIST_ALIGN_BOTTOM: UINT = 3;
3771 pub const BUTTON_IMAGELIST_ALIGN_CENTER: UINT = 4;
3772 STRUCT!{struct BUTTON_IMAGELIST {
3773     himl: HIMAGELIST,
3774     margin: RECT,
3775     uAlign: UINT,
3776 }}
3777 pub type PBUTTON_IMAGELIST = *mut BUTTON_IMAGELIST;
3778 pub const BCM_GETIDEALSIZE: UINT = BCM_FIRST + 0x0001;
3779 pub const BCM_SETIMAGELIST: UINT = BCM_FIRST + 0x0002;
3780 pub const BCM_GETIMAGELIST: UINT = BCM_FIRST + 0x0003;
3781 pub const BCM_SETTEXTMARGIN: UINT = BCM_FIRST + 0x0004;
3782 pub const BCM_GETTEXTMARGIN: UINT = BCM_FIRST + 0x0005;
3783 STRUCT!{struct NMBCHOTITEM {
3784     hdr: NMHDR,
3785     dwFlags: DWORD,
3786 }}
3787 pub type LPNMBCHOTITEM = *mut NMBCHOTITEM;
3788 pub const BCN_HOTITEMCHANGE: UINT = BCN_FIRST + 0x0001;
3789 pub const BS_SPLITBUTTON: UINT = 0x0000000C;
3790 pub const BS_DEFSPLITBUTTON: UINT = 0x0000000D;
3791 pub const BS_COMMANDLINK: UINT = 0x0000000E;
3792 pub const BS_DEFCOMMANDLINK: UINT = 0x0000000F;
3793 pub const BCSIF_GLYPH: UINT = 0x0001;
3794 pub const BCSIF_IMAGE: UINT = 0x0002;
3795 pub const BCSIF_STYLE: UINT = 0x0004;
3796 pub const BCSIF_SIZE: UINT = 0x0008;
3797 pub const BCSS_NOSPLIT: UINT = 0x0001;
3798 pub const BCSS_STRETCH: UINT = 0x0002;
3799 pub const BCSS_ALIGNLEFT: UINT = 0x0004;
3800 pub const BCSS_IMAGE: UINT = 0x0008;
3801 STRUCT!{struct BUTTON_SPLITINFO {
3802     mask: UINT,
3803     himlGlyph: HIMAGELIST,
3804     uSplitStyle: UINT,
3805     size: SIZE,
3806 }}
3807 pub type PBUTTON_SPLITINFO = *mut BUTTON_SPLITINFO;
3808 pub const BCM_SETDROPDOWNSTATE: UINT = BCM_FIRST + 0x0006;
3809 pub const BCM_SETSPLITINFO: UINT = BCM_FIRST + 0x0007;
3810 pub const BCM_GETSPLITINFO: UINT = BCM_FIRST + 0x0008;
3811 pub const BCM_SETNOTE: UINT = BCM_FIRST + 0x0009;
3812 pub const BCM_GETNOTE: UINT = BCM_FIRST + 0x000A;
3813 pub const BCM_GETNOTELENGTH: UINT = BCM_FIRST + 0x000B;
3814 pub const BCM_SETSHIELD: UINT = BCM_FIRST + 0x000C;
3815 pub const BCCL_NOGLYPH: HIMAGELIST = -1isize as HIMAGELIST;
3816 STRUCT!{struct NMBCDROPDOWN {
3817     hdr: NMHDR,
3818     rcButton: RECT,
3819 }}
3820 pub type LPNMBCDROPDOWN = *mut NMBCDROPDOWN;
3821 pub const BCN_DROPDOWN: UINT = BCN_FIRST + 0x0002;
3822 pub const WC_STATIC: &'static str = "Static";
3823 pub const WC_EDIT: &'static str = "Edit";
3824 pub const EM_SETCUEBANNER: UINT = ECM_FIRST + 1;
3825 pub const EM_GETCUEBANNER: UINT = ECM_FIRST + 2;
3826 STRUCT!{struct EDITBALLOONTIP {
3827     cbStruct: DWORD,
3828     pszTitle: LPCWSTR,
3829     pszText: LPCWSTR,
3830     ttiIcon: INT,
3831 }}
3832 pub type PEDITBALLOONTIP = *mut EDITBALLOONTIP;
3833 pub const EM_SHOWBALLOONTIP: UINT = ECM_FIRST + 3;
3834 pub const EM_HIDEBALLOONTIP: UINT = ECM_FIRST + 4;
3835 pub const EM_SETHILITE: UINT = ECM_FIRST + 5;
3836 pub const EM_GETHILITE: UINT = ECM_FIRST + 6;
3837 pub const EM_NOSETFOCUS: UINT = ECM_FIRST + 7;
3838 pub const EM_TAKEFOCUS: UINT = ECM_FIRST + 8;
3839 pub const WC_LISTBOX: &'static str = "ListBox";
3840 pub const WC_COMBOBOX: &'static str = "ComboBox";
3841 pub const CB_SETMINVISIBLE: UINT = CBM_FIRST + 1;
3842 pub const CB_GETMINVISIBLE: UINT = CBM_FIRST + 2;
3843 pub const CB_SETCUEBANNER: UINT = CBM_FIRST + 3;
3844 pub const CB_GETCUEBANNER: UINT = CBM_FIRST + 4;
3845 pub const WC_SCROLLBAR: &'static str = "ScrollBar";
3846 FN!{stdcall PFTASKDIALOGCALLBACK(
3847     hwnd: HWND,
3848     msg: UINT,
3849     wParam: WPARAM,
3850     lParam: LPARAM,
3851     lpRefData: LONG_PTR,
3852 ) -> HRESULT}
3853 ENUM!{enum TASKDIALOG_FLAGS {
3854     TDF_ENABLE_HYPERLINKS = 0x0001,
3855     TDF_USE_HICON_MAIN = 0x0002,
3856     TDF_USE_HICON_FOOTER = 0x0004,
3857     TDF_ALLOW_DIALOG_CANCELLATION = 0x0008,
3858     TDF_USE_COMMAND_LINKS = 0x0010,
3859     TDF_USE_COMMAND_LINKS_NO_ICON = 0x0020,
3860     TDF_EXPAND_FOOTER_AREA = 0x0040,
3861     TDF_EXPANDED_BY_DEFAULT = 0x0080,
3862     TDF_VERIFICATION_FLAG_CHECKED = 0x0100,
3863     TDF_SHOW_PROGRESS_BAR = 0x0200,
3864     TDF_SHOW_MARQUEE_PROGRESS_BAR = 0x0400,
3865     TDF_CALLBACK_TIMER = 0x0800,
3866     TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,
3867     TDF_RTL_LAYOUT = 0x2000,
3868     TDF_NO_DEFAULT_RADIO_BUTTON = 0x4000,
3869     TDF_CAN_BE_MINIMIZED = 0x8000,
3870     TDF_NO_SET_FOREGROUND = 0x00010000,
3871     TDF_SIZE_TO_CONTENT = 0x01000000,
3872 }}
3873 ENUM!{enum TASKDIALOG_MESSAGES {
3874     TDM_NAVIGATE_PAGE = WM_USER + 101,
3875     TDM_CLICK_BUTTON = WM_USER + 102,
3876     TDM_SET_MARQUEE_PROGRESS_BAR = WM_USER + 103,
3877     TDM_SET_PROGRESS_BAR_STATE = WM_USER + 104,
3878     TDM_SET_PROGRESS_BAR_RANGE = WM_USER + 105,
3879     TDM_SET_PROGRESS_BAR_POS = WM_USER + 106,
3880     TDM_SET_PROGRESS_BAR_MARQUEE = WM_USER + 107,
3881     TDM_SET_ELEMENT_TEXT = WM_USER + 108,
3882     TDM_CLICK_RADIO_BUTTON = WM_USER + 110,
3883     TDM_ENABLE_BUTTON = WM_USER + 111,
3884     TDM_ENABLE_RADIO_BUTTON = WM_USER + 112,
3885     TDM_CLICK_VERIFICATION = WM_USER + 113,
3886     TDM_UPDATE_ELEMENT_TEXT = WM_USER + 114,
3887     TDM_SET_BUTTON_ELEVATION_REQUIRED_STATE = WM_USER + 115,
3888     TDM_UPDATE_ICON = WM_USER + 116,
3889 }}
3890 ENUM!{enum TASKDIALOG_NOTIFICATIONS {
3891     TDN_CREATED = 0,
3892     TDN_NAVIGATED = 1,
3893     TDN_BUTTON_CLICKED = 2,
3894     TDN_HYPERLINK_CLICKED = 3,
3895     TDN_TIMER = 4,
3896     TDN_DESTROYED = 5,
3897     TDN_RADIO_BUTTON_CLICKED = 6,
3898     TDN_DIALOG_CONSTRUCTED = 7,
3899     TDN_VERIFICATION_CLICKED = 8,
3900     TDN_HELP = 9,
3901     TDN_EXPANDO_BUTTON_CLICKED = 10,
3902 }}
3903 STRUCT!{#[repr(packed)] struct TASKDIALOG_BUTTON {
3904     nButtonID: c_int,
3905     pszButtonText: PCWSTR,
3906 }}
3907 ENUM!{enum TASKDIALOG_ELEMENTS {
3908     TDE_CONTENT,
3909     TDE_EXPANDED_INFORMATION,
3910     TDE_FOOTER,
3911     TDE_MAIN_INSTRUCTION,
3912 }}
3913 ENUM!{enum TASKDIALOG_ICON_ELEMENTS {
3914     TDIE_ICON_MAIN,
3915     TDIE_ICON_FOOTER,
3916 }}
3917 pub const TD_WARNING_ICON: LPWSTR = MAKEINTRESOURCE!(-1i16);
3918 pub const TD_ERROR_ICON: LPWSTR = MAKEINTRESOURCE!(-2i16);
3919 pub const TD_INFORMATION_ICON: LPWSTR = MAKEINTRESOURCE!(-3i16);
3920 pub const TD_SHIELD_ICON: LPWSTR = MAKEINTRESOURCE!(-4i16);
3921 ENUM!{enum TASKDIALOG_COMMON_BUTTON_FLAGS {
3922     TDCBF_OK_BUTTON = 0x0001,
3923     TDCBF_YES_BUTTON = 0x0002,
3924     TDCBF_NO_BUTTON = 0x0004,
3925     TDCBF_CANCEL_BUTTON = 0x0008,
3926     TDCBF_RETRY_BUTTON = 0x0010,
3927     TDCBF_CLOSE_BUTTON = 0x0020,
3928 }}
3929 UNION!{#[repr(packed)] union TASKDIALOGCONFIG_u1 {
3930     [usize; 1],
3931     hMainIcon hMainIcon_mut: HICON,
3932     pszMainIcon pszMainIcon_mut: PCWSTR,
3933 }}
3934 UNION!{#[repr(packed)] union TASKDIALOGCONFIG_u2 {
3935     [usize; 1],
3936     hFooterIcon hFooterIcon_mut: HICON,
3937     pszFooterIcon pszFooterIcon_mut: PCWSTR,
3938 }}
3939 STRUCT!{#[repr(packed)] struct TASKDIALOGCONFIG {
3940     cbSize: UINT,
3941     hwndParent: HWND,
3942     hInstance: HINSTANCE,
3943     dwFlags: TASKDIALOG_FLAGS,
3944     dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS,
3945     pszWindowTitle: PCWSTR,
3946     u1: TASKDIALOGCONFIG_u1,
3947     pszMainInstruction: PCWSTR,
3948     pszContent: PCWSTR,
3949     cButtons: UINT,
3950     pButtons: *const TASKDIALOG_BUTTON,
3951     nDefaultButton: c_int,
3952     cRadioButtons: UINT,
3953     pRadioButtons: *const TASKDIALOG_BUTTON,
3954     nDefaultRadioButton: c_int,
3955     pszVerificationText: PCWSTR,
3956     pszExpandedInformation: PCWSTR,
3957     pszExpandedControlText: PCWSTR,
3958     pszCollapsedControlText: PCWSTR,
3959     u2: TASKDIALOGCONFIG_u2,
3960     pszFooter: PCWSTR,
3961     pfCallback: PFTASKDIALOGCALLBACK,
3962     lpCallbackData: LONG_PTR,
3963     cxWidth: UINT,
3964 }}
3965 extern "system" {
TaskDialogIndirect( pTaskConfig: *const TASKDIALOGCONFIG, pnButton: *mut c_int, pnRadioButton: *mut c_int, pfVerificationFlagChecked: *mut BOOL, ) -> HRESULT3966     pub fn TaskDialogIndirect(
3967         pTaskConfig: *const TASKDIALOGCONFIG,
3968         pnButton: *mut c_int,
3969         pnRadioButton: *mut c_int,
3970         pfVerificationFlagChecked: *mut BOOL,
3971     ) -> HRESULT;
TaskDialog( hwndOwner: HWND, hInstance: HINSTANCE, pszWindowTitle: PCWSTR, pszMainInstruction: PCWSTR, pszContent: PCWSTR, dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS, pszIcon: PCWSTR, pnButton: *mut c_int, ) -> HRESULT3972     pub fn TaskDialog(
3973         hwndOwner: HWND,
3974         hInstance: HINSTANCE,
3975         pszWindowTitle: PCWSTR,
3976         pszMainInstruction: PCWSTR,
3977         pszContent: PCWSTR,
3978         dwCommonButtons: TASKDIALOG_COMMON_BUTTON_FLAGS,
3979         pszIcon: PCWSTR,
3980         pnButton: *mut c_int,
3981     ) -> HRESULT;
InitMUILanguage( uiLang: LANGID, )3982     pub fn InitMUILanguage(
3983         uiLang: LANGID,
3984     );
GetMUILanguage() -> LANGID3985     pub fn GetMUILanguage() -> LANGID;
_TrackMouseEvent( lpEventTrack: LPTRACKMOUSEEVENT, ) -> BOOL3986     pub fn _TrackMouseEvent(
3987         lpEventTrack: LPTRACKMOUSEEVENT,
3988     ) -> BOOL;
3989 }
3990 pub const WSB_PROP_CYVSCROLL: UINT = 0x00000001;
3991 pub const WSB_PROP_CXHSCROLL: UINT = 0x00000002;
3992 pub const WSB_PROP_CYHSCROLL: UINT = 0x00000004;
3993 pub const WSB_PROP_CXVSCROLL: UINT = 0x00000008;
3994 pub const WSB_PROP_CXHTHUMB: UINT = 0x00000010;
3995 pub const WSB_PROP_CYVTHUMB: UINT = 0x00000020;
3996 pub const WSB_PROP_VBKGCOLOR: UINT = 0x00000040;
3997 pub const WSB_PROP_HBKGCOLOR: UINT = 0x00000080;
3998 pub const WSB_PROP_VSTYLE: UINT = 0x00000100;
3999 pub const WSB_PROP_HSTYLE: UINT = 0x00000200;
4000 pub const WSB_PROP_WINSTYLE: UINT = 0x00000400;
4001 pub const WSB_PROP_PALETTE: UINT = 0x00000800;
4002 pub const WSB_PROP_MASK: UINT = 0x00000FFF;
4003 pub const FSB_FLAT_MODE: INT_PTR = 2;
4004 pub const FSB_ENCARTA_MODE: INT_PTR = 1;
4005 pub const FSB_REGULAR_MODE: INT_PTR = 0;
4006 extern "system" {
FlatSB_EnableScrollBar( hWnd: HWND, wSBflags: c_int, wArrows: UINT, ) -> BOOL4007     pub fn FlatSB_EnableScrollBar(
4008         hWnd: HWND,
4009         wSBflags: c_int,
4010         wArrows: UINT,
4011     ) -> BOOL;
FlatSB_ShowScrollBar( hWnd: HWND, code: c_int, fShow: BOOL, ) -> BOOL4012     pub fn FlatSB_ShowScrollBar(
4013         hWnd: HWND,
4014         code: c_int,
4015         fShow: BOOL,
4016     ) -> BOOL;
FlatSB_GetScrollRange( hWnd: HWND, code: c_int, lpMinPos: LPINT, lpMaxPos: LPINT, ) -> BOOL4017     pub fn FlatSB_GetScrollRange(
4018         hWnd: HWND,
4019         code: c_int,
4020         lpMinPos: LPINT,
4021         lpMaxPos: LPINT,
4022     ) -> BOOL;
FlatSB_GetScrollInfo( hwnd: HWND, code: c_int, lpsi: LPSCROLLINFO, ) -> BOOL4023     pub fn FlatSB_GetScrollInfo(
4024         hwnd: HWND,
4025         code: c_int,
4026         lpsi: LPSCROLLINFO,
4027     ) -> BOOL;
FlatSB_GetScrollPos( hWnd: HWND, code: c_int, ) -> c_int4028     pub fn FlatSB_GetScrollPos(
4029         hWnd: HWND,
4030         code: c_int,
4031     ) -> c_int;
FlatSB_GetScrollProp(hWnd: HWND, propIndex: c_int, pValue: LPINT, ) -> BOOL4032     pub fn FlatSB_GetScrollProp(hWnd: HWND,
4033         propIndex: c_int,
4034         pValue: LPINT,
4035     ) -> BOOL;
4036     #[cfg(target_arch = "x86_64")]
FlatSB_GetScrollPropPtr( hWnd: HWND, propIndex: c_int, pValue: PINT_PTR, ) -> BOOL4037     pub fn FlatSB_GetScrollPropPtr(
4038         hWnd: HWND,
4039         propIndex: c_int,
4040         pValue: PINT_PTR,
4041     ) -> BOOL;
FlatSB_SetScrollPos( hWnd: HWND, code: c_int, pos: c_int, fRedraw: BOOL, ) -> c_int4042     pub fn FlatSB_SetScrollPos(
4043         hWnd: HWND,
4044         code: c_int,
4045         pos: c_int,
4046         fRedraw: BOOL,
4047     ) -> c_int;
FlatSB_SetScrollInfo( hWnd: HWND, code: c_int, psi: LPSCROLLINFO, fRedraw: BOOL, ) -> c_int4048     pub fn FlatSB_SetScrollInfo(
4049         hWnd: HWND,
4050         code: c_int,
4051         psi: LPSCROLLINFO,
4052         fRedraw: BOOL,
4053     ) -> c_int;
FlatSB_SetScrollRange( hWnd: HWND, code: c_int, min: c_int, max: c_int, fRedraw: BOOL, ) -> c_int4054     pub fn FlatSB_SetScrollRange(
4055         hWnd: HWND,
4056         code: c_int,
4057         min: c_int,
4058         max: c_int,
4059         fRedraw: BOOL,
4060     ) -> c_int;
FlatSB_SetScrollProp( hWnd: HWND, index: UINT, newValue: INT_PTR, fRedraw: BOOL, ) -> BOOL4061     pub fn FlatSB_SetScrollProp(
4062         hWnd: HWND,
4063         index: UINT,
4064         newValue: INT_PTR,
4065         fRedraw: BOOL,
4066     ) -> BOOL;
InitializeFlatSB( hWnd: HWND, ) -> BOOL4067     pub fn InitializeFlatSB(
4068         hWnd: HWND,
4069     ) -> BOOL;
UninitializeFlatSB( hWnd: HWND, ) -> HRESULT4070     pub fn UninitializeFlatSB(
4071         hWnd: HWND,
4072     ) -> HRESULT;
4073 }
4074 FN!{stdcall SUBCLASSPROC(
4075     hWnd: HWND,
4076     uMsg: UINT,
4077     wParam: WPARAM,
4078     lParam: LPARAM,
4079     uIdSubclass: UINT_PTR,
4080     dwRefData: DWORD_PTR,
4081 ) -> LRESULT}
4082 extern "system" {
SetWindowSubclass( hWnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, dwRefData: DWORD_PTR, ) -> BOOL4083     pub fn SetWindowSubclass(
4084         hWnd: HWND,
4085         pfnSubclass: SUBCLASSPROC,
4086         uIdSubclass: UINT_PTR,
4087         dwRefData: DWORD_PTR,
4088     ) -> BOOL;
GetWindowSubclass( hWnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, pdwRefData: *mut DWORD_PTR, ) -> BOOL4089     pub fn GetWindowSubclass(
4090         hWnd: HWND,
4091         pfnSubclass: SUBCLASSPROC,
4092         uIdSubclass: UINT_PTR,
4093         pdwRefData: *mut DWORD_PTR,
4094     ) -> BOOL;
RemoveWindowSubclass( hWnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, ) -> BOOL4095     pub fn RemoveWindowSubclass(
4096         hWnd: HWND,
4097         pfnSubclass: SUBCLASSPROC,
4098         uIdSubclass: UINT_PTR,
4099     ) -> BOOL;
DefSubclassProc( hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM, ) -> LRESULT4100     pub fn DefSubclassProc(
4101         hWnd: HWND,
4102         uMsg: UINT,
4103         wParam: WPARAM,
4104         lParam: LPARAM,
4105     ) -> LRESULT;
4106 }
4107 ENUM!{enum REGCLS {
4108     LIM_SMALL,
4109     LIM_LARGE,
4110 }}
4111 extern "system" {
LoadIconMetric( hinst: HINSTANCE, pszName: PCWSTR, lims: c_int, phico: *mut HICON, ) -> HRESULT4112     pub fn LoadIconMetric(
4113         hinst: HINSTANCE,
4114         pszName: PCWSTR,
4115         lims: c_int,
4116         phico: *mut HICON,
4117     ) -> HRESULT;
LoadIconWithScaleDown( hinst: HINSTANCE, pszName: PCWSTR, cx: c_int, cy: c_int, phico: *mut HICON, ) -> HRESULT4118     pub fn LoadIconWithScaleDown(
4119         hinst: HINSTANCE,
4120         pszName: PCWSTR,
4121         cx: c_int,
4122         cy: c_int,
4123         phico: *mut HICON,
4124     ) -> HRESULT;
DrawShadowText( hdc: HDC, pszText: LPCWSTR, cch: UINT, prc: *mut RECT, dwFlags: DWORD, crText: COLORREF, crShadow: COLORREF, ixOffset: c_int, iyOffset: c_int, ) -> c_int4125     pub fn DrawShadowText(
4126         hdc: HDC,
4127         pszText: LPCWSTR,
4128         cch: UINT,
4129         prc: *mut RECT,
4130         dwFlags: DWORD,
4131         crText: COLORREF,
4132         crShadow: COLORREF,
4133         ixOffset: c_int,
4134         iyOffset: c_int,
4135     ) -> c_int;
4136 }
4137