winapi_ui_automation/um/
commctrl.rs

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