1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW API for MS-Windows 3.12
5  *
6  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7  * Source: $(DRUNTIMESRC core/sys/windows/_commctrl.d)
8  */
9 module nulib.system.win32.commctrl;
10 import nulib.system.win32.w32api;
11 import nulib.system.win32.windef;
12 import nulib.system.win32.winuser;
13 import nulib.system.win32.winbase; // for SYSTEMTIME
14 import nulib.system.win32.objidl;
15 import nulib.system.win32.prsht;
16 pragma(lib, "comctl32");
17 
18 version (ANSI) {} else version = Unicode;
19 
20 enum COMCTL32_VERSION = 6;
21 
22 const TCHAR[] DRAGLISTMSGSTRING = "commctrl_DragListMsg",
23 HOTKEY_CLASS = "msctls_hotkey32",
24 PROGRESS_CLASS = "msctls_progress32",
25 STATUSCLASSNAME = "msctls_statusbar32",
26 TOOLBARCLASSNAME = "ToolbarWindow32",
27 TOOLTIPS_CLASS = "tooltips_class32",
28 TRACKBAR_CLASS = "msctls_trackbar32",
29 UPDOWN_CLASS = "msctls_updown32",
30 ANIMATE_CLASS = "SysAnimate32",
31 DATETIMEPICK_CLASS = "SysDateTimePick32",
32 MONTHCAL_CLASS = "SysMonthCal32",
33 REBARCLASSNAME = "ReBarWindow32",
34 WC_COMBOBOXEX = "ComboBoxEx32",
35 WC_IPADDRESS = "SysIPAddress32",
36 WC_LISTVIEW = "SysListView32",
37 WC_TABCONTROL = "SysTabControl32",
38 WC_TREEVIEW = "SysTreeView32",
39 WC_HEADER = "SysHeader32",
40 WC_PAGESCROLLER = "SysPager",
41 WC_NATIVEFONTCTL = "NativeFontCtl",
42 WC_BUTTON = "Button",
43 WC_STATIC = "Static",
44 WC_EDIT = "Edit",
45 WC_LISTBOX = "ListBox",
46 WC_COMBOBOX = "ComboBox",
47 WC_SCROLLBAR = "ScrollBar",
48 WC_LINKA = "SysLink";
49 
50 enum {
51     LVM_FIRST = 0x1000,
52     TV_FIRST = 0x1100,
53     HDM_FIRST = 0x1200
54 }
55 
56 enum {
57     ACM_OPENA = WM_USER + 100,
58     ACM_PLAY = WM_USER + 101,
59     ACM_STOP = WM_USER + 102,
60     ACM_OPENW = WM_USER + 103,
61     ACM_ISPLAYING = WM_USER + 104
62 }
63 
64 enum {
65     ACN_START = 1,
66     ACN_STOP
67 }
68 
69 enum {
70     CBEIF_TEXT = 0x00000001,
71     CBEIF_IMAGE = 0x00000002,
72     CBEIF_SELECTEDIMAGE = 0x00000004,
73     CBEIF_OVERLAY = 0x00000008,
74     CBEIF_INDENT = 0x00000010,
75     CBEIF_LPARAM = 0x00000020,
76     CBEIF_DI_SETITEM = 0x10000000
77 }
78 
79 enum {
80     RBN_FIRST = -831U,
81     RBN_LAST = -859U,
82     MCN_FIRST = -750U,
83     MCN_LAST = -759U,
84     DTN_FIRST = -760U,
85     DTN_LAST = -799U,
86     CBEN_FIRST = -800U,
87     CBEN_LAST = -830U
88 }
89 
90 enum {
91     CBEN_INSERTITEM = CBEN_FIRST - 1,
92     CBEN_DELETEITEM = CBEN_FIRST - 2,
93     CBEN_BEGINEDIT = CBEN_FIRST - 4,
94     CBEN_ENDEDITA = CBEN_FIRST - 5,
95     CBEN_ENDEDITW = CBEN_FIRST - 6
96 }
97 
98 enum {
99     CBENF_KILLFOCUS = 1,
100     CBENF_RETURN,
101     CBENF_ESCAPE,
102     CBENF_DROPDOWN // = 4
103 }
104 
105 enum CBEMAXSTRLEN = 260;
106 
107 enum {
108     DL_BEGINDRAG = 1157,
109     DL_CANCELDRAG = 1160,
110     DL_DRAGGING = 1158,
111     DL_DROPPED = 1159,
112     DL_CURSORSET = 0,
113     DL_STOPCURSOR = 1,
114     DL_COPYCURSOR = 2,
115     DL_MOVECURSOR = 3
116 }
117 
118 enum {
119     CCS_TOP = 1,
120     CCS_NOMOVEY = 2,
121     CCS_BOTTOM = 3,
122     CCS_NORESIZE = 4,
123     CCS_NOPARENTALIGN = 8,
124     CCS_ADJUSTABLE = 32,
125     CCS_NODIVIDER = 64
126 }
127 static if (_WIN32_IE >= 0x300) {
128     enum {
129         CCS_VERT = 128,
130         CCS_LEFT = 129,
131         CCS_NOMOVEX = 130,
132         CCS_RIGHT = 131
133     }
134 }
135 
136 enum {
137     ACS_CENTER = 0x0001,
138     ACS_TRANSPARENT = 0x0002,
139     ACS_AUTOPLAY = 0x0004,
140     ACS_TIMER = 0x0008
141 }
142 
143 enum {
144     PGS_VERT = 0x00000000,
145     PGS_HORZ = 0x00000001,
146     PGS_AUTOSCROLL = 0x00000002,
147     PGS_DRAGNDROP = 0x00000004
148 }
149 
150 enum CMB_MASKED = 2;
151 
152 enum MINSYSCOMMAND = SC_SIZE;
153 
154 enum {
155     SBT_OWNERDRAW = 0x1000,
156     SBT_NOBORDERS = 256,
157     SBT_POPOUT = 512,
158     SBT_RTLREADING = 1024
159 }
160 
161 enum {
162     SB_SETTEXTA = WM_USER + 1,
163     SB_SETTEXTW = WM_USER + 11,
164     SB_GETTEXTA = WM_USER + 2,
165     SB_GETTEXTW = WM_USER + 13,
166     SB_GETTEXTLENGTHA = WM_USER + 3,
167     SB_GETTEXTLENGTHW = WM_USER + 12,
168     SB_SETPARTS = WM_USER + 4,
169     SB_GETPARTS = WM_USER + 6,
170     SB_GETBORDERS = WM_USER + 7,
171     SB_SETMINHEIGHT = WM_USER + 8,
172     SB_SIMPLE = WM_USER + 9,
173     SB_GETRECT = WM_USER + 10
174 }
175 
176 enum {
177     MSGF_COMMCTRL_BEGINDRAG = 0x4200,
178     MSGF_COMMCTRL_SIZEHEADER = 0x4201,
179     MSGF_COMMCTRL_DRAGSELECT = 0x4202,
180     MSGF_COMMCTRL_TOOLBARCUST = 0x4203
181 }
182 
183 enum {
184     ILC_COLOR = 0,
185     ILC_COLOR4 = 4,
186     ILC_COLOR8 = 8,
187     ILC_COLOR16 = 16,
188     ILC_COLOR24 = 24,
189     ILC_COLOR32 = 32,
190     ILC_COLORDDB = 254,
191     ILC_MASK = 1,
192     ILC_PALETTE = 2048
193 }
194 
195 enum {
196     ILCF_MOVE,
197     ILCF_SWAP
198 }
199 
200 enum {
201     ILS_NORMAL = 0,
202     ILS_GLOW = 1,
203     ILS_SHADOW = 2,
204     ILS_SATURATE = 4,
205     ILS_ALPHA = 8,
206     ILD_BLEND25 = 2,
207     ILD_BLEND50 = 4,
208     ILD_SELECTED = 4,
209     ILD_BLEND = 4,
210     ILD_FOCUS = 2,
211     ILD_MASK = 16,
212     ILD_NORMAL = 0,
213     ILD_TRANSPARENT = 1,
214     ILD_IMAGE = 0x0020,
215     ILD_ROP = 0x0040,
216     ILD_OVERLAYMASK = 0x0F00,
217     ILD_PRESERVEALPHA = 0x1000,
218     ILD_SCALE = 0x2000,
219     ILD_DPISCALE = 0x4000
220 }
221 
222 enum {
223     HDS_HORZ = 0,
224     HDS_BUTTONS = 2,
225     HDS_HIDDEN = 8
226 }
227 static if (_WIN32_IE >= 0x400) {
228     enum {
229         HDS_HOTTRACK = 4,
230         HDS_DRAGDROP = 0x0040,
231         HDS_FULLDRAG = 0x0080
232     }
233 }
234 static if (_WIN32_IE >= 0x500) {
235     enum {
236         HDS_FILTERBAR = 0x0100
237     }
238 }
239 
240 enum {
241     NM_FIRST = 0,
242     NM_LAST = -99U,
243     LVN_FIRST = -100U,
244     LVN_LAST = -199U,
245     HDN_FIRST = -300U,
246     HDN_LAST = -399U,
247     TVN_FIRST = -400U,
248     TVN_LAST = -499U,
249     TTN_FIRST = -520U,
250     TTN_LAST = -549U,
251     TCN_FIRST = -550U,
252     TCN_LAST = -580U,
253     CDN_FIRST = -601U, /* also in commdlg.h */
254     CDN_LAST = -699U,
255     TBN_FIRST = -700U,
256     TBN_LAST = -720U,
257     UDN_FIRST = -721U,
258     UDN_LAST = -740U
259 }
260 /*static if (_WIN32_IE >= 0x300) {
261     enum {
262         RBN_FIRST  = -831U,
263         RBN_LAST   = -859U,
264         MCN_FIRST  = -750U,
265         MCN_LAST   = -759U,
266         DTN_FIRST  = -760U,
267         DTN_LAST   = -799U,
268         CBEN_FIRST = -800U,
269         CBEN_LAST  = -830U
270     }
271 }*/
272 static if (_WIN32_IE >= 0x400) {
273     enum {
274         IPN_FIRST = -860U,
275         IPN_LAST = -879U,
276         IPN_FIELDCHANGED = IPN_FIRST,
277         SBN_FIRST = -880U,
278         SBN_LAST = -899U,
279         PGN_FIRST = -900U,
280         PGN_LAST = -950U,
281         PGN_SCROLL = PGN_FIRST - 1,
282         PGN_CALCSIZE = PGN_FIRST - 2
283     }
284 }
285 
286 static if (_WIN32_IE >= 0x500) {
287     enum {
288         WMN_FIRST = -1000U,
289         WMN_LAST = -1200U,
290     }
291 }
292 
293 static if (_WIN32_WINNT >= 0x501) {
294     enum {
295         BCN_FIRST = -1250U,
296         BCN_LAST = -1350U,
297     }
298 }
299 
300 static if (_WIN32_WINNT >= 0x600) {
301     enum {
302         TRBN_FIRST = -1501U,
303         TRBN_LAST = -1519U,
304     }
305 }
306 
307 enum {
308     HDI_WIDTH = 1,
309     HDI_HEIGHT = 1,
310     HDI_TEXT = 2,
311     HDI_FORMAT = 4,
312     HDI_LPARAM = 8,
313     HDI_BITMAP = 16
314 }
315 static if (_WIN32_IE >= 0x300) {
316     enum {
317         HDI_IMAGE = 32,
318         HDI_DI_SETITEM = 64,
319         HDI_ORDER = 128
320     }
321 }
322 static if (_WIN32_IE >= 0x500) {
323     enum {
324         HDI_FILTER = 256
325     }
326 }
327 
328 enum {
329     CBES_EX_NOEDITIMAGE = 0x00000001,
330     CBES_EX_NOEDITIMAGEINDENT = 0x00000002,
331     CBES_EX_PATHWORDBREAKPROC = 0x00000004
332 }
333 static if (_WIN32_IE >= 0x400) {
334     enum {
335         CBES_EX_NOSIZELIMIT = 0x00000008,
336         CBES_EX_CASESENSITIVE = 0x00000010,
337         CBEN_GETDISPINFOA = CBEN_FIRST - 0,
338         CBEN_GETDISPINFOW = CBEN_FIRST - 7,
339         CBEN_DRAGBEGINA = CBEN_FIRST - 8,
340         CBEN_DRAGBEGINW = CBEN_FIRST - 9
341     }
342 }
343 
344 enum {
345     HDF_LEFT,
346     HDF_RIGHT,
347     HDF_CENTER,
348     HDF_JUSTIFYMASK,
349     HDF_RTLREADING, // = 4
350     HDF_OWNERDRAW = 0x8000,
351     HDF_STRING = 0x4000,
352     HDF_BITMAP = 0x2000
353 }
354 static if (_WIN32_IE >= 0x300) {
355     enum {
356         HDF_BITMAP_ON_RIGHT = 0x1000,
357         HDF_IMAGE = 0x0800
358     }
359 }
360 
361 enum {
362     CCM_FIRST = 0x2000,
363     CCM_LAST = CCM_FIRST + 0x200,
364     CCM_SETBKCOLOR = 8193,
365     CCM_SETCOLORSCHEME = 8194,
366     CCM_GETCOLORSCHEME = 8195,
367     CCM_GETDROPTARGET = 8196,
368     CCM_SETUNICODEFORMAT = 8197,
369     CCM_GETUNICODEFORMAT = 8198,
370     CCM_SETVERSION = 0x2007,
371     CCM_GETVERSION = 0x2008,
372     CCM_SETNOTIFYWINDOW = 0x2009
373 }
374 
375 enum {
376     HDM_GETITEMCOUNT = HDM_FIRST,
377     HDM_INSERTITEMA = HDM_FIRST + 1,
378     HDM_INSERTITEMW = HDM_FIRST + 10,
379     HDM_DELETEITEM = HDM_FIRST + 2,
380     HDM_GETITEMA = HDM_FIRST + 3,
381     HDM_GETITEMW = HDM_FIRST + 11,
382     HDM_SETITEMA = HDM_FIRST + 4,
383     HDM_SETITEMW = HDM_FIRST + 12,
384     HDM_LAYOUT = HDM_FIRST + 5
385 }
386 static if (_WIN32_IE >= 0x300) {
387     enum {
388         HDM_GETITEMRECT = HDM_FIRST + 7,
389         HDM_SETIMAGELIST = HDM_FIRST + 8,
390         HDM_GETIMAGELIST = HDM_FIRST + 9,
391         HDM_ORDERTOINDEX = HDM_FIRST + 15,
392         HDM_CREATEDRAGIMAGE = HDM_FIRST + 16,
393         HDM_GETORDERARRAY = HDM_FIRST + 17,
394         HDM_SETORDERARRAY = HDM_FIRST + 18,
395         HDM_SETHOTDIVIDER = HDM_FIRST + 19
396     }
397 }
398 static if (_WIN32_IE >= 0x400) {
399     enum {
400         HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT,
401         HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
402     }
403 }
404 static if (_WIN32_IE >= 0x500) {
405     enum {
406         HDM_SETBITMAPMARGIN = HDM_FIRST + 20,
407         HDM_GETBITMAPMARGIN = HDM_FIRST + 21,
408         HDM_SETFILTERCHANGETIMEOUT = HDM_FIRST + 22,
409         HDM_EDITFILTER = HDM_FIRST + 23,
410         HDM_CLEARFILTER = HDM_FIRST + 24,
411     }
412 }
413 static if (_WIN32_IE >= 0x600) {
414     enum {
415         HDM_GETITEMDROPDOWNRECT = HDM_FIRST + 25,
416         HDM_GETOVERFLOWRECT = HDM_FIRST + 26,
417         HDM_GETFOCUSEDITEM = HDM_FIRST + 27,
418         HDM_SETFOCUSEDITEM = HDM_FIRST + 28,
419     }
420 }
421 
422 enum {
423     HHT_NOWHERE = 1,
424     HHT_ONHEADER = 2,
425     HHT_ONDIVIDER = 4,
426     HHT_ONDIVOPEN = 8,
427     HHT_ABOVE = 256,
428     HHT_BELOW = 512,
429     HHT_TORIGHT = 1024,
430     HHT_TOLEFT = 2048
431 }
432 
433 enum {
434     HDM_HITTEST = HDM_FIRST + 6
435 }
436 
437 enum {
438     HDN_ITEMCHANGINGA = HDN_FIRST - 0,
439     HDN_ITEMCHANGINGW = HDN_FIRST - 20,
440     HDN_ITEMCHANGEDA = HDN_FIRST - 1,
441     HDN_ITEMCHANGEDW = HDN_FIRST - 21,
442     HDN_ITEMCLICKA = HDN_FIRST - 2,
443     HDN_ITEMCLICKW = HDN_FIRST - 22,
444     HDN_ITEMDBLCLICKA = HDN_FIRST - 3,
445     HDN_ITEMDBLCLICKW = HDN_FIRST - 23,
446     HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5,
447     HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25,
448     HDN_BEGINTRACKA = HDN_FIRST - 6,
449     HDN_BEGINTRACKW = HDN_FIRST - 26,
450     HDN_ENDTRACKA = HDN_FIRST - 7,
451     HDN_ENDTRACKW = HDN_FIRST - 27,
452     HDN_TRACKA = HDN_FIRST - 8,
453     HDN_TRACKW = HDN_FIRST - 28
454 }
455 static if (_WIN32_IE >= 0x300) {
456     enum {
457         HDN_ENDDRAG = (HDN_FIRST - 11),
458         HDN_BEGINDRAG = (HDN_FIRST - 10),
459         HDN_GETDISPINFOA = (HDN_FIRST - 9),
460         HDN_GETDISPINFOW = (HDN_FIRST - 29)
461     }
462 }
463 
464 static if (_WIN32_IE >= 0x400) {
465     enum {
466         HICF_OTHER = 0x00,
467         HICF_MOUSE = 0x01,
468         HICF_ARROWKEYS = 0x02,
469         HICF_ACCELERATOR = 0x04,
470         HICF_DUPACCEL = 0x08,
471         HICF_ENTERING = 0x10,
472         HICF_LEAVING = 0x20,
473         HICF_RESELECT = 0x40,
474         HICF_LMOUSE = 0x80,
475         HICF_TOGGLEDROPDOWN = 0x100
476     }
477 }
478 
479 enum {
480     IPM_CLEARADDRESS = WM_USER + 100,
481     IPM_SETADDRESS = WM_USER + 101,
482     IPM_GETADDRESS = WM_USER + 102,
483     IPM_SETRANGE = WM_USER + 103,
484     IPM_SETFOCUS = WM_USER + 104,
485     IPM_ISBLANK = WM_USER + 105
486 }
487 
488 static if (_WIN32_IE >= 0x500) {
489     enum {
490         I_INDENTCALLBACK = -1,
491         I_IMAGENONE = -2
492     }
493 }
494 
495 enum {
496     TBSTATE_CHECKED = 1,
497     TBSTATE_PRESSED = 2,
498     TBSTATE_ENABLED = 4,
499     TBSTATE_HIDDEN = 8,
500     TBSTATE_INDETERMINATE = 16,
501     TBSTATE_WRAP = 32
502 }
503 static if (_WIN32_IE >= 0x300) {
504     enum {
505         TBSTATE_ELLIPSES = 0x40
506     }
507 }
508 static if (_WIN32_IE >= 0x400) {
509     enum {
510         TBSTATE_MARKED = 0x0080
511     }
512 }
513 
514 enum {
515     TBSTYLE_BUTTON = 0,
516     TBSTYLE_SEP = 1,
517     TBSTYLE_CHECK = 2,
518     TBSTYLE_GROUP = 4,
519     TBSTYLE_CHECKGROUP = TBSTYLE_GROUP | TBSTYLE_CHECK
520 }
521 static if (_WIN32_IE >= 0x300) {
522     enum {
523         TBSTYLE_DROPDOWN = 8
524     }
525 }
526 static if (_WIN32_IE >= 0x400) {
527     enum {
528         TBSTYLE_AUTOSIZE = 16,
529         TBSTYLE_NOPREFIX = 32
530     }
531 }
532 enum {
533     TBSTYLE_TOOLTIPS = 256,
534     TBSTYLE_WRAPABLE = 512,
535     TBSTYLE_ALTDRAG = 1024
536 }
537 static if (_WIN32_IE >= 0x300) {
538     enum {
539         TBSTYLE_FLAT = 2048,
540         TBSTYLE_LIST = 4096,
541         TBSTYLE_CUSTOMERASE = 8192
542     }
543 }
544 static if (_WIN32_IE >= 0x400) {
545     enum {
546         TBSTYLE_REGISTERDROP = 0x4000,
547         TBSTYLE_TRANSPARENT = 0x8000,
548         TBSTYLE_EX_DRAWDDARROWS = 0x00000001
549     }
550 }
551 static if (_WIN32_IE >= 0x501) {
552     enum {
553         TBSTYLE_EX_MIXEDBUTTONS = 8,
554         TBSTYLE_EX_HIDECLIPPEDBUTTONS = 16
555     }
556 }
557 static if (_WIN32_WINNT >= 0x501) {
558     enum {
559         TBSTYLE_EX_DOUBLEBUFFER = 0x80
560     }
561 }
562 
563 static if (_WIN32_IE >= 0x500) {
564     enum {
565         BTNS_BUTTON = TBSTYLE_BUTTON,
566         BTNS_SEP = TBSTYLE_SEP,
567         BTNS_CHECK = TBSTYLE_CHECK,
568         BTNS_GROUP = TBSTYLE_GROUP,
569         BTNS_CHECKGROUP = TBSTYLE_CHECKGROUP,
570         BTNS_DROPDOWN = TBSTYLE_DROPDOWN,
571         BTNS_AUTOSIZE = TBSTYLE_AUTOSIZE,
572         BTNS_NOPREFIX = TBSTYLE_NOPREFIX,
573         BTNS_WHOLEDROPDOWN = 0x0080
574     }
575 }
576 static if (_WIN32_IE >= 0x501) {
577     enum {
578         BTNS_SHOWTEXT = 0x0040
579     }
580 }
581 
582 static if (_WIN32_IE >= 0x400) {
583     enum {
584         TBCDRF_NOEDGES = 0x10000,
585         TBCDRF_HILITEHOTTRACK = 0x20000,
586         TBCDRF_NOOFFSET = 0x40000,
587         TBCDRF_NOMARK = 0x80000,
588         TBCDRF_NOETCHEDEFFECT = 0x100000
589     }
590 }
591 
592 enum HINST_COMMCTRL = cast(HINSTANCE)(-1);
593 
594 enum {
595     IDB_STD_SMALL_COLOR,
596     IDB_STD_LARGE_COLOR,
597     IDB_VIEW_SMALL_COLOR = 4,
598     IDB_VIEW_LARGE_COLOR = 5
599 }
600 static if (_WIN32_IE >= 0x300) {
601     enum {
602         IDB_HIST_SMALL_COLOR = 8,
603         IDB_HIST_LARGE_COLOR = 9
604     }
605 }
606 
607 enum {
608     STD_CUT,
609     STD_COPY,
610     STD_PASTE,
611     STD_UNDO,
612     STD_REDOW,
613     STD_DELETE,
614     STD_FILENEW,
615     STD_FILEOPEN,
616     STD_FILESAVE,
617     STD_PRINTPRE,
618     STD_PROPERTIES,
619     STD_HELP,
620     STD_FIND,
621     STD_REPLACE,
622     STD_PRINT // = 14
623 }
624 
625 enum {
626     VIEW_LARGEICONS,
627     VIEW_SMALLICONS,
628     VIEW_LIST,
629     VIEW_DETAILS,
630     VIEW_SORTNAME,
631     VIEW_SORTSIZE,
632     VIEW_SORTDATE,
633     VIEW_SORTTYPE,
634     VIEW_PARENTFOLDER,
635     VIEW_NETCONNECT,
636     VIEW_NETDISCONNECT,
637     VIEW_NEWFOLDER // = 11
638 }
639 
640 enum {
641     TB_ENABLEBUTTON = WM_USER + 1,
642     TB_CHECKBUTTON,
643     TB_PRESSBUTTON,
644     TB_HIDEBUTTON,
645     TB_INDETERMINATE, //     = WM_USER + 5,
646     TB_ISBUTTONENABLED = WM_USER + 9,
647     TB_ISBUTTONCHECKED,
648     TB_ISBUTTONPRESSED,
649     TB_ISBUTTONHIDDEN,
650     TB_ISBUTTONINDETERMINATE, // = WM_USER + 13,
651     TB_SETSTATE = WM_USER + 17,
652     TB_GETSTATE = WM_USER + 18,
653     TB_ADDBITMAP = WM_USER + 19,
654     TB_DELETEBUTTON = WM_USER + 22,
655     TB_GETBUTTON,
656     TB_BUTTONCOUNT,
657     TB_COMMANDTOINDEX,
658     TB_SAVERESTOREA,
659     TB_CUSTOMIZE,
660     TB_ADDSTRINGA,
661     TB_GETITEMRECT,
662     TB_BUTTONSTRUCTSIZE,
663     TB_SETBUTTONSIZE,
664     TB_SETBITMAPSIZE,
665     TB_AUTOSIZE, //          = WM_USER + 33,
666     TB_GETTOOLTIPS = WM_USER + 35,
667     TB_SETTOOLTIPS = WM_USER + 36,
668     TB_SETPARENT = WM_USER + 37,
669     TB_SETROWS = WM_USER + 39,
670     TB_GETROWS,
671     TB_GETBITMAPFLAGS,
672     TB_SETCMDID,
673     TB_CHANGEBITMAP,
674     TB_GETBITMAP,
675     TB_GETBUTTONTEXTA,
676     TB_REPLACEBITMAP, //     = WM_USER + 46,
677     TB_GETBUTTONSIZE = WM_USER + 58,
678     TB_SETBUTTONWIDTH = WM_USER + 59,
679     TB_GETBUTTONTEXTW = WM_USER + 75,
680     TB_SAVERESTOREW = WM_USER + 76,
681     TB_ADDSTRINGW = WM_USER + 77,
682 }
683 static if (_WIN32_IE >= 0x400) {
684     enum {
685         TB_MARKBUTTON = WM_USER + 6
686     }
687 }
688 static if (_WIN32_IE >= 0x400) {
689     enum {
690         TB_ISBUTTONHIGHLIGHTED = WM_USER + 14
691     }
692 }
693 static if (_WIN32_IE >= 0x400) {
694     enum {
695         TB_ADDBUTTONSA = WM_USER + 20,
696         TB_INSERTBUTTONA = WM_USER + 21
697     }
698 } else {
699     enum {
700         TB_ADDBUTTONS = WM_USER + 20,
701         TB_INSERTBUTTON = WM_USER + 21
702     }
703 }
704 static if (_WIN32_IE >= 0x300) {
705     enum {
706         TB_SETINDENT = WM_USER + 47,
707         TB_SETIMAGELIST,
708         TB_GETIMAGELIST,
709         TB_LOADIMAGES,
710         TB_GETRECT,
711         TB_SETHOTIMAGELIST,
712         TB_GETHOTIMAGELIST,
713         TB_SETDISABLEDIMAGELIST,
714         TB_GETDISABLEDIMAGELIST,
715         TB_SETSTYLE,
716         TB_GETSTYLE,
717         //TB_GETBUTTONSIZE,
718         //TB_SETBUTTONWIDTH,
719         TB_SETMAXTEXTROWS,
720         TB_GETTEXTROWS // = WM_USER + 61
721     }
722 }
723 static if (_WIN32_IE >= 0x400) {
724     enum {
725         TB_GETOBJECT = WM_USER + 62,
726         TB_GETBUTTONINFOW,
727         TB_SETBUTTONINFOW,
728         TB_GETBUTTONINFOA,
729         TB_SETBUTTONINFOA,
730         TB_INSERTBUTTONW,
731         TB_ADDBUTTONSW,
732         TB_HITTEST, //          = WM_USER + 69
733         TB_SETEXTENDEDSTYLE = WM_USER + 84,
734         TB_GETEXTENDEDSTYLE = WM_USER + 85,
735         TB_SETDRAWTEXTFLAGS = WM_USER + 70,
736         TB_GETHOTITEM,
737         TB_SETHOTITEM,
738         TB_SETANCHORHIGHLIGHT,
739         TB_GETANCHORHIGHLIGHT, // = WM_USER + 74
740         TB_MAPACCELERATORA = WM_USER + 78,
741         TB_GETINSERTMARK,
742         TB_SETINSERTMARK,
743         TB_INSERTMARKHITTEST,
744         TB_MOVEBUTTON,
745         TB_GETMAXSIZE,
746         //TB_SETEXTENDEDSTYLE,
747         //TB_GETEXTENDEDSTYLE,
748         TB_GETPADDING,
749         TB_SETPADDING,
750         TB_SETINSERTMARKCOLOR,
751         TB_GETINSERTMARKCOLOR,
752         TB_MAPACCELERATORW,
753         TB_GETSTRINGW,
754         TB_GETSTRINGA, //       = WM_USER + 92
755         TB_SETHOTITEM2 = WM_USER + 94,
756         TB_SETLISTGAP = WM_USER + 96,
757         TB_GETIMAGELISTCOUNT = WM_USER + 98,
758         TB_GETIDEALSIZE = WM_USER + 99,
759         //TB_TRANSLATEACCELERATOR = CCM_TRANSLATEACCELERATOR,
760         TB_SETCOLORSCHEME = CCM_SETCOLORSCHEME,
761         TB_GETCOLORSCHEME = CCM_GETCOLORSCHEME,
762         TB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
763         TB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
764     }
765 }
766 
767 static if (_WIN32_WINNT >= 0x501) {
768     enum {
769         TB_GETMETRICS = WM_USER + 101,
770         TB_SETMETRICS = WM_USER + 102,
771     }
772 }
773 
774 static if (_WIN32_WINNT >= 0x600) {
775     enum {
776         TB_GETITEMDROPDOWNRECT = WM_USER + 103,
777         TB_SETPRESSEDIMAGELIST = WM_USER + 104,
778         TB_GETPRESSEDIMAGELIST = WM_USER + 105,
779     }
780 }
781 
782 enum TBBF_LARGE = 1;
783 
784 enum {
785     TBN_GETBUTTONINFOA = TBN_FIRST - 0,
786     TBN_BEGINDRAG = TBN_FIRST - 1,
787     TBN_ENDDRAG = TBN_FIRST - 2,
788     TBN_BEGINADJUST = TBN_FIRST - 3,
789     TBN_ENDADJUST = TBN_FIRST - 4,
790     TBN_RESET = TBN_FIRST - 5,
791     TBN_QUERYINSERT = TBN_FIRST - 6,
792     TBN_QUERYDELETE = TBN_FIRST - 7,
793     TBN_TOOLBARCHANGE = TBN_FIRST - 8,
794     TBN_CUSTHELP = TBN_FIRST - 9
795 }
796 static if (_WIN32_IE >= 0x300) {
797     enum {
798         TBN_DROPDOWN = TBN_FIRST - 10
799     }
800 }
801 static if (_WIN32_IE >= 0x400) {
802     enum {
803         TBN_HOTITEMCHANGE = TBN_FIRST - 13,
804         TBN_DRAGOUT = TBN_FIRST - 14,
805         TBN_DELETINGBUTTON = TBN_FIRST - 15,
806         TBN_GETDISPINFOA = TBN_FIRST - 16,
807         TBN_GETDISPINFOW = TBN_FIRST - 17,
808         TBN_GETINFOTIPA = TBN_FIRST - 18,
809         TBN_GETINFOTIPW = TBN_FIRST - 19,
810         TBN_GETBUTTONINFOW = TBN_FIRST - 20
811     }
812 }
813 static if (_WIN32_IE >= 0x500) {
814     enum {
815         TBN_RESTORE = TBN_FIRST - 21,
816         TBN_SAVE = TBN_FIRST - 22,
817         TBN_INITCUSTOMIZE = TBN_FIRST - 23
818     }
819 
820     enum {
821         TBNRF_HIDEHELP = 1,
822         TBNRF_ENDCUSTOMIZE
823     }
824 
825     enum {
826         TBNF_IMAGE = 1,
827         TBNF_TEXT = 2,
828         TBNF_DI_SETITEM = 0x10000000
829     }
830 }
831 
832 enum {
833     TTS_ALWAYSTIP = 1,
834     TTS_NOPREFIX
835 }
836 static if (_WIN32_IE >= 0x500) {
837     enum {
838         TTS_NOANIMATE = 0x10,
839         TTS_NOFADE = 0x20,
840         TTS_BALLOON = 0x40,
841         TTS_CLOSE = 0x80
842     }
843 }
844 
845 enum {
846     TTF_IDISHWND = 1,
847     TTF_CENTERTIP = 2,
848     TTF_RTLREADING = 4,
849     TTF_SUBCLASS = 16
850 }
851 static if (_WIN32_IE >= 0x300) {
852     enum {
853         TTF_TRACK = 0x0020,
854         TTF_ABSOLUTE = 0x0080,
855         TTF_TRANSPARENT = 0x0100,
856         TTF_DI_SETITEM = 0x8000
857     }
858 
859     static if (_WIN32_IE >= 0x501) {
860         enum {
861             TTF_PARSELINKS = 0x1000
862         }
863     }
864 
865     enum {
866         TBCD_TICS = 1,
867         TBCD_THUMB,
868         TBCD_CHANNEL // = 3
869     }
870 }
871 
872 static if (_WIN32_IE >= 0x400) {
873     enum {
874         TBDDRET_DEFAULT,
875         TBDDRET_NODEFAULT,
876         TBDDRET_TREATPRESSED
877     }
878 
879     enum {
880         TBIMHT_AFTER = 1,
881         TBIMHT_BACKGROUND
882     }
883 }
884 
885 enum {
886     TTDT_AUTOMATIC,
887     TTDT_RESHOW,
888     TTDT_AUTOPOP,
889     TTDT_INITIAL
890 }
891 
892 enum {
893     TTM_ACTIVATE = WM_USER + 1,
894     TTM_SETDELAYTIME = WM_USER + 3,
895     TTM_ADDTOOLA,
896     TTM_DELTOOLA,
897     TTM_NEWTOOLRECTA,
898     TTM_RELAYEVENT,
899     TTM_GETTOOLINFOA,
900     TTM_SETTOOLINFOA,
901     TTM_HITTESTA,
902     TTM_GETTEXTA,
903     TTM_UPDATETIPTEXTA,
904     TTM_GETTOOLCOUNT,
905     TTM_ENUMTOOLSA,
906     TTM_GETCURRENTTOOLA,
907     TTM_WINDOWFROMPOINT, // = WM_USER + 16
908     TTM_ADDTOOLW = WM_USER + 50,
909     TTM_DELTOOLW,
910     TTM_NEWTOOLRECTW,
911     TTM_GETTOOLINFOW,
912     TTM_SETTOOLINFOW,
913     TTM_HITTESTW,
914     TTM_GETTEXTW,
915     TTM_UPDATETIPTEXTW,
916     TTM_ENUMTOOLSW,
917     TTM_GETCURRENTTOOLW // = WM_USER + 59
918 }
919 
920 static if (_WIN32_IE >= 0x300) {
921     enum {
922         TTM_TRACKACTIVATE = WM_USER + 17,
923         TTM_TRACKPOSITION,
924         TTM_SETTIPBKCOLOR,
925         TTM_SETTIPTEXTCOLOR,
926         TTM_GETDELAYTIME,
927         TTM_GETTIPBKCOLOR,
928         TTM_GETTIPTEXTCOLOR,
929         TTM_SETMAXTIPWIDTH,
930         TTM_GETMAXTIPWIDTH,
931         TTM_SETMARGIN,
932         TTM_GETMARGIN,
933         TTM_POP // = WM_USER + 28
934     }
935 }
936 
937 static if (_WIN32_IE >= 0x400) { // IE4.0 ???
938     enum {
939         TTM_UPDATE = WM_USER + 29,
940         TTM_GETBUBBLESIZE,
941         TTM_ADJUSTRECT,
942         TTM_SETTITLEA,
943         TTM_SETTITLEW // = WM_USER + 33
944     }
945     static if (_WIN32_IE >= 0x500) {
946         alias TTM_SETTITLE = TTM_SETTITLEW;
947     } else {
948         alias TTM_SETTITLE = TTM_SETTITLEA;
949     }
950 }
951 
952 static if (_WIN32_WINNT >= 0x501) {
953     enum {
954         TTM_POPUP = (WM_USER + 34),
955         TTM_GETTITLE = (WM_USER + 35),
956     }
957 }
958 
959 enum {
960     TTN_GETDISPINFOA = TTN_FIRST - 0,
961     TTN_GETDISPINFOW = TTN_FIRST - 10,
962     TTN_NEEDTEXTA = TTN_GETDISPINFOA,
963     TTN_NEEDTEXTW = TTN_GETDISPINFOW,
964     TTN_SHOW = TTN_FIRST - 1,
965     TTN_POP = TTN_FIRST - 2
966 }
967 
968 enum UD_MAXVAL = 0x7fff;
969 enum UD_MINVAL = -UD_MAXVAL;
970 
971 enum {
972     UDN_DELTAPOS = UDN_FIRST - 1,
973     UDS_WRAP = 1,
974     UDS_SETBUDDYINT = 2,
975     UDS_ALIGNRIGHT = 4,
976     UDS_ALIGNLEFT = 8,
977     UDS_AUTOBUDDY = 16,
978     UDS_ARROWKEYS = 32,
979     UDS_HORZ = 64,
980     UDS_NOTHOUSANDS = 128
981 }
982 
983 static if (_WIN32_IE >= 0x300) {
984     enum {
985         UDS_HOTTRACK = 0x0100
986     }
987 }
988 
989 enum {
990     UDM_SETRANGE = WM_USER + 101,
991     UDM_GETRANGE,
992     UDM_SETPOS,
993     UDM_GETPOS,
994     UDM_SETBUDDY,
995     UDM_GETBUDDY,
996     UDM_SETACCEL,
997     UDM_GETACCEL,
998     UDM_SETBASE,
999     UDM_GETBASE // = WM_USER + 110
1000 }
1001 
1002 static if (_WIN32_IE >= 0x400) {
1003     enum {
1004         UDM_SETRANGE32 = WM_USER + 111,
1005         UDM_GETRANGE32,
1006         UDM_SETPOS32,
1007         UDM_GETPOS32 // = WM_USER + 114
1008     }
1009 }
1010 
1011 static if (_WIN32_IE >= 0x500) {
1012     enum {
1013         UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
1014         UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
1015     }
1016 }
1017 
1018 /*enum {
1019     SB_SETTEXTA       = WM_USER + 1,
1020     SB_GETTEXTA,
1021     SB_GETTEXTLENGTHA,
1022     SB_SETPARTS,   // = WM_USER + 4
1023     SB_GETPARTS       = WM_USER + 6,
1024     SB_GETBORDERS,
1025     SB_SETMINHEIGHT,
1026     SB_SIMPLE,
1027     SB_GETRECT,
1028     SB_SETTEXTW,
1029     SB_GETTEXTLENGTHW,
1030     SB_GETTEXTW    // = WM_USER + 13
1031 }*/
1032 
1033 /*enum {
1034     SBT_OWNERDRAW  = 0x1000,
1035     SBT_NOBORDERS  = 256,
1036     SBT_POPOUT     = 512,
1037     SBT_RTLREADING = 1024
1038 }*/
1039 
1040 static if (_WIN32_IE >= 0x400) {
1041     enum {
1042         SBT_TOOLTIPS = 0x0800,
1043         SBN_SIMPLEMODECHANGE = SBN_FIRST
1044     }
1045 }
1046 
1047 enum {
1048     TBS_AUTOTICKS = 1,
1049     TBS_VERT = 2,
1050     TBS_HORZ = 0,
1051     TBS_TOP = 4,
1052     TBS_BOTTOM = 0,
1053     TBS_LEFT = 4,
1054     TBS_RIGHT = 0,
1055     TBS_BOTH = 8,
1056     TBS_NOTICKS = 16,
1057     TBS_ENABLESELRANGE = 32,
1058     TBS_FIXEDLENGTH = 64,
1059     TBS_NOTHUMB = 128
1060 }
1061 
1062 static if (_WIN32_IE >= 0x300) {
1063     enum {
1064         TBS_TOOLTIPS = 0x0100,
1065         TBTS_TOP = 0,
1066         TBTS_LEFT,
1067         TBTS_BOTTOM,
1068         TBTS_RIGHT // = 3
1069     }
1070 }
1071 
1072 static if (_WIN32_IE >= 0x500) {
1073     enum {
1074         TBS_REVERSED = 0x0200
1075     }
1076 }
1077 
1078 static if (_WIN32_IE >= 0x501) {
1079     enum {
1080         TBS_DOWNISLEFT = 0x0400
1081     }
1082 }
1083 
1084 static if (_WIN32_IE >= 0x400) {
1085     enum {
1086         TBIF_BYINDEX = 0x80000000,
1087         TBIF_COMMAND = 32,
1088         TBIF_IMAGE = 1,
1089         TBIF_LPARAM = 16,
1090         TBIF_SIZE = 64,
1091         TBIF_STATE = 4,
1092         TBIF_STYLE = 8,
1093         TBIF_TEXT = 2
1094     }
1095 }
1096 
1097 enum {
1098     TBM_GETPOS = WM_USER,
1099     TBM_GETRANGEMIN,
1100     TBM_GETRANGEMAX,
1101     TBM_GETTIC,
1102     TBM_SETTIC,
1103     TBM_SETPOS,
1104     TBM_SETRANGE,
1105     TBM_SETRANGEMIN,
1106     TBM_SETRANGEMAX,
1107     TBM_CLEARTICS,
1108     TBM_SETSEL,
1109     TBM_SETSELSTART,
1110     TBM_SETSELEND, // = WM_USER+12,
1111     TBM_GETPTICS = WM_USER + 14,
1112     TBM_GETTICPOS,
1113     TBM_GETNUMTICS,
1114     TBM_GETSELSTART,
1115     TBM_GETSELEND,
1116     TBM_CLEARSEL,
1117     TBM_SETTICFREQ,
1118     TBM_SETPAGESIZE,
1119     TBM_GETPAGESIZE,
1120     TBM_SETLINESIZE,
1121     TBM_GETLINESIZE,
1122     TBM_GETTHUMBRECT,
1123     TBM_GETCHANNELRECT,
1124     TBM_SETTHUMBLENGTH,
1125     TBM_GETTHUMBLENGTH,
1126     TBM_SETTOOLTIPS,
1127     TBM_GETTOOLTIPS,
1128     TBM_SETTIPSIDE,
1129     TBM_SETBUDDY,
1130     TBM_GETBUDDY, //     = WM_USER+33,
1131     TBM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT,
1132     TBM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
1133 }
1134 
1135 enum {
1136     TB_LINEUP,
1137     TB_LINEDOWN,
1138     TB_PAGEUP,
1139     TB_PAGEDOWN,
1140     TB_THUMBPOSITION,
1141     TB_THUMBTRACK,
1142     TB_TOP,
1143     TB_BOTTOM,
1144     TB_ENDTRACK // = 8
1145 }
1146 
1147 enum {
1148     HOTKEYF_SHIFT = 1,
1149     HOTKEYF_CONTROL = 2,
1150     HOTKEYF_ALT = 4,
1151     HOTKEYF_EXT = 8
1152 }
1153 
1154 enum {
1155     HKCOMB_NONE = 1,
1156     HKCOMB_S = 2,
1157     HKCOMB_C = 4,
1158     HKCOMB_A = 8,
1159     HKCOMB_SC = 16,
1160     HKCOMB_SA = 32,
1161     HKCOMB_CA = 64,
1162     HKCOMB_SCA = 128
1163 }
1164 
1165 enum {
1166     HKM_SETHOTKEY = WM_USER + 1,
1167     HKM_GETHOTKEY = WM_USER + 2,
1168     HKM_SETRULES = WM_USER + 3
1169 }
1170 
1171 enum {
1172     PBM_SETRANGE = WM_USER + 1,
1173     PBM_SETPOS,
1174     PBM_DELTAPOS,
1175     PBM_SETSTEP,
1176     PBM_STEPIT, // = WM_USER + 5
1177     PBM_SETRANGE32 = 1030,
1178     PBM_GETRANGE,
1179     PBM_GETPOS,
1180     PBM_SETBARCOLOR, // = 1033
1181     PBM_SETBKCOLOR = CCM_SETBKCOLOR
1182 }
1183 
1184 static if (_WIN32_WINNT >= 0x501) {
1185     enum {
1186         PBM_SETMARQUEE = WM_USER + 10,
1187     }
1188 }
1189 
1190 static if (_WIN32_WINNT >= 0x600) {
1191     enum {
1192         PBM_GETSTEP = WM_USER + 13,
1193         PBM_GETBKCOLOR,
1194         PBM_GETBARCOLOR,
1195         PBM_SETSTATE,
1196         PBM_GETSTATE,
1197     }
1198 }
1199 
1200 enum {
1201     PBS_SMOOTH = 1,
1202     PBS_VERTICAL = 4
1203 }
1204 
1205 static if (_WIN32_WINNT >= 0x501) {
1206     enum {
1207         PBS_MARQUEE = 8,
1208     }
1209 }
1210 
1211 static if (_WIN32_WINNT >= 0x600) {
1212     enum {
1213         PBS_SMOOTHREVERSE = 16,
1214     }
1215 }
1216 
1217 enum {
1218     LVS_ICON,
1219     LVS_REPORT,
1220     LVS_SMALLICON,
1221     LVS_LIST, // = 3
1222     LVS_TYPEMASK = 3,
1223     LVS_SINGLESEL = 4,
1224     LVS_SHOWSELALWAYS = 8,
1225     LVS_SORTASCENDING = 16,
1226     LVS_SORTDESCENDING = 32,
1227     LVS_SHAREIMAGELISTS = 64,
1228     LVS_NOLABELWRAP = 128,
1229     LVS_AUTOARRANGE = 256,
1230     LVS_EDITLABELS = 512,
1231     LVS_NOSCROLL = 0x2000,
1232     LVS_TYPESTYLEMASK = 0xFC00,
1233     LVS_ALIGNTOP = 0,
1234     LVS_ALIGNLEFT = 0x800,
1235     LVS_ALIGNMASK = 0xC00,
1236     LVS_OWNERDRAWFIXED = 0x400,
1237     LVS_NOCOLUMNHEADER = 0x4000,
1238     LVS_NOSORTHEADER = 0x8000
1239 }
1240 
1241 static if (_WIN32_IE >= 0x300) {
1242     enum {
1243         CDIS_CHECKED = 8,
1244         CDIS_DEFAULT = 32,
1245         CDIS_DISABLED = 4,
1246         CDIS_FOCUS = 16,
1247         CDIS_GRAYED = 2,
1248         CDIS_HOT = 64,
1249         CDIS_SELECTED = 1,
1250         CDIS_MARKED = 128,
1251         CDIS_INDETERMINATE = 256
1252     }
1253 
1254     static if (_WIN32_WINNT >= 0x501) {
1255         enum {
1256             CDIS_SHOWKEYBOARDCUES = 512
1257         }
1258     }
1259 
1260     enum {
1261         CDDS_POSTERASE = 4,
1262         CDDS_POSTPAINT = 2,
1263         CDDS_PREERASE = 3,
1264         CDDS_PREPAINT = 1,
1265         CDDS_ITEM = 65536,
1266         CDDS_ITEMPOSTERASE = 65540,
1267         CDDS_ITEMPOSTPAINT = 65538,
1268         CDDS_ITEMPREERASE = 65539,
1269         CDDS_ITEMPREPAINT = 65537
1270     }
1271 
1272     static if (_WIN32_IE >= 0x400) {
1273         enum {
1274             CDDS_SUBITEM = 0x20000
1275         }
1276     }
1277 
1278     enum {
1279         CDRF_DODEFAULT = 0x00,
1280         CDRF_NOTIFYITEMDRAW = 0x20,
1281         CDRF_NOTIFYSUBITEMDRAW = 0x20,
1282         CDRF_NOTIFYITEMERASE = 0x80,
1283         CDRF_NOTIFYPOSTERASE = 0x40,
1284         CDRF_NOTIFYPOSTPAINT = 0x10,
1285         CDRF_NEWFONT = 0x02,
1286         CDRF_SKIPDEFAULT = 0x04
1287     }
1288 
1289     static if (_WIN32_IE >= 0x400) {
1290         enum {
1291             LVBKIF_SOURCE_NONE = 0x00000000,
1292             LVBKIF_SOURCE_HBITMAP = 0x00000001,
1293             LVBKIF_SOURCE_URL = 0x00000002,
1294             LVBKIF_SOURCE_MASK = 0x00000003,
1295             LVBKIF_STYLE_NORMAL = 0x00000000,
1296             LVBKIF_STYLE_TILE = 0x00000010,
1297             LVBKIF_STYLE_MASK = 0x00000010
1298         }
1299     }
1300 
1301     static if (_WIN32_WINNT >= 0x501) {
1302         enum {
1303             LVBKIF_FLAG_TILEOFFSET = 0x00000100,
1304             LVBKIF_TYPE_WATERMARK = 0x10000000
1305         }
1306     }
1307 
1308     enum {
1309         LVS_OWNERDATA = 4096
1310     }
1311 
1312     enum {
1313         LVS_EX_CHECKBOXES = 4,
1314         LVS_EX_FULLROWSELECT = 32,
1315         LVS_EX_GRIDLINES = 1,
1316         LVS_EX_HEADERDRAGDROP = 16,
1317         LVS_EX_ONECLICKACTIVATE = 64,
1318         LVS_EX_SUBITEMIMAGES = 2,
1319         LVS_EX_TRACKSELECT = 8,
1320         LVS_EX_TWOCLICKACTIVATE = 128
1321     }
1322 
1323     enum {
1324         LVSICF_NOINVALIDATEALL = 0x00000001,
1325         LVSICF_NOSCROLL = 0x00000002
1326     }
1327 
1328     static if (_WIN32_IE >= 0x400) {
1329         enum {
1330             LVS_EX_FLATSB = 0x00000100,
1331             LVS_EX_REGIONAL = 0x00000200,
1332             LVS_EX_INFOTIP = 0x00000400,
1333             LVS_EX_UNDERLINEHOT = 0x00000800,
1334             LVS_EX_UNDERLINECOLD = 0x00001000,
1335             LVS_EX_MULTIWORKAREAS = 0x00002000
1336         }
1337     }
1338 
1339     static if (_WIN32_IE >= 0x500) {
1340         enum {
1341             LVS_EX_LABELTIP = 0x00004000,
1342             LVS_EX_BORDERSELECT = 0x00008000
1343         }
1344     }
1345 }
1346 
1347 enum {
1348     LVSIL_NORMAL,
1349     LVSIL_SMALL,
1350     LVSIL_STATE
1351 }
1352 
1353 enum {
1354     LVM_GETBKCOLOR = LVM_FIRST,
1355     LVM_SETBKCOLOR,
1356     LVM_GETIMAGELIST,
1357     LVM_SETIMAGELIST,
1358     LVM_GETITEMCOUNT, // = LVM_FIRST +   4
1359     LVM_SORTITEMSEX = LVM_FIRST + 81,
1360     LVM_GETGROUPSTATE = LVM_FIRST + 92,
1361     LVM_GETFOCUSEDGROUP,
1362     LVM_GETGROUPRECT = LVM_FIRST + 98,
1363     LVM_SETVIEW = LVM_FIRST + 142,
1364     LVM_GETVIEW, // = LVM_FIRST + 143
1365     LVM_INSERTGROUP = LVM_FIRST + 145,
1366     LVM_SETGROUPINFO = LVM_FIRST + 147,
1367     LVM_GETGROUPINFO = LVM_FIRST + 149,
1368     LVM_REMOVEGROUP,
1369     LVM_MOVEGROUP, // = LVM_FIRST + 151
1370     LVM_GETGROUPCOUNT,
1371     LVM_GETGROUPINFOBYINDEX,
1372     LVM_MOVEITEMTOGROUP,
1373     LVM_SETGROUPMETRICS = LVM_FIRST + 155,
1374     LVM_GETGROUPMETRICS,
1375     LVM_ENABLEGROUPVIEW,
1376     LVM_SORTGROUPS,
1377     LVM_INSERTGROUPSORTED,
1378     LVM_REMOVEALLGROUPS,
1379     LVM_HASGROUP,
1380     LVM_SETTILEVIEWINFO,
1381     LVM_GETTILEVIEWINFO,
1382     LVM_SETTILEINFO,
1383     LVM_GETTILEINFO,
1384     LVM_SETINSERTMARK,
1385     LVM_GETINSERTMARK,
1386     LVM_INSERTMARKHITTEST,
1387     LVM_GETINSERTMARKRECT,
1388     LVM_SETINSERTMARKCOLOR,
1389     LVM_GETINSERTMARKCOLOR, // = LVM_FIRST + 171
1390     LVM_SETINFOTIP = LVM_FIRST + 173,
1391     LVM_GETSELECTEDCOLUMN,
1392     LVM_ISGROUPVIEWENABLED,
1393     LVM_GETOUTLINECOLOR,
1394     LVM_SETOUTLINECOLOR, // = LVM_FIRST + 177
1395     LVM_CANCELEDITLABEL = LVM_FIRST + 179,
1396     LVM_MAPINDEXTOID = LVM_FIRST + 180,
1397     LVM_MAPIDTOINDEX = LVM_FIRST + 181,
1398     LVM_ISITEMVISIBLE = LVM_FIRST + 182,
1399 }
1400 
1401 static if (_WIN32_WINNT >= 0x501) {
1402     enum {
1403         LVM_SETSELECTEDCOLUMN = LVM_FIRST + 140
1404     }
1405 }
1406 
1407 static if (_WIN32_WINNT >= 0x600) {
1408     enum {
1409         LVM_GETEMPTYTEXT = LVM_FIRST + 204,
1410         LVM_GETFOOTERRECT = LVM_FIRST + 205,
1411         LVM_GETFOOTERINFO = LVM_FIRST + 206,
1412         LVM_GETFOOTERITEMRECT = LVM_FIRST + 207,
1413         LVM_GETFOOTERITEM = (LVM_FIRST + 208),
1414         LVM_GETITEMINDEXRECT = (LVM_FIRST + 209),
1415         LVM_SETITEMINDEXSTATE = (LVM_FIRST + 210),
1416         LVM_GETNEXTITEMINDEX = (LVM_FIRST + 211),
1417     }
1418 }
1419 
1420 enum {
1421     LVIF_TEXT = 1,
1422     LVIF_IMAGE = 2,
1423     LVIF_PARAM = 4,
1424     LVIF_STATE = 8
1425 }
1426 
1427 static if (_WIN32_IE >= 0x300) {
1428     enum {
1429         LVIF_INDENT = 16,
1430         LVIF_NORECOMPUTE = 2048
1431     }
1432 }
1433 
1434 static if (_WIN32_WINNT >= 0x501) {
1435     enum {
1436         LVIF_GROUPID = 128,
1437         LVIF_COLUMNS = 256
1438     }
1439 }
1440 
1441 enum {
1442     LVIS_FOCUSED = 1,
1443     LVIS_SELECTED = 2,
1444     LVIS_CUT = 4,
1445     LVIS_DROPHILITED = 8,
1446     LVIS_OVERLAYMASK = 0xF00,
1447     LVIS_STATEIMAGEMASK = 0xF000
1448 }
1449 
1450 enum LPWSTR LPSTR_TEXTCALLBACKW = cast(LPWSTR)-1;
1451 enum LPSTR LPSTR_TEXTCALLBACKA = cast(LPSTR)-1;
1452 
1453 enum I_IMAGECALLBACK = -1;
1454 
1455 static if (_WIN32_IE >= 0x400) {
1456     enum {
1457         LVM_SETBKIMAGEA = LVM_FIRST + 68,
1458         LVM_SETBKIMAGEW = LVM_FIRST + 138,
1459         LVM_GETBKIMAGEA = LVM_FIRST + 69,
1460         LVM_GETBKIMAGEW = LVM_FIRST + 139,
1461         LV_MAX_WORKAREAS = 16,
1462         LVM_SETWORKAREAS = LVM_FIRST + 65,
1463         LVM_GETWORKAREAS = LVM_FIRST + 70,
1464         LVM_GETNUMBEROFWORKAREAS = LVM_FIRST + 73,
1465         LVM_GETSELECTIONMARK = LVM_FIRST + 66,
1466         LVM_SETSELECTIONMARK = LVM_FIRST + 67,
1467         LVM_SETHOVERTIME = LVM_FIRST + 71,
1468         LVM_GETHOVERTIME = LVM_FIRST + 72,
1469         LVM_SETTOOLTIPS = LVM_FIRST + 74,
1470         LVM_GETTOOLTIPS = LVM_FIRST + 78,
1471         LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
1472         LVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
1473     }
1474 }
1475 
1476 enum {
1477     LVNI_ALL,
1478     LVNI_FOCUSED = 1,
1479     LVNI_SELECTED = 2,
1480     LVNI_CUT = 4,
1481     LVNI_DROPHILITED = 8,
1482     LVNI_ABOVE = 256,
1483     LVNI_BELOW = 512,
1484     LVNI_TOLEFT = 1024,
1485     LVNI_TORIGHT = 2048
1486 }
1487 
1488 enum {
1489     LVM_GETITEMA = LVM_FIRST + 5,
1490     LVM_SETITEMA,
1491     LVM_INSERTITEMA,
1492     LVM_DELETEITEM,
1493     LVM_DELETEALLITEMS,
1494     LVM_GETCALLBACKMASK,
1495     LVM_SETCALLBACKMASK,
1496     LVM_GETNEXTITEM,
1497     LVM_FINDITEMA,
1498     LVM_GETITEMRECT,
1499     LVM_SETITEMPOSITION,
1500     LVM_GETITEMPOSITION,
1501     LVM_GETSTRINGWIDTHA,
1502     LVM_HITTEST,
1503     LVM_ENSUREVISIBLE,
1504     LVM_SCROLL,
1505     LVM_REDRAWITEMS,
1506     LVM_ARRANGE,
1507     LVM_EDITLABELA,
1508     LVM_GETEDITCONTROL,
1509     LVM_GETCOLUMNA,
1510     LVM_SETCOLUMNA,
1511     LVM_INSERTCOLUMNA,
1512     LVM_DELETECOLUMN,
1513     LVM_GETCOLUMNWIDTH,
1514     LVM_SETCOLUMNWIDTH, // = LVM_FIRST + 30,
1515     LVM_CREATEDRAGIMAGE = LVM_FIRST + 33,
1516     LVM_GETVIEWRECT,
1517     LVM_GETTEXTCOLOR,
1518     LVM_SETTEXTCOLOR,
1519     LVM_GETTEXTBKCOLOR,
1520     LVM_SETTEXTBKCOLOR,
1521     LVM_GETTOPINDEX,
1522     LVM_GETCOUNTPERPAGE,
1523     LVM_GETORIGIN,
1524     LVM_UPDATE,
1525     LVM_SETITEMSTATE,
1526     LVM_GETITEMSTATE,
1527     LVM_GETITEMTEXTA,
1528     LVM_SETITEMTEXTA,
1529     LVM_SETITEMCOUNT,
1530     LVM_SORTITEMS,
1531     LVM_SETITEMPOSITION32,
1532     LVM_GETSELECTEDCOUNT,
1533     LVM_GETITEMSPACING,
1534     LVM_GETISEARCHSTRINGA, // = LVM_FIRST + 52,
1535     LVM_GETITEMW = LVM_FIRST + 75,
1536     LVM_SETITEMW = LVM_FIRST + 76,
1537     LVM_INSERTITEMW = LVM_FIRST + 77,
1538     LVM_FINDITEMW = LVM_FIRST + 83,
1539     LVM_GETSTRINGWIDTHW = LVM_FIRST + 87,
1540     LVM_GETCOLUMNW = LVM_FIRST + 95,
1541     LVM_SETCOLUMNW = LVM_FIRST + 96,
1542     LVM_INSERTCOLUMNW = LVM_FIRST + 97,
1543     LVM_GETITEMTEXTW = LVM_FIRST + 115,
1544     LVM_SETITEMTEXTW,
1545     LVM_GETISEARCHSTRINGW,
1546     LVM_EDITLABELW // = LVM_FIRST + 118,
1547 }
1548 
1549 static if (_WIN32_IE >= 0x300) {
1550     enum {
1551         LVM_GETHEADER = LVM_FIRST + 31,
1552         LVM_SETICONSPACING = LVM_FIRST + 53,
1553         LVM_SETEXTENDEDLISTVIEWSTYLE,
1554         LVM_GETEXTENDEDLISTVIEWSTYLE,
1555         LVM_GETSUBITEMRECT,
1556         LVM_SUBITEMHITTEST,
1557         LVM_SETCOLUMNORDERARRAY,
1558         LVM_GETCOLUMNORDERARRAY,
1559         LVM_SETHOTITEM,
1560         LVM_GETHOTITEM,
1561         LVM_SETHOTCURSOR,
1562         LVM_GETHOTCURSOR,
1563         LVM_APPROXIMATEVIEWRECT // = LVM_FIRST + 64,
1564     }
1565 }
1566 
1567 enum {
1568     LVFI_PARAM = 1,
1569     LVFI_STRING = 2,
1570     LVFI_PARTIAL = 8,
1571     LVFI_WRAP = 32,
1572     LVFI_NEARESTXY = 64
1573 }
1574 
1575 enum {
1576     LVIF_DI_SETITEM = 0x1000
1577 }
1578 
1579 enum {
1580     LVIR_BOUNDS,
1581     LVIR_ICON,
1582     LVIR_LABEL,
1583     LVIR_SELECTBOUNDS // = 3
1584 }
1585 
1586 enum {
1587     LVHT_NOWHERE = 1,
1588     LVHT_ONITEMICON = 2,
1589     LVHT_ONITEMLABEL = 4,
1590     LVHT_ONITEMSTATEICON = 8,
1591     LVHT_ONITEM = LVHT_ONITEMICON | LVHT_ONITEMLABEL
1592         | LVHT_ONITEMSTATEICON,
1593     LVHT_ABOVE = 8,
1594     LVHT_BELOW = 16,
1595     LVHT_TORIGHT = 32,
1596     LVHT_TOLEFT = 64
1597 }
1598 
1599 enum {
1600     LVA_DEFAULT = 0,
1601     LVA_ALIGNLEFT = 1,
1602     LVA_ALIGNTOP = 2,
1603     LVA_SNAPTOGRID = 5
1604 }
1605 
1606 enum {
1607     LVCF_FMT = 1,
1608     LVCF_WIDTH = 2,
1609     LVCF_TEXT = 4,
1610     LVCF_SUBITEM = 8
1611 }
1612 
1613 static if (_WIN32_IE >= 0x300) {
1614     enum {
1615         LVCF_IMAGE = 16,
1616         LVCF_ORDER = 32
1617     }
1618 }
1619 
1620 enum {
1621     LVCFMT_LEFT,
1622     LVCFMT_RIGHT,
1623     LVCFMT_CENTER,
1624     LVCFMT_JUSTIFYMASK // = 3
1625 }
1626 
1627 static if (_WIN32_IE >= 0x300) {
1628     enum {
1629         LVCFMT_IMAGE = 2048,
1630         LVCFMT_BITMAP_ON_RIGHT = 4096,
1631         LVCFMT_COL_HAS_IMAGES = 32768
1632     }
1633 }
1634 
1635 enum {
1636     LVSCW_AUTOSIZE = -1,
1637     LVSCW_AUTOSIZE_USEHEADER = -2
1638 }
1639 
1640 enum {
1641     LVN_ITEMCHANGING = LVN_FIRST,
1642     LVN_ITEMCHANGED = LVN_FIRST - 1,
1643     LVN_INSERTITEM = LVN_FIRST - 2,
1644     LVN_DELETEITEM = LVN_FIRST - 3,
1645     LVN_DELETEALLITEMS = LVN_FIRST - 4,
1646     LVN_BEGINLABELEDITA = LVN_FIRST - 5,
1647     LVN_ENDLABELEDITA = LVN_FIRST - 6,
1648     LVN_COLUMNCLICK = LVN_FIRST - 8,
1649     LVN_BEGINDRAG = LVN_FIRST - 9,
1650     LVN_BEGINRDRAG = LVN_FIRST - 11,
1651     LVN_GETDISPINFOA = LVN_FIRST - 50,
1652     LVN_SETDISPINFOA = LVN_FIRST - 51,
1653     LVN_KEYDOWN = LVN_FIRST - 55,
1654     LVN_BEGINLABELEDITW = LVN_FIRST - 75,
1655     LVN_ENDLABELEDITW = LVN_FIRST - 76,
1656     LVN_GETDISPINFOW = LVN_FIRST - 77,
1657     LVN_SETDISPINFOW = LVN_FIRST - 78
1658 }
1659 
1660 static if (_WIN32_IE >= 0x400) {
1661     enum {
1662         LVN_MARQUEEBEGIN = LVN_FIRST - 56,
1663         LVN_GETINFOTIPA = LVN_FIRST - 57,
1664         LVN_GETINFOTIPW = LVN_FIRST - 58,
1665         LVKF_ALT = 1,
1666         LVKF_CONTROL = 2,
1667         LVKF_SHIFT = 4,
1668         LVGIT_UNFOLDED = 1
1669     }
1670 }
1671 
1672 enum {
1673     TVS_HASBUTTONS = 1,
1674     TVS_HASLINES = 2,
1675     TVS_LINESATROOT = 4,
1676     TVS_EDITLABELS = 8,
1677     TVS_DISABLEDRAGDROP = 16,
1678     TVS_SHOWSELALWAYS = 32
1679 }
1680 
1681 static if (_WIN32_IE >= 0x300) {
1682     enum {
1683         TVS_RTLREADING = 64,
1684         TVS_NOTOOLTIPS = 128,
1685         TVS_CHECKBOXES = 256,
1686         TVS_TRACKSELECT = 512
1687     }
1688 }
1689 
1690 static if (_WIN32_IE >= 0x400) {
1691     enum {
1692         TVS_SINGLEEXPAND = 1024,
1693         TVS_INFOTIP = 2048,
1694         TVS_FULLROWSELECT = 4096,
1695         TVS_NOSCROLL = 8192,
1696         TVS_NONEVENHEIGHT = 16384
1697     }
1698 }
1699 
1700 static if (_WIN32_IE >= 0x500) {
1701     enum {
1702         TVS_NOHSCROLL = 0x8000
1703     }
1704 }
1705 
1706 enum {
1707     TVIF_TEXT = 1,
1708     TVIF_IMAGE = 2,
1709     TVIF_PARAM = 4,
1710     TVIF_STATE = 8,
1711     TVIF_HANDLE = 16,
1712     TVIF_SELECTEDIMAGE = 32,
1713     TVIF_CHILDREN = 64
1714 }
1715 
1716 static if (_WIN32_IE >= 0x400) {
1717     enum {
1718         TVIF_INTEGRAL = 0x0080
1719     }
1720 }
1721 
1722 enum {
1723     TVIS_FOCUSED = 1,
1724     TVIS_SELECTED = 2,
1725     TVIS_CUT = 4,
1726     TVIS_DROPHILITED = 8,
1727     TVIS_BOLD = 16,
1728     TVIS_EXPANDED = 32,
1729     TVIS_EXPANDEDONCE = 64,
1730     TVIS_OVERLAYMASK = 0xF00,
1731     TVIS_STATEIMAGEMASK = 0xF000,
1732     TVIS_USERMASK = 0xF000
1733 }
1734 
1735 enum {
1736     I_CHILDRENCALLBACK = -1
1737 }
1738 
1739 alias HTREEITEM = HANDLE;
1740 alias HIMAGELIST = HANDLE;
1741 
1742 version (Win64) {
1743     enum HTREEITEM TVI_ROOT = cast(HTREEITEM) cast(ULONG_PTR)-0x10000,
1744         TVI_FIRST = cast(HTREEITEM) cast(ULONG_PTR)-0xffff,
1745         TVI_LAST = cast(HTREEITEM) cast(ULONG_PTR)-0xfffe,
1746         TVI_SORT = cast(HTREEITEM) cast(ULONG_PTR)-0xfffd;
1747 } else {
1748     enum HTREEITEM TVI_ROOT = cast(HTREEITEM) 0xFFFF0000,
1749         TVI_FIRST = cast(HTREEITEM) 0xFFFF0001,
1750         TVI_LAST = cast(HTREEITEM) 0xFFFF0002,
1751         TVI_SORT = cast(HTREEITEM) 0xFFFF0003;
1752 }
1753 
1754 enum {
1755     TVSIL_NORMAL = 0,
1756     TVSIL_STATE = 2
1757 }
1758 
1759 enum {
1760     TVM_INSERTITEMA = TV_FIRST,
1761     TVM_DELETEITEM = TV_FIRST + 1,
1762     TVM_EXPAND = TV_FIRST + 2,
1763     TVM_GETITEMRECT = TV_FIRST + 4,
1764     TVM_GETCOUNT,
1765     TVM_GETINDENT,
1766     TVM_SETINDENT,
1767     TVM_GETIMAGELIST,
1768     TVM_SETIMAGELIST,
1769     TVM_GETNEXTITEM,
1770     TVM_SELECTITEM,
1771     TVM_GETITEMA,
1772     TVM_SETITEMA,
1773     TVM_EDITLABELA,
1774     TVM_GETEDITCONTROL,
1775     TVM_GETVISIBLECOUNT,
1776     TVM_HITTEST,
1777     TVM_CREATEDRAGIMAGE,
1778     TVM_SORTCHILDREN,
1779     TVM_ENSUREVISIBLE,
1780     TVM_SORTCHILDRENCB,
1781     TVM_ENDEDITLABELNOW,
1782     TVM_GETISEARCHSTRINGA, // = TV_FIRST + 23
1783     TVM_INSERTITEMW = TV_FIRST + 50,
1784     TVM_GETITEMW = TV_FIRST + 62,
1785     TVM_SETITEMW = TV_FIRST + 63,
1786     TVM_GETISEARCHSTRINGW = TV_FIRST + 64,
1787     TVM_EDITLABELW = TV_FIRST + 65
1788 }
1789 
1790 static if (_WIN32_IE >= 0x300) {
1791     enum {
1792         TVM_GETTOOLTIPS = TV_FIRST + 25,
1793         TVM_SETTOOLTIPS = TV_FIRST + 24
1794     }
1795 }
1796 
1797 static if (_WIN32_IE >= 0x400) {
1798     enum {
1799         TVM_SETINSERTMARK = TV_FIRST + 26,
1800         TVM_SETITEMHEIGHT,
1801         TVM_GETITEMHEIGHT,
1802         TVM_SETBKCOLOR,
1803         TVM_SETTEXTCOLOR,
1804         TVM_GETBKCOLOR,
1805         TVM_GETTEXTCOLOR,
1806         TVM_SETSCROLLTIME,
1807         TVM_GETSCROLLTIME, // = TV_FIRST + 34
1808         TVM_SETINSERTMARKCOLOR = TV_FIRST + 37,
1809         TVM_GETINSERTMARKCOLOR = TV_FIRST + 38,
1810         TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
1811         TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
1812     }
1813 }
1814 
1815 static if (_WIN32_IE >= 0x500) {
1816     enum {
1817         TVM_GETITEMSTATE = TV_FIRST + 39,
1818         TVM_SETLINECOLOR = TV_FIRST + 40,
1819         TVM_GETLINECOLOR = TV_FIRST + 41
1820     }
1821 }
1822 
1823 static if (_WIN32_IE >= 0x501) {
1824     enum {
1825         TVM_MAPACCIDTOHTREEITEM = TV_FIRST + 42,
1826         TVM_MAPHTREEITEMTOACCID = TV_FIRST + 43,
1827         TVM_SETEXTENDEDSTYLE = TV_FIRST + 44,
1828         TVM_GETEXTENDEDSTYLE = TV_FIRST + 45,
1829         TVM_SETAUTOSCROLLINFO = TV_FIRST + 59
1830     }
1831 }
1832 
1833 static if (_WIN32_IE >= 0x600) {
1834     enum {
1835         TVM_GETSELECTEDCOUNT = TV_FIRST + 70,
1836         TVM_SHOWINFOTIP = TV_FIRST + 71,
1837         TVM_GETITEMPARTRECT = TV_FIRST + 72,
1838     }
1839 }
1840 
1841 enum {
1842     TVE_COLLAPSE = 1,
1843     TVE_EXPAND = 2,
1844     TVE_TOGGLE = 3,
1845     TVE_COLLAPSERESET = 0x8000
1846 }
1847 
1848 static if (_WIN32_IE >= 0x300) {
1849     enum {
1850         TVE_EXPANDPARTIAL = 0x4000
1851     }
1852 }
1853 
1854 enum {
1855     TVC_UNKNOWN,
1856     TVC_BYMOUSE,
1857     TVC_BYKEYBOARD // = 2
1858 }
1859 
1860 enum {
1861     TVGN_ROOT,
1862     TVGN_NEXT,
1863     TVGN_PREVIOUS,
1864     TVGN_PARENT,
1865     TVGN_CHILD,
1866     TVGN_FIRSTVISIBLE,
1867     TVGN_NEXTVISIBLE,
1868     TVGN_PREVIOUSVISIBLE,
1869     TVGN_DROPHILITE,
1870     TVGN_CARET // = 9
1871 }
1872 
1873 static if (_WIN32_IE >= 0x400) {
1874     enum {
1875         TVGN_LASTVISIBLE = 10
1876     }
1877 }
1878 
1879 static if (_WIN32_IE >= 0x600) {
1880     enum {
1881         TVGN_NEXTSELECTED = 11
1882     }
1883 }
1884 
1885 enum {
1886     TVN_SELCHANGINGA = TVN_FIRST - 1,
1887     TVN_SELCHANGEDA = TVN_FIRST - 2,
1888     TVN_GETDISPINFOA = TVN_FIRST - 3,
1889     TVN_SETDISPINFOA = TVN_FIRST - 4,
1890     TVN_ITEMEXPANDINGA = TVN_FIRST - 5,
1891     TVN_ITEMEXPANDEDA = TVN_FIRST - 6,
1892     TVN_BEGINDRAGA = TVN_FIRST - 7,
1893     TVN_BEGINRDRAGA = TVN_FIRST - 8,
1894     TVN_DELETEITEMA = TVN_FIRST - 9,
1895     TVN_BEGINLABELEDITA = TVN_FIRST - 10,
1896     TVN_ENDLABELEDITA = TVN_FIRST - 11,
1897     TVN_KEYDOWN = TVN_FIRST - 12,
1898     TVN_SELCHANGINGW = TVN_FIRST - 50,
1899     TVN_SELCHANGEDW = TVN_FIRST - 51,
1900     TVN_GETDISPINFOW = TVN_FIRST - 52,
1901     TVN_SETDISPINFOW = TVN_FIRST - 53,
1902     TVN_ITEMEXPANDINGW = TVN_FIRST - 54,
1903     TVN_ITEMEXPANDEDW = TVN_FIRST - 55,
1904     TVN_BEGINDRAGW = TVN_FIRST - 56,
1905     TVN_BEGINRDRAGW = TVN_FIRST - 57,
1906     TVN_DELETEITEMW = TVN_FIRST - 58,
1907     TVN_BEGINLABELEDITW = TVN_FIRST - 59,
1908     TVN_ENDLABELEDITW = TVN_FIRST - 60
1909 }
1910 
1911 static if (_WIN32_IE >= 0x400) {
1912     enum {
1913         TVNRET_DEFAULT = 0,
1914         TVNRET_SKIPOLD = 1,
1915         TVNRET_SKIPNEW = 2,
1916         TVN_GETINFOTIPA = TVN_FIRST - 13,
1917         TVN_GETINFOTIPW = TVN_FIRST - 14,
1918         TVN_SINGLEEXPAND = TVN_FIRST - 15
1919     }
1920 }
1921 
1922 enum {
1923     TVIF_DI_SETITEM = 0x1000
1924 }
1925 
1926 enum {
1927     TVHT_NOWHERE = 1,
1928     TVHT_ONITEMICON = 2,
1929     TVHT_ONITEMLABEL = 4,
1930     TVHT_ONITEMINDENT = 8,
1931     TVHT_ONITEMBUTTON = 16,
1932     TVHT_ONITEMRIGHT = 32,
1933     TVHT_ONITEMSTATEICON = 64,
1934     TVHT_ABOVE = 256,
1935     TVHT_BELOW = 512,
1936     TVHT_TORIGHT = 1024,
1937     TVHT_TOLEFT = 2048,
1938     TCHT_NOWHERE = 1,
1939     TCHT_ONITEMICON = 2,
1940     TCHT_ONITEMLABEL = 4,
1941     TVHT_ONITEM = TVHT_ONITEMICON | TVHT_ONITEMLABEL
1942         | TVHT_ONITEMSTATEICON,
1943     TCHT_ONITEM = TCHT_ONITEMICON | TCHT_ONITEMLABEL
1944 }
1945 
1946 enum {
1947     TCS_TABS = 0,
1948     TCS_RIGHTJUSTIFY = 0,
1949     TCS_SINGLELINE = 0,
1950     TCS_FORCEICONLEFT = 16,
1951     TCS_FORCELABELLEFT = 32,
1952     TCS_BUTTONS = 256,
1953     TCS_MULTILINE = 512,
1954     TCS_FIXEDWIDTH = 1024,
1955     TCS_RAGGEDRIGHT = 2048,
1956     TCS_FOCUSONBUTTONDOWN = 0x1000,
1957     TCS_OWNERDRAWFIXED = 0x2000,
1958     TCS_TOOLTIPS = 0x4000,
1959     TCS_FOCUSNEVER = 0x8000
1960 }
1961 
1962 static if (_WIN32_IE >= 0x300) {
1963     enum {
1964         TCS_BOTTOM = 2,
1965         TCS_RIGHT = 2,
1966         TCS_VERTICAL = 128,
1967         TCS_SCROLLOPPOSITE = 0x0001,
1968         TCS_HOTTRACK = 0x0040,
1969         TCS_MULTISELECT = 0x0004
1970     }
1971 }
1972 
1973 static if (_WIN32_IE >= 0x400) {
1974     enum {
1975         TCS_FLATBUTTONS = 0x0008,
1976         TCS_EX_FLATSEPARATORS = 0x00000001,
1977         TCS_EX_REGISTERDROP = 0x00000002
1978     }
1979 }
1980 
1981 enum {
1982     TCIF_TEXT = 1,
1983     TCIF_IMAGE = 2,
1984     TCIF_RTLREADING = 4,
1985     TCIF_PARAM = 8
1986 }
1987 
1988 static if (_WIN32_IE >= 0x400) {
1989     enum {
1990         TCIF_STATE = 16
1991     }
1992 }
1993 
1994 enum {
1995     TCIS_BUTTONPRESSED = 1
1996 }
1997 
1998 static if (_WIN32_IE >= 0x400) {
1999     enum {
2000         TCIS_HIGHLIGHTED = 2
2001     }
2002 }
2003 
2004 enum {
2005     TCM_FIRST = 0x1300,
2006     TCM_GETIMAGELIST = TCM_FIRST + 2,
2007     TCM_SETIMAGELIST,
2008     TCM_GETITEMCOUNT,
2009     TCM_GETITEMA,
2010     TCM_SETITEMA,
2011     TCM_INSERTITEMA,
2012     TCM_DELETEITEM,
2013     TCM_DELETEALLITEMS,
2014     TCM_GETITEMRECT,
2015     TCM_GETCURSEL,
2016     TCM_SETCURSEL,
2017     TCM_HITTEST,
2018     TCM_SETITEMEXTRA, // = TCM_FIRST + 14
2019     TCM_ADJUSTRECT = TCM_FIRST + 40,
2020     TCM_SETITEMSIZE,
2021     TCM_REMOVEIMAGE,
2022     TCM_SETPADDING,
2023     TCM_GETROWCOUNT,
2024     TCM_GETTOOLTIPS,
2025     TCM_SETTOOLTIPS,
2026     TCM_GETCURFOCUS,
2027     TCM_SETCURFOCUS,
2028     TCM_SETMINTABWIDTH,
2029     TCM_DESELECTALL, // = TCM_FIRST + 50
2030     TCM_GETITEMW = TCM_FIRST + 60,
2031     TCM_SETITEMW = TCM_FIRST + 61,
2032     TCM_INSERTITEMW = TCM_FIRST + 62
2033 }
2034 
2035 static if (_WIN32_IE >= 0x0400) {
2036     enum {
2037         TCM_HIGHLIGHTITEM = TCM_FIRST + 51,
2038         TCM_SETEXTENDEDSTYLE = TCM_FIRST + 52,
2039         TCM_GETEXTENDEDSTYLE = TCM_FIRST + 53,
2040         TCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
2041         TCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
2042     }
2043 }
2044 
2045 enum {
2046     TCN_KEYDOWN = TCN_FIRST,
2047     TCN_SELCHANGE = TCN_FIRST - 1,
2048     TCN_SELCHANGING = TCN_FIRST - 2
2049 }
2050 
2051 enum {
2052     NM_OUTOFMEMORY = NM_FIRST - 1,
2053     NM_CLICK = NM_FIRST - 2,
2054     NM_DBLCLK = NM_FIRST - 3,
2055     NM_RETURN = NM_FIRST - 4,
2056     NM_RCLICK = NM_FIRST - 5,
2057     NM_RDBLCLK = NM_FIRST - 6,
2058     NM_SETFOCUS = NM_FIRST - 7,
2059     NM_KILLFOCUS = NM_FIRST - 8,
2060     NM_CUSTOMDRAW = NM_FIRST - 12,
2061     NM_HOVER = NM_FIRST - 13,
2062     NM_NCHITTEST = NM_FIRST - 14,
2063     NM_KEYDOWN = NM_FIRST - 15,
2064     NM_RELEASEDCAPTURE = NM_FIRST - 16,
2065     NM_SETCURSOR = NM_FIRST - 17,
2066     NM_CHAR = NM_FIRST - 18,
2067     NM_TOOLTIPSCREATED = NM_FIRST - 19
2068 }
2069 
2070 enum {
2071     SBARS_SIZEGRIP = 256
2072 }
2073 
2074 /*enum {
2075     CCM_FIRST            = 0x2000,
2076     CCM_LAST             = CCM_FIRST + 0x200,
2077     CCM_SETBKCOLOR       = 8193,
2078     CCM_SETCOLORSCHEME   = 8194,
2079     CCM_GETCOLORSCHEME   = 8195,
2080     CCM_GETDROPTARGET    = 8196,
2081     CCM_SETUNICODEFORMAT = 8197,
2082     CCM_GETUNICODEFORMAT = 8198,
2083     CCM_SETVERSION       = 0x2007,
2084     CCM_GETVERSION       = 0x2008,
2085     CCM_SETNOTIFYWINDOW  = 0x2009
2086 }*/
2087 
2088 static if (_WIN32_WINNT >= 0x501) {
2089     enum {
2090         CCM_SETWINDOWTHEME = 0x200b,
2091         CCM_DPISCALE = 0x200c,
2092 
2093         RB_GETBANDMARGINS = WM_USER + 40,
2094         RB_SETWINDOWTHEME = CCM_SETWINDOWTHEME,
2095         TB_SETWINDOWTHEME = CCM_SETWINDOWTHEME,
2096         TTM_SETWINDOWTHEME = CCM_SETWINDOWTHEME,
2097     }
2098 }
2099 
2100 enum {
2101     ICC_LISTVIEW_CLASSES = 1,
2102     ICC_TREEVIEW_CLASSES = 2,
2103     ICC_BAR_CLASSES = 4,
2104     ICC_TAB_CLASSES = 8,
2105     ICC_UPDOWN_CLASS = 16,
2106     ICC_PROGRESS_CLASS = 32,
2107     ICC_HOTKEY_CLASS = 64,
2108     ICC_ANIMATE_CLASS = 128,
2109     ICC_WIN95_CLASSES = 255,
2110     ICC_DATE_CLASSES = 256,
2111     ICC_USEREX_CLASSES = 512,
2112     ICC_COOL_CLASSES = 1024
2113 }
2114 
2115 static if (_WIN32_IE >= 0x400) {
2116     enum {
2117         INFOTIPSIZE = 1024,
2118         ICC_INTERNET_CLASSES = 2048,
2119         ICC_PAGESCROLLER_CLASS = 4096,
2120         ICC_NATIVEFNTCTL_CLASS = 8192
2121     }
2122 }
2123 
2124 static if (_WIN32_WINNT >= 0x501) {
2125     enum {
2126         ICC_STANDARD_CLASSES = 0x00004000,
2127         ICC_LINK_CLASS = 0x00008000
2128     }
2129 }
2130 
2131 enum {
2132     GDTR_MIN = 1,
2133     GDTR_MAX = 2
2134 }
2135 
2136 enum {
2137     GMR_VISIBLE,
2138     GMR_DAYSTATE
2139 }
2140 
2141 enum {
2142     GDT_ERROR = -1,
2143     GDT_VALID = 0,
2144     GDT_NONE = 1
2145 }
2146 
2147 enum {
2148     DTS_SHORTDATEFORMAT = 0,
2149     DTS_UPDOWN = 1,
2150     DTS_SHOWNONE = 2,
2151     DTS_LONGDATEFORMAT = 4,
2152     DTS_TIMEFORMAT = 9,
2153     DTS_APPCANPARSE = 16,
2154     DTS_RIGHTALIGN = 32
2155 }
2156 
2157 static if (_WIN32_IE >= 0x500) {
2158     enum {
2159         DTS_SHORTDATECENTURYFORMAT = 0x000C
2160     }
2161 }
2162 
2163 enum {
2164     MCS_DAYSTATE = 1,
2165     MCS_MULTISELECT = 2,
2166     MCS_WEEKNUMBERS = 4
2167 }
2168 
2169 static if (_WIN32_IE >= 0x400) {
2170     enum {
2171         MCS_NOTODAYCIRCLE = 0x0008,
2172         MCS_NOTODAY = 0x0010
2173     }
2174 } else {
2175     enum {
2176         MCS_NOTODAY = 0x0008
2177     }
2178 }
2179 
2180 enum {
2181     DTM_FIRST = 0x1000,
2182     DTM_GETSYSTEMTIME = 0x1001,
2183     DTM_SETSYSTEMTIME = 0x1002,
2184     DTM_GETRANGE = 0x1003,
2185     DTM_SETRANGE = 0x1004,
2186     DTM_SETFORMATA = 0x1005,
2187     DTM_SETMCCOLOR = 0x1006,
2188     DTM_GETMCCOLOR = 0x1007,
2189     DTM_GETMONTHCAL = 0x1008,
2190     DTM_SETMCFONT = 0x1009,
2191     DTM_GETMCFONT = 0x100a,
2192     DTM_SETFORMATW = 0x1050
2193 }
2194 
2195 static if (_WIN32_WINNT >= 0x600) {
2196     enum {
2197         DTM_SETMCSTYLE = DTM_FIRST + 11,
2198         DTM_GETMCSTYLE,
2199         DTM_CLOSEMONTHCAL,
2200         DTM_GETDATETIMEPICKERINFO,
2201         DTM_GETIDEALSIZE,
2202     }
2203 }
2204 
2205 enum {
2206     DTN_USERSTRINGA = -758U,
2207     DTN_USERSTRINGW = -745U,
2208     DTN_WMKEYDOWNA = -757U,
2209     DTN_WMKEYDOWNW = -744U,
2210     DTN_FORMATA = -756U,
2211     DTN_FORMATW = -743U,
2212     DTN_FORMATQUERYA = -755U,
2213     DTN_FORMATQUERYW = -742U,
2214     DTN_DROPDOWN = -754U,
2215     DTN_CLOSEUP = -753U,
2216     DTN_DATETIMECHANGE = -759U,
2217 }
2218 
2219 enum {
2220     MCM_FIRST = 0x1000,
2221     MCM_GETCURSEL = 0x1001,
2222     MCM_SETCURSEL = 0x1002,
2223     MCM_GETMAXSELCOUNT = 0x1003,
2224     MCM_SETMAXSELCOUNT = 0x1004,
2225     MCM_GETSELRANGE = 0x1005,
2226     MCM_SETSELRANGE = 0x1006,
2227     MCM_GETMONTHRANGE = 0x1007,
2228     MCM_SETDAYSTATE = 0x1008,
2229     MCM_GETMINREQRECT = 0x1009,
2230     MCM_SETCOLOR = 0x100a,
2231     MCM_GETCOLOR = 0x100b,
2232     MCM_SETTODAY = 0x100c,
2233     MCM_GETTODAY = 0x100d,
2234     MCM_HITTEST = 0x100e,
2235     MCM_SETFIRSTDAYOFWEEK = 0x100f,
2236     MCM_GETFIRSTDAYOFWEEK = 0x1010,
2237     MCM_GETRANGE = 0x1011,
2238     MCM_SETRANGE = 0x1012,
2239     MCM_GETMONTHDELTA = 0x1013,
2240     MCM_SETMONTHDELTA = 0x1014,
2241     MCM_GETMAXTODAYWIDTH = 0x1015,
2242     MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT,
2243     MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT
2244 }
2245 
2246 static if (_WIN32_WINNT >= 0x600) {
2247     enum {
2248         MCM_GETCURRENTVIEW = MCM_FIRST + 22,
2249         MCM_GETCALENDARCOUNT,
2250         MCM_GETCALENDARGRIDINFO,
2251         MCM_GETCALID = MCM_FIRST + 27,
2252         MCM_SETCALID,
2253         MCM_SIZERECTTOMIN,
2254         MCM_SETCALENDARBORDER,
2255         MCM_GETCALENDARBORDER,
2256         MCM_SETCURRENTVIEW,
2257     }
2258 }
2259 
2260 enum {
2261     MCN_SELCHANGE = -749U,
2262     MCN_GETDAYSTATE = -747U,
2263     MCN_SELECT = -746U
2264 }
2265 
2266 enum {
2267     ODT_HEADER = 100,
2268     ODT_TAB,
2269     ODT_LISTVIEW // = 102
2270 }
2271 
2272 enum {
2273     SB_SETBKCOLOR = 0x2001
2274 }
2275 
2276 static if (_WIN32_IE >= 0x300) {
2277     enum {
2278         SB_ISSIMPLE = 1038
2279     }
2280 
2281     enum {
2282         MCSC_BACKGROUND,
2283         MCSC_TEXT,
2284         MCSC_TITLEBK,
2285         MCSC_TITLETEXT,
2286         MCSC_MONTHBK,
2287         MCSC_TRAILINGTEXT // = 5
2288     }
2289 }
2290 
2291 static if (_WIN32_IE >= 0x400) {
2292     enum {
2293         MCHT_TITLE = 0x10000,
2294         MCHT_CALENDAR = 0x20000,
2295         MCHT_TODAYLINK = 0x30000,
2296         MCHT_NEXT = 0x1000000,
2297         MCHT_PREV = 0x2000000,
2298         MCHT_NOWHERE = 0x00,
2299         MCHT_TITLEBK = MCHT_TITLE,
2300         MCHT_TITLEMONTH = MCHT_TITLE | 0x0001,
2301         MCHT_TITLEYEAR = MCHT_TITLE | 0x0002,
2302         MCHT_TITLEBTNNEXT = MCHT_TITLE | MCHT_NEXT | 0x0003,
2303         MCHT_TITLEBTNPREV = MCHT_TITLE | MCHT_PREV | 0x0003,
2304         MCHT_CALENDARBK = MCHT_CALENDAR,
2305         MCHT_CALENDARDATE = MCHT_CALENDAR | 0x0001,
2306         MCHT_CALENDARDATENEXT = MCHT_CALENDARDATE | MCHT_NEXT,
2307         MCHT_CALENDARDATEPREV = MCHT_CALENDARDATE | MCHT_PREV,
2308         MCHT_CALENDARDAY = MCHT_CALENDAR | 0x0002,
2309         MCHT_CALENDARWEEKNUM = MCHT_CALENDAR | 0x0003
2310     }
2311 }
2312 
2313 enum {
2314     RBS_TOOLTIPS = 256,
2315     RBS_VARHEIGHT = 512,
2316     RBS_BANDBORDERS = 1024,
2317     RBS_FIXEDORDER = 2048
2318 }
2319 
2320 enum {
2321     RBIM_IMAGELIST = 1
2322 }
2323 
2324 enum {
2325     RB_SETCOLORSCHEME = CCM_SETCOLORSCHEME,
2326     RB_GETCOLORSCHEME = CCM_GETCOLORSCHEME
2327 }
2328 
2329 enum {
2330     RBBS_BREAK = 0x0001,
2331     RBBS_FIXEDSIZE = 0x0002,
2332     RBBS_CHILDEDGE = 0x0004,
2333     RBBS_HIDDEN = 0x0008,
2334     RBBS_NOVERT = 0x0010,
2335     RBBS_FIXEDBMP = 0x0020,
2336     RBBS_VARIABLEHEIGHT = 0x0040,
2337     RBBS_GRIPPERALWAYS = 0x0080,
2338     RBBS_NOGRIPPER = 0x0100
2339 }
2340 
2341 static if (_WIN32_IE >= 0x500) {
2342     enum {
2343         RBBS_USECHEVRON = 0x0200
2344     }
2345 }
2346 
2347 static if (_WIN32_IE >= 0x501) {
2348     enum {
2349         RBBS_HIDETITLE = 0x0400,
2350         RBBS_TOPALIGN = 0x0800
2351     }
2352 }
2353 
2354 enum {
2355     RBBIM_STYLE = 1,
2356     RBBIM_COLORS = 2,
2357     RBBIM_TEXT = 4,
2358     RBBIM_IMAGE = 8,
2359     RBBIM_CHILD = 16,
2360     RBBIM_CHILDSIZE = 32,
2361     RBBIM_SIZE = 64,
2362     RBBIM_BACKGROUND = 128,
2363     RBBIM_ID = 256
2364 }
2365 
2366 enum {
2367     RB_INSERTBANDA = WM_USER + 1,
2368     RB_DELETEBAND,
2369     RB_GETBARINFO,
2370     RB_SETBARINFO, // = WM_USER + 4
2371     RB_SETBANDINFOA = WM_USER + 6,
2372     RB_SETPARENT = WM_USER + 7,
2373     RB_INSERTBANDW = WM_USER + 10,
2374     RB_SETBANDINFOW,
2375     RB_GETBANDCOUNT,
2376     RB_GETROWCOUNT,
2377     RB_GETROWHEIGHT // = WM_USER + 14,
2378 }
2379 
2380 enum {
2381     RBN_HEIGHTCHANGE = RBN_FIRST
2382 }
2383 
2384 static if (_WIN32_IE >= 0x300) {
2385     enum {
2386         LVN_ODCACHEHINT = LVN_FIRST - 13,
2387         LVN_ODFINDITEMA = LVN_FIRST - 52,
2388         LVN_ODFINDITEMW = LVN_FIRST - 79,
2389         LVN_ITEMACTIVATE = LVN_FIRST - 14,
2390         LVN_ODSTATECHANGED = LVN_FIRST - 15
2391     }
2392 
2393     version (Unicode) {
2394         enum {
2395             LVN_ODFINDITEM = LVN_ODFINDITEMW
2396         }
2397     } else {
2398         enum {
2399             LVN_ODFINDITEM = LVN_ODFINDITEMA
2400         }
2401     }
2402 }
2403 
2404 static if (_WIN32_IE >= 0x400) {
2405     enum {
2406         SB_SETICON = 1039,
2407         SB_SETTIPTEXTA,
2408         SB_SETTIPTEXTW,
2409         SB_GETTIPTEXTA,
2410         SB_GETTIPTEXTW,
2411         SB_GETICON, // = 1044
2412         SB_SETUNICODEFORMAT = 0x2005,
2413         SB_GETUNICODEFORMAT = 0x2006
2414     }
2415 
2416     enum {
2417         PGF_INVISIBLE = 0,
2418         PGF_NORMAL = 1,
2419         PGF_GRAYED = 2,
2420         PGF_DEPRESSED = 4,
2421         PGF_HOT = 8
2422     }
2423 
2424     enum {
2425         PGB_TOPORLEFT,
2426         PGB_BOTTOMORRIGHT
2427     }
2428 
2429     enum {
2430         PGF_SCROLLUP = 1,
2431         PGF_SCROLLDOWN = 2,
2432         PGF_SCROLLLEFT = 4,
2433         PGF_SCROLLRIGHT = 8
2434     }
2435 
2436     enum {
2437         PGK_SHIFT = 1,
2438         PGK_CONTROL = 2,
2439         PGK_MENU = 4
2440     }
2441 
2442     enum {
2443         PGF_CALCWIDTH = 1,
2444         PGF_CALCHEIGHT = 2
2445     }
2446 
2447     enum {
2448         PGM_FIRST = 0x1400,
2449         PGM_SETCHILD = PGM_FIRST + 1,
2450         PGM_RECALCSIZE,
2451         PGM_FORWARDMOUSE,
2452         PGM_SETBKCOLOR,
2453         PGM_GETBKCOLOR,
2454         PGM_SETBORDER,
2455         PGM_GETBORDER,
2456         PGM_SETPOS,
2457         PGM_GETPOS,
2458         PGM_SETBUTTONSIZE,
2459         PGM_GETBUTTONSIZE,
2460         PGM_GETBUTTONSTATE, // = PGM_FIRST + 12
2461         PGM_GETDROPTARGET = CCM_GETDROPTARGET
2462     }
2463 
2464     enum {
2465         RBS_REGISTERDROP = 4096,
2466         RBS_AUTOSIZE = 8192,
2467         RBS_VERTICALGRIPPER = 16384,
2468         RBS_DBLCLKTOGGLE = 32768
2469     }
2470 
2471     enum {
2472         RBBIM_IDEALSIZE = 512,
2473         RBBIM_LPARAM = 1024,
2474         RBBIM_HEADERSIZE = 2048
2475     }
2476 
2477     enum {
2478         RB_HITTEST = WM_USER + 8,
2479         RB_GETRECT = WM_USER + 9,
2480         RB_IDTOINDEX = WM_USER + 16,
2481         RB_GETTOOLTIPS,
2482         RB_SETTOOLTIPS,
2483         RB_SETBKCOLOR,
2484         RB_GETBKCOLOR,
2485         RB_SETTEXTCOLOR,
2486         RB_GETTEXTCOLOR,
2487         RB_SIZETORECT,
2488         RB_BEGINDRAG,
2489         RB_ENDDRAG,
2490         RB_DRAGMOVE,
2491         RB_GETBARHEIGHT,
2492         RB_GETBANDINFOW,
2493         RB_GETBANDINFOA,
2494         RB_MINIMIZEBAND,
2495         RB_MAXIMIZEBAND, // = WM_USER + 31
2496         RB_GETDROPTARGET = CCM_GETDROPTARGET,
2497         RB_GETBANDBORDERS = WM_USER + 34,
2498         RB_SHOWBAND = WM_USER + 35,
2499         RB_SETPALETTE = WM_USER + 37,
2500         RB_GETPALETTE = WM_USER + 38,
2501         RB_MOVEBAND = WM_USER + 39,
2502         RB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
2503         RB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
2504     }
2505 
2506     enum {
2507         RBN_GETOBJECT = RBN_FIRST - 1,
2508         RBN_LAYOUTCHANGED = RBN_FIRST - 2,
2509         RBN_AUTOSIZE = RBN_FIRST - 3,
2510         RBN_BEGINDRAG = RBN_FIRST - 4,
2511         RBN_ENDDRAG = RBN_FIRST - 5,
2512         RBN_DELETINGBAND = RBN_FIRST - 6,
2513         RBN_DELETEDBAND = RBN_FIRST - 7,
2514         RBN_CHILDSIZE = RBN_FIRST - 8
2515     }
2516 
2517     enum {
2518         RBNM_ID = 1,
2519         RBNM_STYLE = 2,
2520         RBNM_LPARAM = 4
2521     }
2522 
2523     enum {
2524         RBHT_NOWHERE = 1,
2525         RBHT_CAPTION,
2526         RBHT_CLIENT,
2527         RBHT_GRABBER
2528     }
2529 
2530     version (Unicode) {
2531         alias SB_SETTIPTEXT = SB_SETTIPTEXTW;
2532         alias SB_GETTIPTEXT = SB_GETTIPTEXTW;
2533         alias RB_GETBANDINFO = RB_GETBANDINFOW;
2534     } else {
2535         alias SB_SETTIPTEXT = SB_SETTIPTEXTA;
2536         alias SB_GETTIPTEXT = SB_GETTIPTEXTA;
2537         alias RB_GETBANDINFO = RB_GETBANDINFOA;
2538     }
2539 } else {
2540     enum {
2541         RB_GETBANDINFO = WM_USER + 5
2542     }
2543 }
2544 
2545 static if (_WIN32_IE >= 0x500) {
2546     enum {
2547         RB_PUSHCHEVRON = WM_USER + 43,
2548     }
2549 }
2550 
2551 static if (_WIN32_IE >= 0x600) {
2552     enum {
2553         RB_SETEXTENDEDSTYLE = WM_USER + 41,
2554         RB_GETEXTENDEDSTYLE = WM_USER + 42,
2555     }
2556 }
2557 
2558 static if (_WIN32_WINNT >= 0x500) {
2559     enum {
2560         RB_SETBANDWIDTH = WM_USER + 44,
2561     }
2562 }
2563 
2564 static if (_WIN32_WINNT >= 0x501) {
2565     enum {
2566         ECM_FIRST = 0x1500,
2567         BCM_FIRST = 0x1600,
2568 
2569         BCM_GETIDEALSIZE = BCM_FIRST + 0x0001,
2570         BCM_SETIMAGELIST = BCM_FIRST + 0x0002,
2571         BCM_GETIMAGELIST = BCM_FIRST + 0x0003,
2572         BCM_SETTEXTMARGIN = BCM_FIRST + 0x0004,
2573         BCM_GETTEXTMARGIN = BCM_FIRST + 0x0005,
2574 
2575         BCN_HOTITEMCHANGE = BCN_FIRST + 0x0001,
2576     }
2577 
2578     struct NMBCHOTITEM {
2579         NMHDR hdr;
2580         DWORD dwFlags;
2581     }
2582 
2583     alias LPNMBCHOTITEM = NMBCHOTITEM*;
2584 }
2585 
2586 static if (_WIN32_WINNT >= 0x600) {
2587     enum {
2588         BST_DROPDOWNPUSHED = 0x0400,
2589 
2590         BS_SPLITBUTTON = 0x0000_000C,
2591         BS_DEFSPLITBUTTON = 0x0000_000D,
2592         BS_COMMANDLINK = 0x0000_000E,
2593         BS_DEFCOMMANDLINK = 0x0000_000F,
2594 
2595         BCSIF_GLYPH = 0x0001,
2596         BCSIF_IMAGE = 0x0002,
2597         BCSIF_STYLE = 0x0004,
2598         BCSIF_SIZE = 0x0008,
2599 
2600         BCSS_NOSPLIT = 0x0001,
2601         BCSS_STRETCH = 0x0002,
2602         BCSS_ALIGNLEFT = 0x0004,
2603         BCSS_IMAGE = 0x0008,
2604 
2605         BCM_SETDROPDOWNSTATE = BCM_FIRST + 0x0006,
2606         BCM_SETSPLITINFO = BCM_FIRST + 0x0007,
2607         BCM_GETSPLITINFO = BCM_FIRST + 0x0008,
2608         BCM_SETNOTE = BCM_FIRST + 0x0009,
2609         BCM_GETNOTE = BCM_FIRST + 0x000A,
2610         BCM_GETNOTELENGTH = BCM_FIRST + 0x000B,
2611         BCM_SETSHIELD = BCM_FIRST + 0x000C,
2612 
2613         BCN_DROPDOWN = BCN_FIRST + 0x0002,
2614     }
2615 
2616     enum HIMAGELIST BCCL_NOGLYPH = cast(HIMAGELIST)-1;
2617 
2618     struct BUTTON_SPLITINFO {
2619         UINT mask;
2620         HIMAGELIST himlGlyph;
2621         UINT uSplitStyle;
2622         SIZE size;
2623     }
2624 
2625     alias PBUTTON_SPLITINFO = BUTTON_SPLITINFO*;
2626 }
2627 
2628 enum {
2629     CBEM_INSERTITEMA = WM_USER + 1,
2630     CBEM_SETIMAGELIST,
2631     CBEM_GETIMAGELIST,
2632     CBEM_GETITEMA,
2633     CBEM_SETITEMA,
2634     CBEM_GETCOMBOCONTROL,
2635     CBEM_GETEDITCONTROL,
2636     CBEM_SETEXSTYLE,
2637     CBEM_GETEXSTYLE, // = WM_USER + 9)
2638     CBEM_DELETEITEM = CB_DELETESTRING
2639 }
2640 
2641 static if (_WIN32_IE >= 0x400) {
2642     enum {
2643         CBEM_SETEXTENDEDSTYLE = WM_USER + 14,
2644         CBEM_GETEXTENDEDSTYLE = WM_USER + 9,
2645         CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT,
2646         CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT
2647     }
2648 }
2649 
2650 enum {
2651     CBEM_HASEDITCHANGED = WM_USER + 10,
2652     CBEM_INSERTITEMW = WM_USER + 11,
2653     CBEM_SETITEMW = WM_USER + 12,
2654     CBEM_GETITEMW = WM_USER + 13
2655 }
2656 
2657 static if (_WIN32_WINNT >= 0x501) {
2658     enum {
2659         CBEM_SETWINDOWTHEME = CCM_SETWINDOWTHEME
2660     }
2661 }
2662 
2663 enum {
2664     DA_LAST = 0x7fffffff
2665 }
2666 
2667 enum {
2668     DPA_APPEND = 0x7fffffff,
2669     DPA_ERR = -1
2670 }
2671 
2672 enum {
2673     DSA_APPEND = 0x7fffffff,
2674     DSA_ERR = -1
2675 }
2676 
2677 enum {
2678     DPAS_SORTED = 1,
2679     DPAS_INSERTBEFORE = 2,
2680     DPAS_INSERTAFTER = 4
2681 }
2682 
2683 static if (_WIN32_IE >= 0x400) {
2684     enum {
2685         WSB_PROP_CYVSCROLL = 1,
2686         WSB_PROP_CXHSCROLL = 2,
2687         WSB_PROP_CYHSCROLL = 4,
2688         WSB_PROP_CXVSCROLL = 8,
2689         WSB_PROP_CXHTHUMB = 16,
2690         WSB_PROP_CYVTHUMB = 32,
2691         WSB_PROP_VBKGCOLOR = 64,
2692         WSB_PROP_HBKGCOLOR = 128,
2693         WSB_PROP_VSTYLE = 256,
2694         WSB_PROP_HSTYLE = 512,
2695         WSB_PROP_WINSTYLE = 1024,
2696         WSB_PROP_PALETTE = 2048,
2697         WSB_PROP_MASK = 0xfff,
2698         FSB_FLAT_MODE = 2,
2699         FSB_ENCARTA_MODE = 1,
2700         FSB_REGULAR_MODE = 0
2701     }
2702 }
2703 
2704 static if (_WIN32_WINNT >= 0x501) {
2705     enum {
2706         LIF_ITEMINDEX = 1,
2707         LIF_STATE = 2,
2708         LIF_ITEMID = 4,
2709         LIF_URL = 8
2710     }
2711 
2712     enum {
2713         LIS_FOCUSED = 1,
2714         LIS_ENABLED = 2,
2715         LIS_VISITED = 4
2716     }
2717 
2718     enum {
2719         LM_HITTEST = WM_USER + 768,
2720         LM_GETIDEALHEIGHT,
2721         LM_SETITEM,
2722         LM_GETITEM, // = WM_USER + 771
2723         LM_GETIDEALSIZE = LM_GETIDEALHEIGHT,
2724     }
2725 
2726     enum size_t MAX_LINKID_TEXT = 48;
2727     enum size_t L_MAX_URL_LENGTH = 2084;
2728 }
2729 
2730 struct TBMETRICS {
2731     UINT cbSize = TBMETRICS.sizeof;
2732     DWORD dwMask;
2733     int cxPad;
2734     int cyPad;
2735     int cxBarPad;
2736     int cyBarPad;
2737     int cxButtonSpacing;
2738     int cyButtonSpacing;
2739 }
2740 
2741 alias LPTBMETRICS = TBMETRICS*;
2742 
2743 static if (_WIN32_WINNT >= 0x501) {
2744     struct TTGETTITLE {
2745         DWORD dwSize = TTGETTITLE.sizeof;
2746         UINT uTitleBitmap;
2747         UINT cch;
2748         WCHAR* pszTitle;
2749     }
2750 
2751     alias PTTGETTITLE = TTGETTITLE*;
2752 }
2753 
2754 static if (_WIN32_WINNT >= 0x600) {
2755     struct MCGRIDINFO {
2756         UINT cbSize;
2757         DWORD dwPart;
2758         DWORD dwFlags;
2759         int iCalendar;
2760         int iRow;
2761         int iCol;
2762         BOOL bSelected;
2763         SYSTEMTIME stStart;
2764         SYSTEMTIME stEnd;
2765         RECT rc;
2766         PWSTR pszName;
2767         size_t cchName;
2768     }
2769 
2770     alias PMCGRIDINFO = MCGRIDINFO*;
2771 
2772     struct DATETIMEPICKERINFO {
2773         DWORD cbSize;
2774         RECT rcCheck;
2775         DWORD stateCheck;
2776         RECT rcButton;
2777         DWORD stateButton;
2778         HWND hwndEdit;
2779         HWND hwndUD;
2780         HWND hwndDropDown;
2781     }
2782 
2783     alias LPDATETIMEPICKERINFO = DATETIMEPICKERINFO*;
2784 }
2785 
2786 struct COMBOBOXEXITEMA {
2787     UINT mask;
2788     INT_PTR iItem;
2789     LPSTR pszText;
2790     int cchTextMax;
2791     int iImage;
2792     int iSelectedImage;
2793     int iOverlay;
2794     int iIndent;
2795     LPARAM lParam;
2796 }
2797 
2798 alias PCOMBOBOXEXITEMA = COMBOBOXEXITEMA*;
2799 alias PCCOMBOEXITEMA = const(COMBOBOXEXITEMA)*;
2800 
2801 struct COMBOBOXEXITEMW {
2802     UINT mask;
2803     INT_PTR iItem;
2804     LPWSTR pszText;
2805     int cchTextMax;
2806     int iImage;
2807     int iSelectedImage;
2808     int iOverlay;
2809     int iIndent;
2810     LPARAM lParam;
2811 }
2812 
2813 alias PCOMBOBOXEXITEMW = COMBOBOXEXITEMW*;
2814 alias PCCOMBOEXITEMW = const(COMBOBOXEXITEMW)*;
2815 
2816 static if (_WIN32_IE >= 0x400) {
2817     struct NMCOMBOBOXEXA {
2818         NMHDR hdr;
2819         COMBOBOXEXITEMA ceItem;
2820     }
2821 
2822     alias PNMCOMBOBOXEXA = NMCOMBOBOXEXA*;
2823 
2824     struct NMCOMBOBOXEXW {
2825         NMHDR hdr;
2826         COMBOBOXEXITEMW ceItem;
2827     }
2828 
2829     alias PNMCOMBOBOXEXW = NMCOMBOBOXEXW*;
2830 
2831     struct NMCBEDRAGBEGINW {
2832         NMHDR hdr;
2833         int iItemid;
2834         WCHAR[CBEMAXSTRLEN] szText = 0;
2835     }
2836 
2837     alias NMCBEDRAGBEGINW* LPNMCBEDRAGBEGINW, PNMCBEDRAGBEGINW;
2838 
2839     struct NMCBEDRAGBEGINA {
2840         NMHDR hdr;
2841         int iItemid;
2842         char[CBEMAXSTRLEN] szText = 0;
2843     }
2844 
2845     alias NMCBEDRAGBEGINA* LPNMCBEDRAGBEGINA, PNMCBEDRAGBEGINA;
2846 
2847     struct NMIPADDRESS {
2848         NMHDR hdr;
2849         int iField;
2850         int iValue;
2851     }
2852 
2853     alias LPNMIPADDRESS = NMIPADDRESS*;
2854 
2855     align(1)
2856     struct NMLVKEYDOWN {
2857     align(1):
2858         NMHDR hdr;
2859         WORD wVKey;
2860         UINT flags;
2861     }
2862 
2863     alias LPNMLVKEYDOWN = NMLVKEYDOWN*;
2864 
2865     struct NMPGCALCSIZE {
2866         NMHDR hdr;
2867         DWORD dwFlag;
2868         int iWidth;
2869         int iHeight;
2870     }
2871 
2872     alias LPNMPGCALCSIZE = NMPGCALCSIZE*;
2873 
2874     align(1)
2875     struct NMPGSCROLL {
2876     align(1):
2877         NMHDR hdr;
2878         WORD fwKeys; // Note: this should be WORD if MSDN document says wrong
2879         RECT rcParent;
2880         int iDir;
2881         int iXpos;
2882         int iYpos;
2883         int iScroll;
2884     }
2885 
2886     alias LPNMPGSCROLL = NMPGSCROLL*;
2887 
2888     struct NMSELCHANGE {
2889         NMHDR nmhdr;
2890         SYSTEMTIME stSelStart;
2891         SYSTEMTIME stSelEnd;
2892     }
2893 
2894     alias LPNMSELCHANGE = NMSELCHANGE*;
2895 
2896     struct NMTBHOTITEM {
2897         NMHDR hdr;
2898         int idOld;
2899         int idNew;
2900         DWORD dwFlags;
2901     }
2902 
2903     alias LPNMTBHOTITEM = NMTBHOTITEM*;
2904 
2905     struct NMTBDISPINFOA {
2906         NMHDR hdr;
2907         DWORD dwMask;
2908         int idCommand;
2909         DWORD_PTR lParam;
2910         int iImage;
2911         LPSTR pszText;
2912         int cchText;
2913     }
2914 
2915     alias LPNMTBDISPINFOA = NMTBDISPINFOA*;
2916 
2917     struct NMTBDISPINFOW {
2918         NMHDR hdr;
2919         DWORD dwMask;
2920         int idCommand;
2921         DWORD_PTR lParam;
2922         int iImage;
2923         LPWSTR pszText;
2924         int cchText;
2925     }
2926 
2927     alias LPNMTBDISPINFOW = NMTBDISPINFOW*;
2928 
2929     struct NMTBGETINFOTIPA {
2930         NMHDR hdr;
2931         LPSTR pszText;
2932         int cchTextMax;
2933         int iItem;
2934         LPARAM lParam;
2935     }
2936 
2937     alias LPNMTBGETINFOTIPA = NMTBGETINFOTIPA*;
2938 
2939     struct NMTBGETINFOTIPW {
2940         NMHDR hdr;
2941         LPWSTR pszText;
2942         int cchTextMax;
2943         int iItem;
2944         LPARAM lParam;
2945     }
2946 
2947     alias LPNMTBGETINFOTIPW = NMTBGETINFOTIPW*;
2948 
2949     struct NMMOUSE {
2950         NMHDR hdr;
2951         DWORD_PTR dwItemSpec;
2952         DWORD_PTR dwItemData;
2953         POINT pt;
2954         LPARAM dwHitInfo;
2955     }
2956 
2957     alias LPNMMOUSE = NMMOUSE*;
2958 }
2959 
2960 static if (_WIN32_IE >= 0x401) {
2961     struct NMTOOLTIPSCREATED {
2962         NMHDR hdr;
2963         HWND hwndToolTips;
2964     }
2965 
2966     alias LPNMTOOLTIPSCREATED = NMTOOLTIPSCREATED*;
2967 }
2968 
2969 struct NMDATETIMECHANGE {
2970     NMHDR nmhdr;
2971     DWORD dwFlags;
2972     SYSTEMTIME st;
2973 }
2974 
2975 alias LPNMDATETIMECHANGE = NMDATETIMECHANGE*;
2976 
2977 struct NMCBEENDEDITW {
2978     NMHDR hdr;
2979     BOOL fChanged;
2980     int iNewSelection;
2981     WCHAR[CBEMAXSTRLEN] szText = 0;
2982     int iWhy;
2983 }
2984 
2985 alias NMCBEENDEDITW* LPNMCBEENDEDITW, PNMCBEENDEDITW;
2986 
2987 struct NMCBEENDEDITA {
2988     NMHDR hdr;
2989     BOOL fChanged;
2990     int iNewSelection;
2991     char[CBEMAXSTRLEN] szText = 0;
2992     int iWhy;
2993 }
2994 
2995 alias NMCBEENDEDITA* LPNMCBEENDEDITA, PNMCBEENDEDITA;
2996 
2997 struct COLORMAP {
2998     COLORREF from;
2999     COLORREF to;
3000 }
3001 
3002 alias LPCOLORMAP = COLORMAP*;
3003 
3004 struct DRAGLISTINFO {
3005     UINT uNotification;
3006     HWND hWnd;
3007     POINT ptCursor;
3008 }
3009 
3010 alias LPDRAGLISTINFO = DRAGLISTINFO*;
3011 
3012 struct TBBUTTON {
3013     int iBitmap;
3014     int idCommand;
3015     BYTE fsState;
3016     BYTE fsStyle;
3017     version (Win64) {
3018         BYTE[6] bReserved;
3019     } else {
3020         BYTE[2] bReserved;
3021     }
3022     DWORD_PTR dwData;
3023     INT_PTR iString;
3024 }
3025 
3026 alias TBBUTTON* PTBBUTTON, LPTBBUTTON;
3027 alias LPCTBBUTTON = const(TBBUTTON)*;
3028 
3029 static if (_WIN32_IE >= 0x400) {
3030     struct TBBUTTONINFOA {
3031         UINT cbSize = TBBUTTONINFOA.sizeof;
3032         DWORD dwMask;
3033         int idCommand;
3034         int iImage;
3035         BYTE fsState;
3036         BYTE fsStyle;
3037         WORD cx;
3038         DWORD_PTR lParam;
3039         LPSTR pszText;
3040         int cchText;
3041     }
3042 
3043     alias LPTBBUTTONINFOA = TBBUTTONINFOA*;
3044 
3045     struct TBBUTTONINFOW {
3046         UINT cbSize = TBBUTTONINFOW.sizeof;
3047         DWORD dwMask;
3048         int idCommand;
3049         int iImage;
3050         BYTE fsState;
3051         BYTE fsStyle;
3052         WORD cx;
3053         DWORD_PTR lParam;
3054         LPWSTR pszText;
3055         int cchText;
3056     }
3057 
3058     alias LPTBBUTTONINFOW = TBBUTTONINFOW*;
3059 
3060     struct TBINSERTMARK {
3061         int iButton;
3062         DWORD dwFlags;
3063     }
3064 
3065     alias LPTBINSERTMARK = TBINSERTMARK*;
3066 
3067     struct LVBKIMAGEA {
3068         ULONG ulFlags;
3069         HBITMAP hbm;
3070         LPSTR pszImage;
3071         UINT cchImageMax;
3072         int xOffsetPercent;
3073         int yOffsetPercent;
3074     }
3075 
3076     alias LPLVBKIMAGEA = LVBKIMAGEA*;
3077 
3078     struct LVBKIMAGEW {
3079         ULONG ulFlags;
3080         HBITMAP hbm;
3081         LPWSTR pszImage;
3082         UINT cchImageMax;
3083         int xOffsetPercent;
3084         int yOffsetPercent;
3085     }
3086 
3087     alias LPLVBKIMAGEW = LVBKIMAGEW*;
3088 }
3089 
3090 /*struct TBNOTIFY {
3091     NMHDR    hdr;
3092     int      iItem;
3093     TBBUTTON tbButton;
3094     int      cchText;
3095     LPTSTR   pszText;
3096 }
3097 alias LPTBNOTIFY = TBNOTIFY*;
3098 */
3099 
3100 /*struct TBSAVEPARAMS {
3101     HKEY    hkr;
3102     LPCTSTR pszSubKey;
3103     LPCTSTR pszValueName;
3104 }*/
3105 
3106 struct IMAGEINFO {
3107     HBITMAP hbmImage;
3108     HBITMAP hbmMask;
3109     int Unused1;
3110     int Unused2;
3111     RECT rcImage;
3112 }
3113 
3114 alias LPIMAGEINFO = IMAGEINFO*;
3115 
3116 static if (_WIN32_IE >= 0x500) {
3117     struct HDITEMA {
3118         UINT mask;
3119         int cxy;
3120         LPSTR pszText;
3121         HBITMAP hbm;
3122         int cchTextMax;
3123         int fmt;
3124         LPARAM lParam;
3125         int iImage;
3126         int iOrder;
3127         UINT type;
3128         LPVOID pvFilter;
3129     }
3130 
3131     struct HDITEMW {
3132         UINT mask;
3133         int cxy;
3134         LPWSTR pszText;
3135         HBITMAP hbm;
3136         int cchTextMax;
3137         int fmt;
3138         LPARAM lParam;
3139         int iImage;
3140         int iOrder;
3141         UINT type;
3142         LPVOID pvFilter;
3143     }
3144 } else static if (_WIN32_IE >= 0x300) {
3145     struct HDITEMA {
3146         UINT mask;
3147         int cxy;
3148         LPSTR pszText;
3149         HBITMAP hbm;
3150         int cchTextMax;
3151         int fmt;
3152         LPARAM lParam;
3153         int iImage;
3154         int iOrder;
3155     }
3156 
3157     struct HDITEMW {
3158         UINT mask;
3159         int cxy;
3160         LPWSTR pszText;
3161         HBITMAP hbm;
3162         int cchTextMax;
3163         int fmt;
3164         LPARAM lParam;
3165         int iImage;
3166         int iOrder;
3167     }
3168 } else {
3169     struct HDITEMA {
3170         UINT mask;
3171         int cxy;
3172         LPSTR pszText;
3173         HBITMAP hbm;
3174         int cchTextMax;
3175         int fmt;
3176         LPARAM lParam;
3177     }
3178 
3179     struct HDITEMW {
3180         UINT mask;
3181         int cxy;
3182         LPWSTR pszText;
3183         HBITMAP hbm;
3184         int cchTextMax;
3185         int fmt;
3186         LPARAM lParam;
3187     }
3188 }
3189 alias LPHDITEMA = HDITEMA*;
3190 alias LPHDITEMW = HDITEMW*;
3191 
3192 deprecated {
3193     alias HD_ITEMA = HDITEMA;
3194     alias HD_ITEMW = HDITEMW;
3195     //alias HD_ITEM = HDITEM; fixme
3196 }
3197 
3198 struct HD_LAYOUT {
3199     RECT* prc;
3200     WINDOWPOS* pwpos;
3201 }
3202 
3203 alias LPHDLAYOUT = HD_LAYOUT*;
3204 deprecated alias HDLAYOUT = HD_LAYOUT;
3205 
3206 struct HD_HITTESTINFO {
3207     POINT pt;
3208     UINT flags;
3209     int iItem;
3210 }
3211 
3212 alias LPHDHITTESTINFO = HD_HITTESTINFO*;
3213 
3214 struct HD_NOTIFYA {
3215     NMHDR hdr;
3216     int iItem;
3217     int iButton;
3218     HDITEMA* pitem;
3219 }
3220 
3221 struct HD_NOTIFYW {
3222     NMHDR hdr;
3223     int iItem;
3224     int iButton;
3225     HDITEMW* pitem;
3226 }
3227 
3228 /* FIXME: NMHEADER structure (base for all events of the comctl controls)
3229    is the same as HD_NOTIFY depending on the value of _WIN32_IE macro.
3230    I'm defining both for now. */
3231 struct NMHEADERA {
3232     NMHDR hdr;
3233     int iItem;
3234     int iButton;
3235     HDITEMA* pitem;
3236 }
3237 
3238 alias LPNMHEADERA = NMHEADERA*;
3239 
3240 struct NMHEADERW {
3241     NMHDR hdr;
3242     int iItem;
3243     int iButton;
3244     HDITEMW* pitem;
3245 }
3246 
3247 alias LPNMHEADERW = NMHEADERW*;
3248 
3249 version (Unicode) {
3250     alias NMHEADER = NMHEADERW;
3251     alias LPNMHEADER = LPNMHEADERW;
3252 } else {
3253     alias NMHEADER = NMHEADERA;
3254     alias LPNMHEADER = LPNMHEADERA;
3255 }
3256 // End FIXME
3257 
3258 struct NMHDDISPINFOA {
3259     NMHDR hdr;
3260     int iItem;
3261     UINT mask;
3262     LPSTR pszText;
3263     int cchTextMax;
3264     int iImage;
3265     LPARAM lParam;
3266 }
3267 
3268 alias LPNMHDDISPINFOA = NMHDDISPINFOA*;
3269 
3270 struct NMHDDISPINFOW {
3271     NMHDR hdr;
3272     int iItem;
3273     UINT mask;
3274     LPWSTR pszText;
3275     int cchTextMax;
3276     int iImage;
3277     LPARAM lParam;
3278 }
3279 
3280 alias LPNMHDDISPINFOW = NMHDDISPINFOW*;
3281 
3282 struct NMCUSTOMDRAW {
3283     NMHDR hdr;
3284     DWORD dwDrawStage;
3285     HDC hdc;
3286     RECT rc;
3287     DWORD_PTR dwItemSpec;
3288     UINT uItemState;
3289     LPARAM lItemlParam;
3290 }
3291 
3292 alias LPNMCUSTOMDRAW = NMCUSTOMDRAW*;
3293 
3294 static if (_WIN32_IE >= 0x400) {
3295     struct NMLVCUSTOMDRAW {
3296         NMCUSTOMDRAW nmcd;
3297         COLORREF clrText;
3298         COLORREF clrTextBk;
3299         int iSubItem;
3300     }
3301 } else {
3302     struct NMLVCUSTOMDRAW {
3303         NMCUSTOMDRAW nmcd;
3304         COLORREF clrText;
3305         COLORREF clrTextBk;
3306     }
3307 }
3308 alias LPNMLVCUSTOMDRAW = NMLVCUSTOMDRAW*;
3309 
3310 static if (_WIN32_IE >= 0x400) {
3311     struct NMLVGETINFOTIPA {
3312         NMHDR hdr;
3313         DWORD dwFlags;
3314         LPSTR pszText;
3315         int cchTextMax;
3316         int iItem;
3317         int iSubItem;
3318         LPARAM lParam;
3319     }
3320 
3321     alias LPNMLVGETINFOTIPA = NMLVGETINFOTIPA*;
3322 
3323     struct NMLVGETINFOTIPW {
3324         NMHDR hdr;
3325         DWORD dwFlags;
3326         LPWSTR pszText;
3327         int cchTextMax;
3328         int iItem;
3329         int iSubItem;
3330         LPARAM lParam;
3331     }
3332 
3333     alias LPNMLVGETINFOTIPW = NMLVGETINFOTIPW*;
3334 }
3335 
3336 static if (_WIN32_IE >= 0x400) {
3337     struct NMTVCUSTOMDRAW {
3338         NMCUSTOMDRAW nmcd;
3339         COLORREF clrText;
3340         COLORREF clrTextBk;
3341         int iLevel;
3342     }
3343 } else {
3344     struct NMTVCUSTOMDRAW {
3345         NMCUSTOMDRAW nmcd;
3346         COLORREF clrText;
3347         COLORREF clrTextBk;
3348     }
3349 }
3350 alias LPNMTVCUSTOMDRAW = NMTVCUSTOMDRAW*;
3351 
3352 static if (_WIN32_IE >= 0x400) {
3353     static if (_WIN32_WINNT >= 0x501) {
3354         struct NMTBCUSTOMDRAW {
3355             NMCUSTOMDRAW nmcd;
3356             HBRUSH hbrMonoDither;
3357             HBRUSH hbrLines;
3358             HPEN hpenLines;
3359             COLORREF clrText;
3360             COLORREF clrMark;
3361             COLORREF clrTextHighlight;
3362             COLORREF clrBtnFace;
3363             COLORREF clrBtnHighlight;
3364             COLORREF clrHighlightHotTrack;
3365             RECT rcText;
3366             int nStringBkMode;
3367             int nHLStringBkMode;
3368             int iListGap;
3369         }
3370     } else {
3371         struct NMTBCUSTOMDRAW {
3372             NMCUSTOMDRAW nmcd;
3373             HBRUSH hbrMonoDither;
3374             HBRUSH hbrLines;
3375             HPEN hpenLines;
3376             COLORREF clrText;
3377             COLORREF clrMark;
3378             COLORREF clrTextHighlight;
3379             COLORREF clrBtnFace;
3380             COLORREF clrBtnHighlight;
3381             COLORREF clrHighlightHotTrack;
3382             RECT rcText;
3383             int nStringBkMode;
3384             int nHLStringBkMode;
3385         }
3386     }
3387     alias LPNMTBCUSTOMDRAW = NMTBCUSTOMDRAW*;
3388 
3389     struct NMITEMACTIVATE {
3390         NMHDR hdr;
3391         int iItem;
3392         int iSubItem;
3393         UINT uNewState;
3394         UINT uOldState;
3395         UINT uChanged;
3396         POINT ptAction;
3397         LPARAM lParam;
3398         UINT uKeyFlags;
3399     }
3400 
3401     alias LPNMITEMACTIVATE = NMITEMACTIVATE*;
3402 }
3403 
3404 struct TBADDBITMAP {
3405     HINSTANCE hInst;
3406     UINT_PTR nID;
3407 }
3408 
3409 alias LPTBADDBITMAP = TBADDBITMAP*;
3410 
3411 struct TBSAVEPARAMSA {
3412     HKEY hkr;
3413     LPCSTR pszSubKey;
3414     LPCSTR pszValueName;
3415 }
3416 
3417 struct TBSAVEPARAMSW {
3418     HKEY hkr;
3419     LPCWSTR pszSubKey;
3420     LPCWSTR pszValueName;
3421 }
3422 
3423 struct TBREPLACEBITMAP {
3424     HINSTANCE hInstOld;
3425     UINT_PTR nIDOld;
3426     HINSTANCE hInstNew;
3427     UINT_PTR nIDNew;
3428     int nButtons;
3429 }
3430 
3431 alias LPTBREPLACEBITMAP = TBREPLACEBITMAP*;
3432 
3433 static if (_WIN32_IE >= 0x500) {
3434     struct NMTOOLBARA {
3435         NMHDR hdr;
3436         int iItem;
3437         TBBUTTON tbButton;
3438         int cchText;
3439         LPSTR pszText;
3440         RECT rcButton;
3441     }
3442 
3443     struct NMTOOLBARW {
3444         NMHDR hdr;
3445         int iItem;
3446         TBBUTTON tbButton;
3447         int cchText;
3448         LPWSTR pszText;
3449         RECT rcButton;
3450     }
3451 } else {
3452     struct NMTOOLBARA {
3453         NMHDR hdr;
3454         int iItem;
3455         TBBUTTON tbButton;
3456         int cchText;
3457         LPSTR pszText;
3458     }
3459 
3460     struct NMTOOLBARW {
3461         NMHDR hdr;
3462         int iItem;
3463         TBBUTTON tbButton;
3464         int cchText;
3465         LPWSTR pszText;
3466     }
3467 }
3468 alias LPNMTOOLBARA = NMTOOLBARA*;
3469 alias LPNMTOOLBARW = NMTOOLBARW*;
3470 
3471 alias TBNOTIFYA = NMTOOLBARA;
3472 alias LPTBNOTIFYA = LPNMTOOLBARA;
3473 
3474 alias TBNOTIFYW = NMTOOLBARW;
3475 alias LPTBNOTIFYW = LPNMTOOLBARW;
3476 
3477 static if (_WIN32_WINNT >= 0x501) {
3478     struct TOOLINFOA {
3479         UINT cbSize = TOOLINFOA.sizeof;
3480         UINT uFlags;
3481         HWND hwnd;
3482         UINT_PTR uId;
3483         RECT rect;
3484         HINSTANCE hinst;
3485         LPSTR lpszText;
3486         LPARAM lParam;
3487         void* lpReserved;
3488     }
3489 
3490     struct TOOLINFOW {
3491         UINT cbSize = TOOLINFOW.sizeof;
3492         UINT uFlags;
3493         HWND hwnd;
3494         UINT_PTR uId;
3495         RECT rect;
3496         HINSTANCE hinst;
3497         LPWSTR lpszText;
3498         LPARAM lParam;
3499         void* lpReserved;
3500     }
3501 
3502     enum size_t TTTOOLINFOA_V1_SIZE = TOOLINFOA.lParam.offsetof,
3503         TTTOOLINFOW_V1_SIZE = TOOLINFOW.lParam.offsetof,
3504         TTTOOLINFOA_V2_SIZE = TOOLINFOA.lpReserved.offsetof,
3505         TTTOOLINFOW_V2_SIZE = TOOLINFOW.lpReserved.offsetof,
3506         TTTOOLINFOA_V3_SIZE = TOOLINFOA.sizeof,
3507         TTTOOLINFOW_V3_SIZE = TOOLINFOW.sizeof;
3508 } else static if (_WIN32_IE >= 0x300) {
3509     struct TOOLINFOA {
3510         UINT cbSize = TOOLINFOA.sizeof;
3511         UINT uFlags;
3512         HWND hwnd;
3513         UINT uId;
3514         RECT rect;
3515         HINSTANCE hinst;
3516         LPSTR lpszText;
3517         LPARAM lParam;
3518     }
3519 
3520     struct TOOLINFOW {
3521         UINT cbSize = TOOLINFOW.sizeof;
3522         UINT uFlags;
3523         HWND hwnd;
3524         UINT uId;
3525         RECT rect;
3526         HINSTANCE hinst;
3527         LPWSTR lpszText;
3528         LPARAM lParam;
3529     }
3530 
3531     enum size_t TTTOOLINFOA_V1_SIZE = TOOLINFOA.lParam.offsetof,
3532         TTTOOLINFOW_V1_SIZE = TOOLINFOW.lParam.offsetof,
3533         TTTOOLINFOA_V2_SIZE = TOOLINFOA.sizeof,
3534         TTTOOLINFOW_V2_SIZE = TOOLINFOW.sizeof;
3535 } else {
3536     struct TOOLINFOA {
3537         UINT cbSize = TOOLINFOA.sizeof;
3538         UINT uFlags;
3539         HWND hwnd;
3540         UINT uId;
3541         RECT rect;
3542         HINSTANCE hinst;
3543         LPSTR lpszText;
3544     }
3545 
3546     struct TOOLINFOW {
3547         UINT cbSize = TOOLINFOW.sizeof;
3548         UINT uFlags;
3549         HWND hwnd;
3550         UINT uId;
3551         RECT rect;
3552         HINSTANCE hinst;
3553         LPWSTR lpszText;
3554     }
3555 
3556     enum size_t TTTOOLINFOA_V1_SIZE = TOOLINFOA.sizeof,
3557         TTTOOLINFOW_V1_SIZE = TOOLINFOW.sizeof;
3558 }
3559 alias TTTOOLINFOA = TOOLINFOA;
3560 alias TTTOOLINFOW = TOOLINFOW;
3561 alias TTTOOLINFOA* LPTTTOOLINFOA, PTOOLINFOA, LPTOOLINFOA;
3562 alias TTTOOLINFOW* LPTTTOOLINFOW, PTOOLINFOW, LPTOOLINFOW;
3563 
3564 struct TTHITTESTINFOA {
3565     HWND hwnd;
3566     POINT pt;
3567     TOOLINFOA ti;
3568 }
3569 
3570 alias TTHITTESTINFOA* LPTTHITTESTINFOA, LPHITTESTINFOA;
3571 
3572 struct TTHITTESTINFOW {
3573     HWND hwnd;
3574     POINT pt;
3575     TOOLINFOW ti;
3576 }
3577 
3578 alias TTHITTESTINFOW* LPTTHITTESTINFOW, LPHITTESTINFOW;
3579 
3580 static if (_WIN32_IE >= 0x300) {
3581     struct NMTTDISPINFOA {
3582         NMHDR hdr;
3583         LPSTR lpszText;
3584         char[80] szText = 0;
3585         HINSTANCE hinst;
3586         UINT uFlags;
3587         LPARAM lParam;
3588     }
3589 
3590     struct NMTTDISPINFOW {
3591         NMHDR hdr;
3592         LPWSTR lpszText;
3593         WCHAR[80] szText = 0;
3594         HINSTANCE hinst;
3595         UINT uFlags;
3596         LPARAM lParam;
3597     }
3598 } else {
3599     struct NMTTDISPINFOA {
3600         NMHDR hdr;
3601         LPSTR lpszText;
3602         char[80] szText = 0;
3603         HINSTANCE hinst;
3604         UINT uFlags;
3605     }
3606 
3607     struct NMTTDISPINFOW {
3608         NMHDR hdr;
3609         LPWSTR lpszText;
3610         WCHAR[80] szText = 0;
3611         HINSTANCE hinst;
3612         UINT uFlags;
3613     }
3614 }
3615 alias LPNMTTDISPINFOA = NMTTDISPINFOA*;
3616 alias LPNMTTDISPINFOW = NMTTDISPINFOW*;
3617 alias TOOLTIPTEXTA = NMTTDISPINFOA;
3618 alias LPTOOLTIPTEXTA = LPNMTTDISPINFOA;
3619 alias TOOLTIPTEXTW = NMTTDISPINFOW;
3620 alias LPTOOLTIPTEXTW = LPNMTTDISPINFOW;
3621 
3622 struct UDACCEL {
3623     UINT nSec;
3624     UINT nInc;
3625 }
3626 
3627 alias LPUDACCEL = UDACCEL*;
3628 
3629 struct NMUPDOWN {
3630     NMHDR hdr;
3631     int iPos;
3632     int iDelta;
3633 }
3634 
3635 alias LPNMUPDOWN = NMUPDOWN*;
3636 
3637 deprecated {
3638     alias NM_UPDOWN = NMUPDOWN;
3639     alias LPNM_UPDOWN = LPNMUPDOWN;
3640 }
3641 
3642 static if (_WIN32_WINNT >= 0x501) {
3643     struct LVITEMA {
3644         UINT mask;
3645         int iItem;
3646         int iSubItem;
3647         UINT state;
3648         UINT stateMask;
3649         LPSTR pszText;
3650         int cchTextMax;
3651         int iImage;
3652         LPARAM lParam;
3653         int iIndent;
3654         int iGroupId;
3655         UINT cColumns;
3656         PUINT puColumns;
3657     }
3658 
3659     struct LVITEMW {
3660         UINT mask;
3661         int iItem;
3662         int iSubItem;
3663         UINT state;
3664         UINT stateMask;
3665         LPWSTR pszText;
3666         int cchTextMax;
3667         int iImage;
3668         LPARAM lParam;
3669         int iIndent;
3670         int iGroupId;
3671         UINT cColumns;
3672         PUINT puColumns;
3673     }
3674 } else static if (_WIN32_IE >= 0x300) {
3675     struct LVITEMA {
3676         UINT mask;
3677         int iItem;
3678         int iSubItem;
3679         UINT state;
3680         UINT stateMask;
3681         LPSTR pszText;
3682         int cchTextMax;
3683         int iImage;
3684         LPARAM lParam;
3685         int iIndent;
3686     }
3687 
3688     struct LVITEMW {
3689         UINT mask;
3690         int iItem;
3691         int iSubItem;
3692         UINT state;
3693         UINT stateMask;
3694         LPWSTR pszText;
3695         int cchTextMax;
3696         int iImage;
3697         LPARAM lParam;
3698         int iIndent;
3699     }
3700 } else {
3701     struct LVITEMA {
3702         UINT mask;
3703         int iItem;
3704         int iSubItem;
3705         UINT state;
3706         UINT stateMask;
3707         LPSTR pszText;
3708         int cchTextMax;
3709         int iImage;
3710         LPARAM lParam;
3711     }
3712 
3713     struct LVITEMW {
3714         UINT mask;
3715         int iItem;
3716         int iSubItem;
3717         UINT state;
3718         UINT stateMask;
3719         LPWSTR pszText;
3720         int cchTextMax;
3721         int iImage;
3722         LPARAM lParam;
3723     }
3724 }
3725 alias LPLVITEMA = LVITEMA*;
3726 alias LPLVITEMW = LVITEMW*;
3727 alias LV_ITEMA = LVITEMA;
3728 alias LV_ITEMW = LVITEMW;
3729 
3730 struct LVFINDINFOA {
3731     UINT flags;
3732     LPCSTR psz;
3733     LPARAM lParam;
3734     POINT pt;
3735     UINT vkDirection;
3736 }
3737 
3738 struct LVFINDINFOW {
3739     UINT flags;
3740     LPCWSTR psz;
3741     LPARAM lParam;
3742     POINT pt;
3743     UINT vkDirection;
3744 }
3745 
3746 alias LPFINDINFOA = LVFINDINFOA*;
3747 alias LV_FINDINFOA = LVFINDINFOA;
3748 alias LPFINDINFOW = LVFINDINFOW*;
3749 alias LV_FINDINFOW = LVFINDINFOW;
3750 
3751 struct NMLVFINDITEMA {
3752     NMHDR hdr;
3753     int iStart;
3754     LVFINDINFOA lvfi;
3755 }
3756 
3757 struct NMLVFINDITEMW {
3758     NMHDR hdr;
3759     int iStart;
3760     LVFINDINFOW lvfi;
3761 }
3762 
3763 alias NMLVFINDITEMA* PNMLVFINDITEMA, LPNMLVFINDITEMA;
3764 alias NMLVFINDITEMW* PNMLVFINDITEMW, LPNMLVFINDITEMW;
3765 
3766 static if (_WIN32_IE >= 0x300) {
3767     struct LVHITTESTINFO {
3768         POINT pt;
3769         UINT flags;
3770         int iItem;
3771         int iSubItem;
3772     }
3773 } else {
3774     struct LVHITTESTINFO {
3775         POINT pt;
3776         UINT flags;
3777         int iItem;
3778     }
3779 }
3780 alias LPLVHITTESTINFO = LVHITTESTINFO*;
3781 alias LV_HITTESTINFO = LVHITTESTINFO;
3782 
3783 static if (_WIN32_IE >= 0x300) {
3784     struct LVCOLUMNA {
3785         UINT mask;
3786         int fmt;
3787         int cx;
3788         LPSTR pszText;
3789         int cchTextMax;
3790         int iSubItem;
3791         int iImage;
3792         int iOrder;
3793     }
3794 
3795     struct LVCOLUMNW {
3796         UINT mask;
3797         int fmt;
3798         int cx;
3799         LPWSTR pszText;
3800         int cchTextMax;
3801         int iSubItem;
3802         int iImage;
3803         int iOrder;
3804     }
3805 } else {
3806     struct LVCOLUMNA {
3807         UINT mask;
3808         int fmt;
3809         int cx;
3810         LPSTR pszText;
3811         int cchTextMax;
3812         int iSubItem;
3813     }
3814 
3815     struct LVCOLUMNW {
3816         UINT mask;
3817         int fmt;
3818         int cx;
3819         LPWSTR pszText;
3820         int cchTextMax;
3821         int iSubItem;
3822     }
3823 }
3824 alias LPLVCOLUMNA = LVCOLUMNA*;
3825 alias LPLVCOLUMNW = LVCOLUMNW*;
3826 alias LV_COLUMNA = LVCOLUMNA;
3827 alias LV_COLUMNW = LVCOLUMNW;
3828 
3829 static if (_WIN32_WINNT >= 0x501) {
3830     /*  SG: The definitions in this static if block are from the MSDN docs.
3831      *  They are not in MinGW, but nonetheless required for macros that are.
3832      */
3833     struct LVGROUP {
3834         UINT cbSize = LVGROUP.sizeof;
3835         UINT mask;
3836         LPWSTR pszHeader;
3837         int cchHeader;
3838         LPWSTR pszFooter;
3839         int cchFooter;
3840         int iGroupId;
3841         UINT stateMask;
3842         UINT state;
3843         UINT uAlign;
3844         static if (_WIN32_WINNT >= 0x600) {
3845             LPWSTR pszSubtitle;
3846             UINT cchSubtitle;
3847             LPWSTR pszTask;
3848             UINT cchTask;
3849             LPWSTR pszDescriptionTop;
3850             UINT cchDescriptionTop;
3851             LPWSTR pszDescriptionBottom;
3852             UINT cchDescriptionBottom;
3853             int iTitleImage;
3854             int iExtendedImage;
3855             int iFirstItem; // Read only
3856             UINT cItems; // Read only
3857             LPWSTR pszSubsetTitle; // NULL if group is not subset
3858             UINT cchSubsetTitle;
3859         }
3860     }
3861 
3862     alias PLVGROUP = LVGROUP*;
3863 
3864     struct LVGROUPMETRICS {
3865         UINT cbSize = LVGROUPMETRICS.sizeof;
3866         UINT mask;
3867         UINT Left;
3868         UINT Top;
3869         UINT Right;
3870         UINT Bottom;
3871         COLORREF crLeft;
3872         COLORREF crTop;
3873         COLORREF crRight;
3874         COLORREF crBottom;
3875         COLORREF crHeader;
3876         COLORREF crFooter;
3877     }
3878 
3879     alias PLVGROUPMETRICS = LVGROUPMETRICS*;
3880 
3881     struct LVINSERTMARK {
3882         UINT cbSize = LVINSERTMARK.sizeof;
3883         DWORD dwFlags;
3884         int iItem;
3885         DWORD dwReserved;
3886     }
3887 
3888     alias PLVINSERTMARK = LVINSERTMARK*;
3889     alias LPLVINSERTMARK = LVINSERTMARK*;
3890 
3891     struct LVTILEINFO {
3892         UINT cbSize = LVTILEINFO.sizeof;
3893         int iItem;
3894         UINT cColumns;
3895         PUINT puColumns;
3896         static if (_WIN32_WINNT >= 0x600) {
3897             int* piColFmt;
3898         }
3899     }
3900 
3901     alias PLVTILEINFO = LVTILEINFO*;
3902 
3903     struct LVTILEVIEWINFO {
3904         UINT cbSize = LVTILEVIEWINFO.sizeof;
3905         DWORD dwMask;
3906         DWORD dwFlags;
3907         SIZE sizeTile;
3908         int cLines;
3909         RECT rcLabelMargin;
3910     }
3911 
3912     alias PLVTILEVIEWINFO = LVTILEVIEWINFO*;
3913 
3914     struct LVINSERTGROUPSORTED {
3915         PFNLVGROUPCOMPARE pfnGroupCompare;
3916         LPVOID* pvData;
3917         LVGROUP lvGroup;
3918     }
3919 
3920     alias PLVINSERTGROUPSORTED = LVINSERTGROUPSORTED*;
3921 
3922     extern (Windows) alias int function(INT, INT, VOID*) PFNLVGROUPCOMPARE;
3923 
3924     struct LVSETINFOTIP {
3925         UINT cbSize = LVSETINFOTIP.sizeof;
3926         DWORD dwFlags;
3927         LPWSTR pszText;
3928         int iItem;
3929         int iSubItem;
3930         HBITMAP hbmp;
3931     }
3932 
3933     alias PLVSETINFOTIP = LVSETINFOTIP*;
3934 
3935     struct BUTTON_IMAGELIST {
3936         HIMAGELIST himl;
3937         RECT margin;
3938         UINT uAlign;
3939     }
3940 
3941     alias PBUTTON_IMAGELIST = BUTTON_IMAGELIST*;
3942 }
3943 
3944 static if (_WIN32_WINNT >= 0x600) {
3945     struct LVITEMINDEX {
3946         int iItem;
3947         int iGroup;
3948     }
3949 
3950     alias PLVITEMINDEX = LVITEMINDEX*;
3951 
3952     struct LVFOOTERINFO {
3953         UINT mask;
3954         LPWSTR pszText;
3955         int cchTextMax;
3956         UINT cItems;
3957     }
3958 
3959     alias LPLVFOOTERINFO = LVFOOTERINFO*;
3960 
3961     struct LVFOOTERITEM {
3962         UINT mask;
3963         int iItem;
3964         LPWSTR pszText;
3965         int cchTextMax;
3966         UINT state;
3967         UINT stateMask;
3968     }
3969 
3970     alias LPLVFOOTERITEM = LVFOOTERITEM*;
3971 
3972     alias TVITEMPART = UINT;
3973     enum {
3974         TVGIPR_BUTTON = 0x0001,
3975     }
3976 }
3977 
3978 extern (Windows) alias int function(LPARAM, LPARAM, LPARAM) PFNLVCOMPARE;
3979 
3980 struct NMLISTVIEW {
3981     NMHDR hdr;
3982     int iItem;
3983     int iSubItem;
3984     UINT uNewState;
3985     UINT uOldState;
3986     UINT uChanged;
3987     POINT ptAction;
3988     LPARAM lParam;
3989 }
3990 
3991 alias LPNMLISTVIEW = NMLISTVIEW*;
3992 
3993 deprecated {
3994     alias NM_LISTVIEW = NMLISTVIEW;
3995     alias LPNM_LISTVIEW = LPNMLISTVIEW;
3996 }
3997 
3998 struct NMLVDISPINFOA {
3999     NMHDR hdr;
4000     LV_ITEMA item;
4001 }
4002 
4003 alias LPNMLVDISPINFOA = NMLVDISPINFOA*;
4004 alias LV_DISPINFOA = NMLVDISPINFOA;
4005 
4006 struct NMLVDISPINFOW {
4007     NMHDR hdr;
4008     LV_ITEMW item;
4009 }
4010 
4011 alias LPNMLVDISPINFOW = NMLVDISPINFOW*;
4012 alias LV_DISPINFOW = NMLVDISPINFOW;
4013 
4014 align(1)
4015 struct LV_KEYDOWN {
4016 align(1):
4017     NMHDR hdr;
4018     WORD wVKey;
4019     UINT flags;
4020 }
4021 
4022 struct NMLVCACHEHINT {
4023     NMHDR hdr;
4024     int iFrom;
4025     int iTo;
4026 }
4027 
4028 alias NMLVCACHEHINT* LPNMLVCACHEHINT, PNM_CACHEHINT, LPNM_CACHEHINT;
4029 alias NM_CACHEHINT = NMLVCACHEHINT;
4030 
4031 struct TVITEMA {
4032     UINT mask;
4033     HTREEITEM hItem;
4034     UINT state;
4035     UINT stateMask;
4036     LPSTR pszText;
4037     int cchTextMax;
4038     int iImage;
4039     int iSelectedImage;
4040     int cChildren;
4041     LPARAM lParam;
4042 }
4043 
4044 alias TVITEMA* LPTVITEMA, LPTV_ITEMA;
4045 alias TV_ITEMA = TVITEMA;
4046 
4047 struct TVITEMW {
4048     UINT mask;
4049     HTREEITEM hItem;
4050     UINT state;
4051     UINT stateMask;
4052     LPWSTR pszText;
4053     int cchTextMax;
4054     int iImage;
4055     int iSelectedImage;
4056     int cChildren;
4057     LPARAM lParam;
4058 }
4059 
4060 alias TVITEMW* LPTVITEMW, LPTV_ITEMW;
4061 alias TV_ITEMW = TVITEMW;
4062 
4063 static if (_WIN32_IE >= 0x400) {
4064     struct TVITEMEXA {
4065         UINT mask;
4066         HTREEITEM hItem;
4067         UINT state;
4068         UINT stateMask;
4069         LPSTR pszText;
4070         int cchTextMax;
4071         int iImage;
4072         int iSelectedImage;
4073         int cChildren;
4074         LPARAM lParam;
4075         int iIntegral;
4076     }
4077 
4078     alias LPTVITEMEXA = TVITEMEXA*;
4079 
4080     struct TVITEMEXW {
4081         UINT mask;
4082         HTREEITEM hItem;
4083         UINT state;
4084         UINT stateMask;
4085         LPWSTR pszText;
4086         int cchTextMax;
4087         int iImage;
4088         int iSelectedImage;
4089         int cChildren;
4090         LPARAM lParam;
4091         int iIntegral;
4092     }
4093 
4094     alias LPTVITEMEXW = TVITEMEXW*;
4095 }
4096 
4097 static if (_WIN32_IE >= 0x400) {
4098     struct TVINSERTSTRUCTA {
4099         HTREEITEM hParent;
4100         HTREEITEM hInsertAfter;
4101         union {
4102             TVITEMEXA itemex;
4103             TV_ITEMA item;
4104         }
4105     }
4106 
4107     struct TVINSERTSTRUCTW {
4108         HTREEITEM hParent;
4109         HTREEITEM hInsertAfter;
4110         union {
4111             TVITEMEXW itemex;
4112             TV_ITEMW item;
4113         }
4114     }
4115 } else {
4116     struct TVINSERTSTRUCTA {
4117         HTREEITEM hParent;
4118         HTREEITEM hInsertAfter;
4119         TV_ITEMA item;
4120     }
4121 
4122     struct TVINSERTSTRUCTW {
4123         HTREEITEM hParent;
4124         HTREEITEM hInsertAfter;
4125         TV_ITEMW item;
4126     }
4127 }
4128 alias TVINSERTSTRUCTA* LPTVINSERTSTRUCTA, LPTV_INSERTSTRUCTA;
4129 alias TV_INSERTSTRUCTA = TVINSERTSTRUCTA;
4130 alias TVINSERTSTRUCTW* LPTVINSERTSTRUCTW, LPTV_INSERTSTRUCTW;
4131 alias TV_INSERTSTRUCTW = TVINSERTSTRUCTW;
4132 
4133 struct TVHITTESTINFO {
4134     POINT pt;
4135     UINT flags;
4136     HTREEITEM hItem;
4137 }
4138 
4139 alias TVHITTESTINFO* LPTVHITTESTINFO, LPTV_HITTESTINFO;
4140 alias TV_HITTESTINFO = TVHITTESTINFO;
4141 
4142 static if (_WIN32_WINNT >= 0x600) {
4143     struct TVGETITEMPARTRECTINFO {
4144         HTREEITEM hti;
4145         RECT* prc;
4146         TVITEMPART partID;
4147     }
4148 }
4149 
4150 extern (Windows) alias int function(LPARAM, LPARAM, LPARAM) PFNTVCOMPARE;
4151 struct TVSORTCB {
4152     HTREEITEM hParent;
4153     PFNTVCOMPARE lpfnCompare;
4154     LPARAM lParam;
4155 }
4156 
4157 alias TVSORTCB* LPTVSORTCB, LPTV_SORTCB;
4158 alias TV_SORTCB = TVSORTCB;
4159 
4160 struct NMTREEVIEWA {
4161     NMHDR hdr;
4162     UINT action;
4163     TV_ITEMA itemOld;
4164     TV_ITEMA itemNew;
4165     POINT ptDrag;
4166 }
4167 
4168 alias NMTREEVIEWA* LPNMTREEVIEWA, LPNM_TREEVIEWA;
4169 alias NM_TREEVIEWA = NMTREEVIEWA;
4170 
4171 struct NMTREEVIEWW {
4172     NMHDR hdr;
4173     UINT action;
4174     TV_ITEMW itemOld;
4175     TV_ITEMW itemNew;
4176     POINT ptDrag;
4177 }
4178 
4179 alias NMTREEVIEWW* LPNMTREEVIEWW, LPNM_TREEVIEWW;
4180 alias NM_TREEVIEWW = NMTREEVIEWW;
4181 
4182 struct NMTVDISPINFOA {
4183     NMHDR hdr;
4184     TVITEMA item;
4185 }
4186 
4187 alias LPNMTVDISPINFOA = NMTVDISPINFOA*;
4188 alias TV_DISPINFOA = NMTVDISPINFOA;
4189 
4190 struct NMTVDISPINFOW {
4191     NMHDR hdr;
4192     TVITEMW item;
4193 }
4194 
4195 alias LPNMTVDISPINFOW = NMTVDISPINFOW*;
4196 alias TV_DISPINFOW = NMTVDISPINFOW;
4197 
4198 static if (_WIN32_IE >= 0x400) {
4199     struct NMTVGETINFOTIPA {
4200         NMHDR hdr;
4201         LPSTR pszText;
4202         int cchTextMax;
4203         HTREEITEM hItem;
4204         LPARAM lParam;
4205     }
4206 
4207     alias LPNMTVGETINFOTIPA = NMTVGETINFOTIPA*;
4208 
4209     struct NMTVGETINFOTIPW {
4210         NMHDR hdr;
4211         LPWSTR pszText;
4212         int cchTextMax;
4213         HTREEITEM hItem;
4214         LPARAM lParam;
4215     }
4216 
4217     alias LPNMTVGETINFOTIPW = NMTVGETINFOTIPW*;
4218 }
4219 
4220 align(1)
4221 struct TV_KEYDOWN {
4222 align(1):
4223     NMHDR hdr;
4224     WORD wVKey;
4225     UINT flags;
4226 }
4227 
4228 struct TC_ITEMHEADERA {
4229     UINT mask;
4230     UINT lpReserved1;
4231     UINT lpReserved2;
4232     LPSTR pszText;
4233     int cchTextMax;
4234     int iImage;
4235 }
4236 
4237 struct TC_ITEMHEADERW {
4238     UINT mask;
4239     UINT lpReserved1;
4240     UINT lpReserved2;
4241     LPWSTR pszText;
4242     int cchTextMax;
4243     int iImage;
4244 }
4245 
4246 static if (_WIN32_IE >= 0x300) {
4247     struct TCITEMA {
4248         UINT mask;
4249         DWORD dwState;
4250         DWORD dwStateMask;
4251         LPSTR pszText;
4252         int cchTextMax;
4253         int iImage;
4254         LPARAM lParam;
4255     }
4256 
4257     struct TCITEMW {
4258         UINT mask;
4259         DWORD dwState;
4260         DWORD dwStateMask;
4261         LPWSTR pszText;
4262         int cchTextMax;
4263         int iImage;
4264         LPARAM lParam;
4265     }
4266 } else {
4267     struct TCITEMA {
4268         UINT mask;
4269         UINT lpReserved1;
4270         UINT lpReserved2;
4271         LPSTR pszText;
4272         int cchTextMax;
4273         int iImage;
4274         LPARAM lParam;
4275     }
4276 
4277     struct TCITEMW {
4278         UINT mask;
4279         UINT lpReserved1;
4280         UINT lpReserved2;
4281         LPWSTR pszText;
4282         int cchTextMax;
4283         int iImage;
4284         LPARAM lParam;
4285     }
4286 }
4287 alias LPTCITEMA = TCITEMA*;
4288 alias TC_ITEMA = TCITEMA;
4289 alias LPTCITEMW = TCITEMW*;
4290 alias TC_ITEMW = TCITEMW;
4291 
4292 struct TCHITTESTINFO {
4293     POINT pt;
4294     UINT flags;
4295 }
4296 
4297 alias TCHITTESTINFO* LPTCHITTESTINFO, LPTC_HITTESTINFO;
4298 alias TC_HITTESTINFO = TCHITTESTINFO;
4299 
4300 align(1)
4301 struct TC_KEYDOWN {
4302 align(1):
4303     NMHDR hdr;
4304     WORD wVKey;
4305     UINT flags;
4306 }
4307 
4308 static if (_WIN32_IE >= 0x300) {
4309     struct INITCOMMONCONTROLSEX {
4310         DWORD dwSize = INITCOMMONCONTROLSEX.sizeof;
4311         DWORD dwICC;
4312     }
4313 
4314     alias LPINITCOMMONCONTROLSEX = INITCOMMONCONTROLSEX*;
4315 }
4316 
4317 struct PBRANGE {
4318     int iLow;
4319     int iHigh;
4320 }
4321 
4322 alias PPBRANGE = PBRANGE*;
4323 
4324 struct COLORSCHEME {
4325     DWORD dwSize = COLORSCHEME.sizeof;
4326     COLORREF clrBtnHighlight;
4327     COLORREF clrBtnShadow;
4328 }
4329 
4330 alias LPCOLORSCHEME = COLORSCHEME*;
4331 
4332 struct MCHITTESTINFO {
4333     UINT cbSize = MCHITTESTINFO.sizeof;
4334     POINT pt;
4335     UINT uHit;
4336     SYSTEMTIME st;
4337 }
4338 
4339 alias PMCHITTESTINFO = MCHITTESTINFO*;
4340 
4341 alias MONTHDAYSTATE = DWORD;
4342 alias LPMONTHDAYSTATE = MONTHDAYSTATE*;
4343 
4344 struct NMDAYSTATE {
4345     NMHDR nmhdr;
4346     SYSTEMTIME stStart;
4347     int cDayState;
4348     LPMONTHDAYSTATE prgDayState;
4349 }
4350 
4351 alias LPNMDAYSTATE = NMDAYSTATE*;
4352 
4353 struct REBARINFO {
4354     UINT cbSize = REBARINFO.sizeof;
4355     UINT fMask;
4356     HIMAGELIST himl;
4357 }
4358 
4359 alias LPREBARINFO = REBARINFO*;
4360 
4361 static if (_WIN32_IE >= 0x400) {
4362     struct REBARBANDINFOA {
4363         UINT cbSize = REBARBANDINFOA.sizeof;
4364         UINT fMask;
4365         UINT fStyle;
4366         COLORREF clrFore;
4367         COLORREF clrBack;
4368         LPSTR lpText;
4369         UINT cch;
4370         int iImage;
4371         HWND hwndChild;
4372         UINT cxMinChild;
4373         UINT cyMinChild;
4374         UINT cx;
4375         HBITMAP hbmBack;
4376         UINT wID;
4377         UINT cyChild;
4378         UINT cyMaxChild;
4379         UINT cyIntegral;
4380         UINT cxIdeal;
4381         LPARAM lParam;
4382         UINT cxHeader;
4383     }
4384 
4385     struct REBARBANDINFOW {
4386         UINT cbSize = REBARBANDINFOW.sizeof;
4387         UINT fMask;
4388         UINT fStyle;
4389         COLORREF clrFore;
4390         COLORREF clrBack;
4391         LPWSTR lpText;
4392         UINT cch;
4393         int iImage;
4394         HWND hwndChild;
4395         UINT cxMinChild;
4396         UINT cyMinChild;
4397         UINT cx;
4398         HBITMAP hbmBack;
4399         UINT wID;
4400         UINT cyChild;
4401         UINT cyMaxChild;
4402         UINT cyIntegral;
4403         UINT cxIdeal;
4404         LPARAM lParam;
4405         UINT cxHeader;
4406     }
4407 
4408     enum : size_t {
4409         REBARBANDINFOA_V3_SIZE = REBARBANDINFOA.cyChild.offsetof,
4410         REBARBANDINFOW_V3_SIZE = REBARBANDINFOW.cyChild.offsetof
4411     }
4412 } else {
4413     struct REBARBANDINFOA {
4414         UINT cbSize = REBARBANDINFOA.sizeof;
4415         UINT fMask;
4416         UINT fStyle;
4417         COLORREF clrFore;
4418         COLORREF clrBack;
4419         LPSTR lpText;
4420         UINT cch;
4421         int iImage;
4422         HWND hwndChild;
4423         UINT cxMinChild;
4424         UINT cyMinChild;
4425         UINT cx;
4426         HBITMAP hbmBack;
4427         UINT wID;
4428     }
4429 
4430     struct REBARBANDINFOW {
4431         UINT cbSize = REBARBANDINFOW.sizeof;
4432         UINT fMask;
4433         UINT fStyle;
4434         COLORREF clrFore;
4435         COLORREF clrBack;
4436         LPWSTR lpText;
4437         UINT cch;
4438         int iImage;
4439         HWND hwndChild;
4440         UINT cxMinChild;
4441         UINT cyMinChild;
4442         UINT cx;
4443         HBITMAP hbmBack;
4444         UINT wID;
4445     }
4446 
4447     enum : size_t {
4448         REBARBANDINFOA_V3_SIZE = REBARBANDINFOA.sizeof,
4449         REBARBANDINFOW_V3_SIZE = REBARBANDINFOW.sizeof
4450     }
4451 }
4452 alias LPREBARBANDINFOA = REBARBANDINFOA*;
4453 alias LPCREBARBANDINFOA = const(REBARBANDINFOA)*;
4454 alias LPREBARBANDINFOW = REBARBANDINFOW*;
4455 alias LPCREBARBANDINFOW = const(REBARBANDINFOW)*;
4456 
4457 static if (_WIN32_IE >= 0x300) {
4458     struct NMLVODSTATECHANGE {
4459         NMHDR hdr;
4460         int iFrom;
4461         int iTo;
4462         UINT uNewState;
4463         UINT uOldState;
4464     }
4465 
4466     alias LPNMLVODSTATECHANGE = NMLVODSTATECHANGE*;
4467 
4468     static if (_WIN32_WINNT >= 0x501) {
4469         struct IMAGELISTDRAWPARAMS {
4470             DWORD cbSize = IMAGELISTDRAWPARAMS.sizeof;
4471             HIMAGELIST himl;
4472             int i;
4473             HDC hdcDst;
4474             int x;
4475             int y;
4476             int cx;
4477             int cy;
4478             int xBitmap;
4479             int yBitmap;
4480             COLORREF rgbBk;
4481             COLORREF rgbFg;
4482             UINT fStyle;
4483             DWORD dwRop;
4484             DWORD fState;
4485             DWORD Frame;
4486             COLORREF crEffect;
4487         }
4488     } else {
4489         struct IMAGELISTDRAWPARAMS {
4490             DWORD cbSize = IMAGELISTDRAWPARAMS.sizeof;
4491             HIMAGELIST himl;
4492             int i;
4493             HDC hdcDst;
4494             int x;
4495             int y;
4496             int cx;
4497             int cy;
4498             int xBitmap;
4499             int yBitmap;
4500             COLORREF rgbBk;
4501             COLORREF rgbFg;
4502             UINT fStyle;
4503             DWORD dwRop;
4504         }
4505     }
4506     alias LPIMAGELISTDRAWPARAMS = IMAGELISTDRAWPARAMS*;
4507 }
4508 
4509 static if (_WIN32_IE >= 0x400) {
4510     struct NMREBARCHILDSIZE {
4511         NMHDR hdr;
4512         UINT uBand;
4513         UINT wID;
4514         RECT rcChild;
4515         RECT rcBand;
4516     }
4517 
4518     alias LPNMREBARCHILDSIZE = NMREBARCHILDSIZE*;
4519 
4520     struct NMREBAR {
4521         NMHDR hdr;
4522         DWORD dwMask;
4523         UINT uBand;
4524         UINT fStyle;
4525         UINT wID;
4526         LPARAM lParam;
4527     }
4528 
4529     alias LPNMREBAR = NMREBAR*;
4530 
4531     struct NMRBAUTOSIZE {
4532         NMHDR hdr;
4533         BOOL fChanged;
4534         RECT rcTarget;
4535         RECT rcActual;
4536     }
4537 
4538     alias LPNMRBAUTOSIZE = NMRBAUTOSIZE*;
4539 
4540     static if (_WIN32_IE >= 0x500) {
4541         struct NMREBARCHEVRON {
4542             NMHDR hdr;
4543             UINT uBand;
4544             UINT wID;
4545             LPARAM lParam;
4546             RECT rc;
4547             LPARAM lParamNM;
4548         }
4549 
4550         alias LPNMREBARCHEVRON = NMREBARCHEVRON*;
4551     }
4552 
4553     struct RBHITTESTINFO {
4554         POINT pt;
4555         UINT flags;
4556         int iBand;
4557     }
4558 
4559     alias LPRBHITTESTINFO = RBHITTESTINFO*;
4560 }
4561 
4562 alias HDSA = HANDLE;
4563 alias HDPA = HANDLE;
4564 
4565 version (Unicode) {
4566     alias HDITEM = HDITEMW;
4567     alias LPHDITEM = LPHDITEMW;
4568     alias TOOLINFO = TOOLINFOW;
4569     alias TOOLINFOW* PTOOLINFO, LPTOOLINFO;
4570     alias TTHITTESTINFO = TTHITTESTINFOW;
4571     alias TTHITTESTINFOW* LPHITTESTINFO, LPTTHITTESTINFO;
4572     alias TOOLTIPTEXT = TOOLTIPTEXTW;
4573     alias LPTOOLTIPTEXT = TOOLTIPTEXTW*;
4574     alias NMTTDISPINFO = NMTTDISPINFOW;
4575     alias LPNMTTDISPINFO = NMTTDISPINFOW*;
4576     alias TV_ITEM = TV_ITEMW;
4577     alias LPTV_ITEM = TV_ITEMW*;
4578     alias TVITEM = TVITEMW;
4579     alias LPTVITEM = TVITEMW*;
4580 
4581     static if (_WIN32_IE >= 0x400) {
4582         alias TVITEMEX = TVITEMEXW;
4583         alias LPTVITEMEX = TVITEMEXW*;
4584     }
4585 
4586     alias TV_INSERTSTRUCT = TV_INSERTSTRUCTW;
4587     alias LPTV_INSERTSTRUCT = TV_INSERTSTRUCTW*;
4588     alias TVINSERTSTRUCT = TVINSERTSTRUCTW;
4589     alias LPTVINSERTSTRUCT = TVINSERTSTRUCTW*;
4590     alias NM_TREEVIEW = NM_TREEVIEWW;
4591     alias LPNM_TREEVIEW = NM_TREEVIEWW*;
4592     alias NMTREEVIEW = NMTREEVIEWW;
4593     alias LPNMTREEVIEW = NMTREEVIEWW*;
4594     alias NMHDDISPINFO = NMHDDISPINFOW;
4595     alias LPNMHDDISPINFO = NMHDDISPINFOW*;
4596 
4597     alias ACM_OPEN = ACM_OPENW;
4598     alias COMBOBOXEXITEM = COMBOBOXEXITEMW;
4599     alias PCOMBOBOXEXITEM = PCOMBOBOXEXITEMW;
4600     //alias PCCOMBOBOXEXITEM = PCCOMBOBOXEXITEMW; fixme
4601     alias CBEM_INSERTITEM = CBEM_INSERTITEMW;
4602     alias CBEM_SETITEM = CBEM_SETITEMW;
4603     alias CBEM_GETITEM = CBEM_GETITEMW;
4604     alias CBEN_ENDEDIT = CBEN_ENDEDITW;
4605     alias NMCBEENDEDIT = NMCBEENDEDITW;
4606     alias LPNMCBEENDEDIT = LPNMCBEENDEDITW;
4607     alias PNMCBEENDEDIT = PNMCBEENDEDITW;
4608 
4609     static if (_WIN32_IE >= 0x400) {
4610         alias NMCOMBOBOXEX = NMCOMBOBOXEXW;
4611         alias PNMCOMBOBOXEX = PNMCOMBOBOXEXW;
4612         alias CBEN_GETDISPINFO = CBEN_GETDISPINFOW;
4613         alias CBEN_DRAGBEGIN = CBEN_DRAGBEGINW;
4614         alias NMCBEDRAGBEGIN = NMCBEDRAGBEGINW;
4615         alias LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINW;
4616         alias PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINW;
4617     }
4618 
4619     alias SB_GETTEXT = SB_GETTEXTW;
4620     alias SB_SETTEXT = SB_SETTEXTW;
4621     alias SB_GETTEXTLENGTH = SB_GETTEXTLENGTHW;
4622     alias HDM_INSERTITEM = HDM_INSERTITEMW;
4623     alias HDM_GETITEM = HDM_GETITEMW;
4624     alias HDM_SETITEM = HDM_SETITEMW;
4625     alias HDN_ITEMCHANGING = HDN_ITEMCHANGINGW;
4626     alias HDN_ITEMCHANGED = HDN_ITEMCHANGEDW;
4627     alias HDN_ITEMCLICK = HDN_ITEMCLICKW;
4628     alias HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKW;
4629     alias HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKW;
4630     alias HDN_BEGINTRACK = HDN_BEGINTRACKW;
4631     alias HDN_ENDTRACK = HDN_ENDTRACKW;
4632     alias HDN_TRACK = HDN_TRACKW;
4633 
4634     static if (_WIN32_IE >= 0x300) {
4635         alias HDN_GETDISPINFO = HDN_GETDISPINFOW;
4636     }
4637 
4638     alias HD_NOTIFY = HD_NOTIFYW;
4639     alias TBSAVEPARAMS = TBSAVEPARAMSW;
4640     alias TB_GETBUTTONTEXT = TB_GETBUTTONTEXTW;
4641     alias TB_SAVERESTORE = TB_SAVERESTOREW;
4642     alias TB_ADDSTRING = TB_ADDSTRINGW;
4643 
4644     static if (_WIN32_IE >= 0x400) {
4645         alias TBN_GETBUTTONINFO = TBN_GETBUTTONINFOW; // fixme
4646         alias TB_GETBUTTONINFO = TB_GETBUTTONINFOW;
4647         alias TB_SETBUTTONINFO = TB_SETBUTTONINFOW;
4648         alias TB_INSERTBUTTON = TB_INSERTBUTTONW;
4649         alias TB_ADDBUTTONS = TB_ADDBUTTONSW;
4650         alias TB_MAPACCELERATOR = TB_MAPACCELERATORW;
4651         alias TB_GETSTRING = TB_GETSTRINGW;
4652         alias TBBUTTONINFO = TBBUTTONINFOW;
4653         alias LPTBBUTTONINFO = LPTBBUTTONINFOW;
4654         alias TBN_GETDISPINFO = TBN_GETDISPINFOW;
4655         alias NMTBDISPINFO = NMTBDISPINFOW;
4656         alias LPNMTBDISPINFO = LPNMTBDISPINFOW;
4657         alias NMTBGETINFOTIP = NMTBGETINFOTIPW;
4658         alias LPNMTBGETINFOTIP = LPNMTBGETINFOTIPW;
4659     }
4660 
4661     alias TBNOTIFY = TBNOTIFYW;
4662     alias LPTBNOTIFY = LPTBNOTIFYW;
4663     alias NMTOOLBAR = NMTOOLBARW;
4664     alias LPNMTOOLBAR = LPNMTOOLBARW;
4665     alias TTM_ADDTOOL = TTM_ADDTOOLW;
4666     alias TTM_DELTOOL = TTM_DELTOOLW;
4667     alias TTM_NEWTOOLRECT = TTM_NEWTOOLRECTW;
4668     alias TTM_GETTOOLINFO = TTM_GETTOOLINFOW;
4669     alias TTM_SETTOOLINFO = TTM_SETTOOLINFOW;
4670     alias TTM_HITTEST = TTM_HITTESTW;
4671     alias TTM_GETTEXT = TTM_GETTEXTW;
4672     alias TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTW;
4673     alias TTM_ENUMTOOLS = TTM_ENUMTOOLSW;
4674     alias TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLW;
4675     alias TTN_NEEDTEXT = TTN_NEEDTEXTW;
4676     alias TTN_GETDISPINFO = TTN_GETDISPINFOW;
4677     //alias SB_GETTEXT = SB_GETTEXTW;
4678     //alias SB_SETTEXT = SB_SETTEXTW;
4679     //alias SB_GETTEXTLENGTH = SB_GETTEXTLENGTHW;
4680     alias LV_ITEM = LV_ITEMW;
4681     alias LVITEM = LVITEMW;
4682     alias LPLVITEM = LVITEM*;
4683     alias LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKW;
4684 
4685     static if (_WIN32_IE >= 0x400) {
4686         alias LVBKIMAGE = LVBKIMAGEW;
4687         alias LPLVBKIMAGE = LPLVBKIMAGEW;
4688         alias LVM_SETBKIMAGE = LVM_SETBKIMAGEW;
4689         alias LVM_GETBKIMAGE = LVM_GETBKIMAGEW;
4690     }
4691 
4692     alias LVM_GETITEM = LVM_GETITEMW;
4693     alias LVM_SETITEM = LVM_SETITEMW;
4694     alias LVM_INSERTITEM = LVM_INSERTITEMW;
4695     alias LV_FINDINFO = LV_FINDINFOW;
4696     alias LVFINDINFO = LVFINDINFOW;
4697     alias LPFINDINFO = LPFINDINFOW;
4698     alias NMLVFINDITEM = NMLVFINDITEMW;
4699     alias PNMLVFINDITEM = PNMLVFINDITEMW;
4700     alias LPNMLVFINDITEM = LPNMLVFINDITEMW;
4701     alias LVM_FINDITEM = LVM_FINDITEMW;
4702     alias LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHW;
4703     alias LVM_EDITLABEL = LVM_EDITLABELW;
4704     alias LV_COLUMN = LV_COLUMNW;
4705     alias LVCOLUMN = LVCOLUMNW;
4706     alias LPLVCOLUMN = LVCOLUMNW*;
4707     alias LVM_GETCOLUMN = LVM_GETCOLUMNW;
4708     alias LVM_SETCOLUMN = LVM_SETCOLUMNW;
4709     alias LVM_INSERTCOLUMN = LVM_INSERTCOLUMNW;
4710     alias LVM_GETITEMTEXT = LVM_GETITEMTEXTW;
4711     alias LVM_SETITEMTEXT = LVM_SETITEMTEXTW;
4712     alias LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGW;
4713     alias LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITW;
4714     alias LVN_ENDLABELEDIT = LVN_ENDLABELEDITW;
4715     alias LVN_GETDISPINFO = LVN_GETDISPINFOW;
4716     alias LVN_SETDISPINFO = LVN_SETDISPINFOW;
4717 
4718     static if (_WIN32_IE >= 0x400) {
4719         alias LVN_GETINFOTIP = LVN_GETINFOTIPW;
4720         alias NMLVGETINFOTIP = NMLVGETINFOTIPW;
4721         alias LPNMLVGETINFOTIP = LPNMLVGETINFOTIPW;
4722     }
4723 
4724     alias LV_DISPINFO = LV_DISPINFOW;
4725     alias NMLVDISPINFO = NMLVDISPINFOW;
4726     alias LPNMLVDISPINFO = LPNMLVDISPINFOW;
4727     alias TVM_INSERTITEM = TVM_INSERTITEMW;
4728     alias TVM_GETITEM = TVM_GETITEMW;
4729     alias TVM_SETITEM = TVM_SETITEMW;
4730     alias TVM_EDITLABEL = TVM_EDITLABELW;
4731     alias TVM_GETISEARCHSTRING = TVM_GETISEARCHSTRINGW;
4732     alias TV_DISPINFO = NMTVDISPINFOW;
4733     alias NMTVDISPINFO = NMTVDISPINFOW;
4734     alias LPNMTVDISPINFO = LPNMTVDISPINFOW;
4735 
4736     static if (_WIN32_IE >= 0x400) {
4737         alias NMTVGETINFOTIP = NMTVGETINFOTIPW;
4738         alias LPNMTVGETINFOTIP = LPNMTVGETINFOTIPW;
4739         alias TVN_GETINFOTIP = TVN_GETINFOTIPW;
4740     }
4741 
4742     alias TVN_SELCHANGING = TVN_SELCHANGINGW;
4743     alias TVN_SELCHANGED = TVN_SELCHANGEDW;
4744     alias TVN_GETDISPINFO = TVN_GETDISPINFOW;
4745     alias TVN_SETDISPINFO = TVN_SETDISPINFOW;
4746     alias TVN_ITEMEXPANDING = TVN_ITEMEXPANDINGW;
4747     alias TVN_ITEMEXPANDED = TVN_ITEMEXPANDEDW;
4748     alias TVN_BEGINDRAG = TVN_BEGINDRAGW;
4749     alias TVN_BEGINRDRAG = TVN_BEGINRDRAGW;
4750     alias TVN_DELETEITEM = TVN_DELETEITEMW;
4751     alias TVN_BEGINLABELEDIT = TVN_BEGINLABELEDITW;
4752     alias TVN_ENDLABELEDIT = TVN_ENDLABELEDITW;
4753     alias TC_ITEMHEADER = TC_ITEMHEADERW;
4754     alias TC_ITEM = TC_ITEMW;
4755     alias TCITEM = TCITEMW;
4756     alias LPTCITEM = LPTCITEMW;
4757     alias TCM_GETITEM = TCM_GETITEMW;
4758     alias TCM_SETITEM = TCM_SETITEMW;
4759     alias TCM_INSERTITEM = TCM_INSERTITEMW;
4760     alias CreateStatusWindow = CreateStatusWindowW;
4761     alias DrawStatusText = DrawStatusTextW;
4762     alias ImageList_LoadImage = ImageList_LoadImageW;
4763     alias DTM_SETFORMAT = DTM_SETFORMATW;
4764     alias DTN_USERSTRING = DTN_USERSTRINGW;
4765     alias DTN_WMKEYDOWN = DTN_WMKEYDOWNW;
4766     alias DTN_FORMAT = DTN_FORMATW;
4767     alias DTN_FORMATQUERY = DTN_FORMATQUERYW;
4768     alias REBARBANDINFO = REBARBANDINFOW;
4769     alias LPREBARBANDINFO = REBARBANDINFO*;
4770     alias LPCREBARBANDINFO = LPCREBARBANDINFOW;
4771     alias REBARBANDINFO_V3_SIZE = REBARBANDINFOW_V3_SIZE;
4772     alias RB_INSERTBAND = RB_INSERTBANDW;
4773     alias RB_SETBANDINFO = RB_SETBANDINFOW;
4774 } else {
4775     alias HDITEM = HDITEMA;
4776     alias LPHDITEM = LPHDITEMA;
4777     alias TOOLINFO = TOOLINFOA;
4778     alias TOOLINFOA* PTOOLINFO, LPTOOLINFO;
4779     alias TTHITTESTINFO = TTHITTESTINFOA;
4780     alias TTHITTESTINFOA* LPHITTESTINFO, LPTTHITTESTINFO;
4781     alias TOOLTIPTEXT = TOOLTIPTEXTA;
4782     alias LPTOOLTIPTEXT = TOOLTIPTEXTA*;
4783     alias NMTTDISPINFO = NMTTDISPINFOA;
4784     alias LPNMTTDISPINFO = NMTTDISPINFOA*;
4785     alias TV_ITEM = TV_ITEMA;
4786     alias LPTV_ITEM = TV_ITEMA*;
4787     alias TVITEM = TVITEMA;
4788     alias LPTVITEM = TVITEMA*;
4789 
4790     static if (_WIN32_IE >= 0x400) {
4791         alias TVITEMEX = TVITEMEXA;
4792         alias LPTVITEMEX = TVITEMEXA*;
4793     }
4794 
4795     alias TV_INSERTSTRUCT = TV_INSERTSTRUCTA;
4796     alias LPTV_INSERTSTRUCT = TV_INSERTSTRUCTA*;
4797     alias TVINSERTSTRUCT = TVINSERTSTRUCTA;
4798     alias LPTVINSERTSTRUCT = TVINSERTSTRUCTA*;
4799     alias NM_TREEVIEW = NM_TREEVIEWA;
4800     alias LPNM_TREEVIEW = NM_TREEVIEWA*;
4801     alias NMTREEVIEW = NMTREEVIEWA;
4802     alias LPNMTREEVIEW = NMTREEVIEWA*;
4803     alias NMHDDISPINFO = NMHDDISPINFOW;
4804     alias LPNMHDDISPINFO = NMHDDISPINFOW*;
4805 
4806     alias ACM_OPEN = ACM_OPENA;
4807     alias COMBOBOXEXITEM = COMBOBOXEXITEMA;
4808     alias PCOMBOBOXEXITEM = PCOMBOBOXEXITEMA;
4809     //alias PCCOMBOBOXEXITEM = PCCOMBOBOXEXITEMA; fixme
4810     alias CBEM_INSERTITEM = CBEM_INSERTITEMA;
4811     alias CBEM_SETITEM = CBEM_SETITEMA;
4812     alias CBEM_GETITEM = CBEM_GETITEMA;
4813     alias CBEN_ENDEDIT = CBEN_ENDEDITA;
4814     alias NMCBEENDEDIT = NMCBEENDEDITA;
4815     alias LPNMCBEENDEDIT = LPNMCBEENDEDITA;
4816     alias PNMCBEENDEDIT = PNMCBEENDEDITA;
4817 
4818     static if (_WIN32_IE >= 0x400) {
4819         alias TB_GETBUTTONINFO = TB_GETBUTTONINFOA;
4820         alias TB_SETBUTTONINFO = TB_SETBUTTONINFOA;
4821         alias TB_INSERTBUTTON = TB_INSERTBUTTONA;
4822         alias TB_ADDBUTTONS = TB_ADDBUTTONSA;
4823         alias TB_MAPACCELERATOR = TB_MAPACCELERATORA;
4824         alias TB_GETSTRING = TB_GETSTRINGA;
4825         alias NMCOMBOBOXEX = NMCOMBOBOXEXA;
4826         alias PNMCOMBOBOXEX = PNMCOMBOBOXEXA;
4827         alias CBEN_DRAGBEGIN = CBEN_DRAGBEGINA;
4828         alias CBEN_GETDISPINFO = CBEN_GETDISPINFOA;
4829         alias NMCBEDRAGBEGIN = NMCBEDRAGBEGINA;
4830         alias LPNMCBEDRAGBEGIN = LPNMCBEDRAGBEGINA;
4831         alias PNMCBEDRAGBEGIN = PNMCBEDRAGBEGINA;
4832         alias TBN_GETDISPINFO = TBN_GETDISPINFOA;
4833         alias NMTBDISPINFO = NMTBDISPINFOA;
4834         alias LPNMTBDISPINFO = LPNMTBDISPINFOA;
4835         alias NMTBGETINFOTIP = NMTBGETINFOTIPA;
4836         alias LPNMTBGETINFOTIP = LPNMTBGETINFOTIPA;
4837     }
4838 
4839     alias SB_GETTEXT = SB_GETTEXTA;
4840     alias SB_SETTEXT = SB_SETTEXTA;
4841     alias SB_GETTEXTLENGTH = SB_GETTEXTLENGTHA;
4842     alias HDM_INSERTITEM = HDM_INSERTITEMA;
4843     alias HDM_GETITEM = HDM_GETITEMA;
4844     alias HDM_SETITEM = HDM_SETITEMA;
4845     alias HDN_ITEMCHANGING = HDN_ITEMCHANGINGA;
4846     alias HDN_ITEMCHANGED = HDN_ITEMCHANGEDA;
4847     alias HDN_ITEMCLICK = HDN_ITEMCLICKA;
4848     alias HDN_ITEMDBLCLICK = HDN_ITEMDBLCLICKA;
4849     alias HDN_DIVIDERDBLCLICK = HDN_DIVIDERDBLCLICKA;
4850     alias HDN_BEGINTRACK = HDN_BEGINTRACKA;
4851     alias HDN_ENDTRACK = HDN_ENDTRACKA;
4852     alias HDN_TRACK = HDN_TRACKA;
4853 
4854     static if (_WIN32_IE >= 0x300) {
4855         alias HDN_GETDISPINFO = HDN_GETDISPINFOA;
4856     }
4857 
4858     alias HD_NOTIFY = HD_NOTIFYA;
4859     alias TBSAVEPARAMS = TBSAVEPARAMSA;
4860     alias TB_GETBUTTONTEXT = TB_GETBUTTONTEXTA;
4861     alias TB_SAVERESTORE = TB_SAVERESTOREA;
4862     alias TB_ADDSTRING = TB_ADDSTRINGA;
4863     alias TBN_GETBUTTONINFO = TBN_GETBUTTONINFOA;
4864 
4865     static if (_WIN32_IE >= 0x400) {
4866         alias TBBUTTONINFO = TBBUTTONINFOA;
4867         alias LPTBBUTTONINFO = LPTBBUTTONINFOA;
4868     }
4869 
4870     alias TBNOTIFY = TBNOTIFYA;
4871     alias LPTBNOTIFY = LPTBNOTIFYA;
4872     alias NMTOOLBAR = NMTOOLBARA;
4873     alias LPNMTOOLBAR = LPNMTOOLBARA;
4874     alias TTM_ADDTOOL = TTM_ADDTOOLA;
4875     alias TTM_DELTOOL = TTM_DELTOOLA;
4876     alias TTM_NEWTOOLRECT = TTM_NEWTOOLRECTA;
4877     alias TTM_GETTOOLINFO = TTM_GETTOOLINFOA;
4878     alias TTM_SETTOOLINFO = TTM_SETTOOLINFOA;
4879     alias TTM_HITTEST = TTM_HITTESTA;
4880     alias TTM_GETTEXT = TTM_GETTEXTA;
4881     alias TTM_UPDATETIPTEXT = TTM_UPDATETIPTEXTA;
4882     alias TTM_ENUMTOOLS = TTM_ENUMTOOLSA;
4883     alias TTM_GETCURRENTTOOL = TTM_GETCURRENTTOOLA;
4884     alias TTN_NEEDTEXT = TTN_NEEDTEXTA;
4885     alias TTN_GETDISPINFO = TTN_GETDISPINFOA;
4886     alias LV_ITEM = LV_ITEMA;
4887     alias LVITEM = LVITEMA;
4888     alias LPLVITEM = LVITEM*;
4889     alias LPSTR_TEXTCALLBACK = LPSTR_TEXTCALLBACKA;
4890 
4891     static if (_WIN32_IE >= 0x400) {
4892         alias LVBKIMAGE = LVBKIMAGEA;
4893         alias LPLVBKIMAGE = LPLVBKIMAGEA;
4894         alias LVM_SETBKIMAGE = LVM_SETBKIMAGEA;
4895         alias LVM_GETBKIMAGE = LVM_GETBKIMAGEA;
4896     }
4897 
4898     alias LVM_GETITEM = LVM_GETITEMA;
4899     alias LVM_SETITEM = LVM_SETITEMA;
4900     alias LVM_INSERTITEM = LVM_INSERTITEMA;
4901     alias LV_FINDINFO = LV_FINDINFOA;
4902     alias LVFINDINFO = LVFINDINFOA;
4903     alias LPFINDINFO = LPFINDINFOA;
4904     alias NMLVFINDITEM = NMLVFINDITEMA;
4905     alias PNMLVFINDITEM = PNMLVFINDITEMA;
4906     alias LPNMLVFINDITEM = LPNMLVFINDITEMA;
4907     alias LVM_FINDITEM = LVM_FINDITEMA;
4908     alias LVM_GETSTRINGWIDTH = LVM_GETSTRINGWIDTHA;
4909     alias LVM_EDITLABEL = LVM_EDITLABELA;
4910     alias LV_COLUMN = LV_COLUMNA;
4911     alias LVCOLUMN = LVCOLUMNA;
4912     alias LPLVCOLUMN = LVCOLUMNA*;
4913     alias LVM_GETCOLUMN = LVM_GETCOLUMNA;
4914     alias LVM_SETCOLUMN = LVM_SETCOLUMNA;
4915     alias LVM_INSERTCOLUMN = LVM_INSERTCOLUMNA;
4916     alias LVM_GETITEMTEXT = LVM_GETITEMTEXTA;
4917     alias LVM_SETITEMTEXT = LVM_SETITEMTEXTA;
4918     alias LVM_GETISEARCHSTRING = LVM_GETISEARCHSTRINGA;
4919     alias LVN_BEGINLABELEDIT = LVN_BEGINLABELEDITA;
4920     alias LVN_ENDLABELEDIT = LVN_ENDLABELEDITA;
4921     alias LVN_GETDISPINFO = LVN_GETDISPINFOA;
4922     alias LVN_SETDISPINFO = LVN_SETDISPINFOA;
4923 
4924     static if (_WIN32_IE >= 0x400) {
4925         alias LVN_GETINFOTIP = LVN_GETINFOTIPA;
4926         alias NMLVGETINFOTIP = NMLVGETINFOTIPA;
4927         alias LPNMLVGETINFOTIP = LPNMLVGETINFOTIPA;
4928     }
4929 
4930     alias LV_DISPINFO = LV_DISPINFOA;
4931     alias NMLVDISPINFO = NMLVDISPINFOA;
4932     alias LPNMLVDISPINFO = LPNMLVDISPINFOA;
4933     alias TVM_INSERTITEM = TVM_INSERTITEMA;
4934     alias TVM_GETITEM = TVM_GETITEMA;
4935     alias TVM_SETITEM = TVM_SETITEMA;
4936     alias TVM_EDITLABEL = TVM_EDITLABELA;
4937     alias TVM_GETISEARCHSTRING = TVM_GETISEARCHSTRINGA;
4938     alias TV_DISPINFO = NMTVDISPINFOA;
4939     alias NMTVDISPINFO = NMTVDISPINFOA;
4940     alias LPNMTVDISPINFO = LPNMTVDISPINFOA;
4941 
4942     static if (_WIN32_IE >= 0x400) {
4943         alias NMTVGETINFOTIP = NMTVGETINFOTIPA;
4944         alias LPNMTVGETINFOTIP = LPNMTVGETINFOTIPA;
4945         alias TVN_GETINFOTIP = TVN_GETINFOTIPA;
4946     }
4947 
4948     alias TVN_SELCHANGING = TVN_SELCHANGINGA;
4949     alias TVN_SELCHANGED = TVN_SELCHANGEDA;
4950     alias TVN_GETDISPINFO = TVN_GETDISPINFOA;
4951     alias TVN_SETDISPINFO = TVN_SETDISPINFOA;
4952     alias TVN_ITEMEXPANDING = TVN_ITEMEXPANDINGA;
4953     alias TVN_ITEMEXPANDED = TVN_ITEMEXPANDEDA;
4954     alias TVN_BEGINDRAG = TVN_BEGINDRAGA;
4955     alias TVN_BEGINRDRAG = TVN_BEGINRDRAGA;
4956     alias TVN_DELETEITEM = TVN_DELETEITEMA;
4957     alias TVN_BEGINLABELEDIT = TVN_BEGINLABELEDITA;
4958     alias TVN_ENDLABELEDIT = TVN_ENDLABELEDITA;
4959     alias TC_ITEMHEADER = TC_ITEMHEADERA;
4960     alias TC_ITEM = TC_ITEMA;
4961     alias TCITEM = TCITEMA;
4962     alias LPTCITEM = LPTCITEMA;
4963     alias TCM_GETITEM = TCM_GETITEMA;
4964     alias TCM_SETITEM = TCM_SETITEMA;
4965     alias TCM_INSERTITEM = TCM_INSERTITEMA;
4966     alias CreateStatusWindow = CreateStatusWindowA;
4967     alias DrawStatusText = DrawStatusTextA;
4968     alias ImageList_LoadImage = ImageList_LoadImageA;
4969     alias DTM_SETFORMAT = DTM_SETFORMATA;
4970     alias DTN_USERSTRING = DTN_USERSTRINGA;
4971     alias DTN_WMKEYDOWN = DTN_WMKEYDOWNA;
4972     alias DTN_FORMAT = DTN_FORMATA;
4973     alias DTN_FORMATQUERY = DTN_FORMATQUERYA;
4974     alias REBARBANDINFO = REBARBANDINFOA;
4975     alias LPREBARBANDINFO = REBARBANDINFOA*;
4976     alias LPCREBARBANDINFO = LPCREBARBANDINFOA;
4977     alias REBARBANDINFO_V3_SIZE = REBARBANDINFOA_V3_SIZE;
4978     alias RB_INSERTBAND = RB_INSERTBANDA;
4979     alias RB_SETBANDINFO = RB_SETBANDINFOA;
4980 }
4981 
4982 extern (Windows) {
4983     alias INT function(PVOID, PVOID) PFNDPAENUMCALLBACK;
4984     alias INT function(PVOID, PVOID) PFNDSAENUMCALLBACK;
4985     alias INT function(PVOID, PVOID, LPARAM) PFNDPACOMPARE;
4986 }
4987 
4988 static if (_WIN32_WINNT >= 0x501) {
4989     extern (Windows)
4990     alias LRESULT function(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR)
4991     SUBCLASSPROC;
4992 
4993     struct LITEM {
4994         UINT mask;
4995         int iLink;
4996         UINT state;
4997         UINT stateMask;
4998         WCHAR[MAX_LINKID_TEXT] szID = 0;
4999         WCHAR[L_MAX_URL_LENGTH] szUrl = 0;
5000     }
5001 
5002     alias PLITEM = LITEM*;
5003 
5004     struct LHITTESTINFO {
5005         POINT pt;
5006         LITEM item;
5007     }
5008 
5009     alias PLHITTESTINFO = LHITTESTINFO*;
5010 
5011     struct NMLINK {
5012         NMHDR hdr;
5013         LITEM item;
5014     }
5015 
5016     alias PNMLINK = NMLINK*;
5017 }
5018 
5019 uint INDEXTOOVERLAYMASK(uint i) {
5020     return i << 8;
5021 }
5022 
5023 uint INDEXTOSTATEIMAGEMASK(uint i) {
5024     return i << 12;
5025 }
5026 
5027 template HANDLE_WM_NOTIFY(R) {
5028     private alias _prm_HANDLE_WM_NOTIFY = extern (Windows)
5029     R function(HWND, int, NMHDR*); // to inject linkage type
5030     R HANDLE_WM_NOTIFY(HWND hwnd, WPARAM wParam, LPARAM lParam, _prm_HANDLE_WM_NOTIFY fn) {
5031         return fn(hwnd, wParam, cast(NMHDR*) lParam);
5032     }
5033 }
5034 
5035 private alias _prm_FORWARD_WM_NOTIFY = extern (Windows)
5036 LRESULT function(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // to inject linkage type
5037 LRESULT FORWARD_WM_NOTIFY(HWND hwnd, int idFrom, NMHDR* pnmhdr, _prm_FORWARD_WM_NOTIFY fn) {
5038     return fn(hwnd, WM_NOTIFY, idFrom, cast(LPARAM) pnmhdr);
5039 }
5040 
5041 //#define CCSIZEOF_STRUCT(s, m) (((int)((PBYTE)(&((s*)0)->m)-((PBYTE)((s*)0))))+sizeof(((s*)0)->m))
5042 
5043 LPARAM MAKEIPADDRESS(ubyte b1, ubyte b2, ubyte b3, ubyte b4) {
5044     return (cast(DWORD) b1 << 24)
5045         | (cast(DWORD) b2 << 16)
5046         | (cast(DWORD) b3 << 8)
5047         | (cast(DWORD) b4);
5048 }
5049 
5050 LPARAM MAKEIPRANGE(ubyte low, ubyte high) {
5051     return (cast(int) high << 8) | low;
5052 }
5053 
5054 ubyte FIRST_IPADDRESS(LPARAM x) {
5055     return cast(ubyte)(x >> 24);
5056 }
5057 
5058 ubyte SECOND_IPADDRESS(LPARAM x) {
5059     return cast(ubyte)(x >> 16);
5060 }
5061 
5062 ubyte THIRD_IPADDRESS(LPARAM x) {
5063     return cast(ubyte)(x >> 8);
5064 }
5065 
5066 ubyte FOURTH_IPADDRESS(LPARAM x) {
5067     return cast(ubyte) x;
5068 }
5069 
5070 HWND Animate_Create(HWND hwndP, UINT id, DWORD dwStyle,
5071     HINSTANCE hInstance) {
5072     return CreateWindow(cast(TCHAR*) ANIMATE_CLASS.ptr, null, dwStyle, 0, 0, 0, 0, hwndP,
5073         cast(HMENU) id, hInstance, null);
5074 }
5075 
5076 BOOL Animate_Open(HWND hwnd, LPTSTR szName) {
5077     return cast(BOOL) SendMessage(hwnd, ACM_OPEN, 0, cast(LPARAM) szName);
5078 }
5079 
5080 BOOL Animate_OpenEx(HWND hwnd, HINSTANCE hInst, LPTSTR szName) {
5081     return cast(BOOL) SendMessage(hwnd, ACM_OPEN, cast(WPARAM) hInst,
5082         cast(LPARAM) szName);
5083 }
5084 
5085 BOOL Animate_Play(HWND hwnd, int from, int to, int rep) {
5086     return cast(BOOL) SendMessage(hwnd, ACM_PLAY, rep,
5087         MAKELONG(cast(ushort) from, cast(ushort) to));
5088 }
5089 
5090 BOOL Animate_Stop(HWND hwnd) {
5091     return cast(BOOL) SendMessage(hwnd, ACM_STOP, 0, 0);
5092 }
5093 
5094 BOOL Animate_Close(HWND hwnd) {
5095     return Animate_Open(hwnd, null);
5096 }
5097 
5098 BOOL Animate_Seek(HWND hwnd, int frame) {
5099     return Animate_Play(hwnd, frame, frame, 1);
5100 }
5101 
5102 extern (Windows) nothrow @nogc {
5103     HBITMAP CreateMappedBitmap(HINSTANCE, INT_PTR, UINT, LPCOLORMAP, int);
5104     HWND CreateStatusWindowA(LONG, LPCSTR, HWND, UINT);
5105     HWND CreateStatusWindowW(LONG, LPCWSTR, HWND, UINT);
5106     HWND CreateToolbarEx(HWND, DWORD, UINT, int, HINSTANCE, UINT_PTR,
5107         LPCTBBUTTON, int, int, int, int, int, UINT);
5108     HWND CreateUpDownControl(DWORD, int, int, int, int, HWND, int, HINSTANCE,
5109         HWND, int, int, int);
5110 }
5111 
5112 HWND DateTime_GetMonthCal(HWND hwnd) {
5113     return cast(HWND) SendMessage(hwnd, DTM_GETMONTHCAL, 0, 0);
5114 }
5115 
5116 COLORREF DateTime_GetMonthCalColor(HWND hwnd, int iColor) {
5117     return cast(COLORREF) SendMessage(hwnd, DTM_GETMCCOLOR, iColor, 0);
5118 }
5119 
5120 HFONT DateTime_GetMonthCalFont(HWND hwnd) {
5121     return cast(HFONT) SendMessage(hwnd, DTM_GETMCFONT, 0, 0);
5122 }
5123 
5124 DWORD DateTime_GetRange(HWND hwnd, LPSYSTEMTIME lpSysTimeArray) {
5125     return cast(DWORD) SendMessage(hwnd, DTM_GETRANGE, 0, cast(LPARAM) lpSysTimeArray);
5126 }
5127 
5128 DWORD DateTime_GetSystemtime(HWND hwnd, LPSYSTEMTIME lpSysTime) {
5129     return cast(DWORD) SendMessage(hwnd, DTM_GETSYSTEMTIME, 0, cast(LPARAM) lpSysTime);
5130 }
5131 
5132 BOOL DateTime_SetFormat(HWND hwnd, LPCTSTR lpszFormat) {
5133     return cast(BOOL) SendMessage(hwnd, DTM_SETFORMAT, 0,
5134         cast(LPARAM) lpszFormat);
5135 }
5136 
5137 LRESULT DateTime_SetMonthCalColor(HWND hwnd, int iColor, COLORREF clr) {
5138     return SendMessage(hwnd, DTM_SETMCCOLOR, cast(WPARAM) iColor,
5139         cast(LPARAM) clr);
5140 }
5141 
5142 void DateTime_SetMonthCalFont(HWND hwnd, HFONT hfont, BOOL fRedraw) {
5143     SendMessage(hwnd, DTM_SETMCFONT, cast(WPARAM) hfont, fRedraw);
5144 }
5145 
5146 BOOL DateTime_SetRange(HWND hwnd, WPARAM flags, LPSYSTEMTIME lpSysTimeArray) {
5147     return cast(BOOL) SendMessage(hwnd, DTM_SETRANGE, flags,
5148         cast(LPARAM) lpSysTimeArray);
5149 }
5150 
5151 BOOL DateTime_SetSystemtime(HWND hwnd, WPARAM flag, LPSYSTEMTIME lpSysTime) {
5152     return cast(BOOL) SendMessage(hwnd, DTM_SETSYSTEMTIME, flag,
5153         cast(LPARAM) lpSysTime);
5154 }
5155 
5156 extern (Windows) nothrow @nogc {
5157     void DrawInsert(HWND, HWND, int);
5158     void DrawStatusTextA(HDC, LPRECT, LPCSTR, UINT);
5159     void DrawStatusTextW(HDC, LPRECT, LPCWSTR, UINT);
5160     void GetEffectiveClientRect(HWND, LPRECT, LPINT);
5161 }
5162 
5163 int Header_GetItemCount(HWND w) {
5164     return cast(int) SendMessage(w, HDM_GETITEMCOUNT, 0, 0);
5165 }
5166 
5167 int Header_InsertItem(HWND w, int i, const(HDITEM)* phdi) {
5168     return cast(int) SendMessage(w, HDM_INSERTITEM, i, cast(LPARAM) phdi);
5169 }
5170 
5171 BOOL Header_DeleteItem(HWND w, int i) {
5172     return cast(BOOL) SendMessage(w, HDM_DELETEITEM, i, 0);
5173 }
5174 
5175 BOOL Header_GetItem(HWND w, int i, LPHDITEM phdi) {
5176     return cast(BOOL) SendMessage(w, HDM_GETITEM, i, cast(LPARAM) phdi);
5177 }
5178 
5179 BOOL Header_SetItem(HWND w, int i, const(HDITEM)* phdi) {
5180     return cast(BOOL) SendMessage(w, HDM_SETITEM, i, cast(LPARAM) phdi);
5181 }
5182 
5183 BOOL Header_Layout(HWND w, LPHDLAYOUT playout) {
5184     return cast(BOOL) SendMessage(w, HDM_LAYOUT, 0, cast(LPARAM) playout);
5185 }
5186 
5187 static if (_WIN32_IE >= 0x300) {
5188     int Header_OrderToIndex(HWND w, int i) {
5189         return cast(int) SendMessage(w, HDM_ORDERTOINDEX, i, 0);
5190     }
5191 
5192     BOOL Header_GetItemRect(HWND w, int i, RECT* r) {
5193         return cast(BOOL) SendMessage(w, HDM_GETITEMRECT, i, cast(LPARAM) r);
5194     }
5195 
5196     BOOL Header_GetOrderArray(HWND w, int iSize, LPINT lpiArray) {
5197         return cast(BOOL) SendMessage(w, HDM_GETORDERARRAY, iSize,
5198             cast(LPARAM) lpiArray);
5199     }
5200 
5201     BOOL Header_SetOrderArray(HWND w, int iSize, LPINT lpiArray) {
5202         return cast(BOOL) SendMessage(w, HDM_SETORDERARRAY, iSize,
5203             cast(LPARAM) lpiArray);
5204     }
5205 
5206     HIMAGELIST Header_CreateDragImage(HWND w, int i) {
5207         return cast(HIMAGELIST) SendMessage(w, HDM_CREATEDRAGIMAGE, i, 0);
5208     }
5209 
5210     HIMAGELIST Header_SetImageList(HWND w, HIMAGELIST himl) {
5211         return cast(HIMAGELIST) SendMessage(w, HDM_SETIMAGELIST, 0,
5212             cast(LPARAM) himl);
5213     }
5214 
5215     HIMAGELIST Header_GetImageList(HWND w) {
5216         return cast(HIMAGELIST) SendMessage(w, HDM_GETIMAGELIST, 0, 0);
5217     }
5218 }
5219 
5220 static if (_WIN32_IE >= 0x400) {
5221     BOOL Header_GetUnicodeFormat(HWND w) {
5222         return cast(BOOL) SendMessage(w, HDM_GETUNICODEFORMAT, 0, 0);
5223     }
5224 
5225     BOOL Header_SetUnicodeFormat(HWND w, BOOL fUnicode) {
5226         return cast(BOOL) SendMessage(w, HDM_SETUNICODEFORMAT, fUnicode, 0);
5227     }
5228 }
5229 
5230 extern (Windows) nothrow @nogc {
5231     HDSA DSA_Create(INT, INT);
5232     BOOL DSA_Destroy(HDSA);
5233     VOID DSA_DestroyCallback(HDSA, PFNDSAENUMCALLBACK, PVOID);
5234     PVOID DSA_GetItemPtr(HDSA, INT);
5235     INT DSA_InsertItem(HDSA, INT, PVOID);
5236     HDPA DPA_Create(INT);
5237     BOOL DPA_Destroy(HDPA);
5238     PVOID DPA_DeletePtr(HDPA, INT);
5239     BOOL DPA_DeleteAllPtrs(HDPA);
5240     VOID DPA_EnumCallback(HDPA, PFNDPAENUMCALLBACK, PVOID);
5241     VOID DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, PVOID);
5242     BOOL DPA_SetPtr(HDPA, INT, PVOID);
5243     INT DPA_InsertPtr(HDPA, INT, PVOID);
5244     PVOID DPA_GetPtr(HDPA, INT_PTR);
5245     BOOL DPA_Sort(HDPA, PFNDPACOMPARE, LPARAM);
5246     INT DPA_Search(HDPA, PVOID, INT, PFNDPACOMPARE, LPARAM, UINT);
5247     BOOL Str_SetPtrW(LPWSTR*, LPCWSTR);
5248 
5249     static if (_WIN32_IE >= 0x400) {
5250         BOOL FlatSB_EnableScrollBar(HWND, INT, UINT);
5251         BOOL FlatSB_ShowScrollBar(HWND, INT, BOOL);
5252         BOOL FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT);
5253         BOOL FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO);
5254         INT FlatSB_GetScrollPos(HWND, INT);
5255         BOOL FlatSB_GetScrollProp(HWND, INT, LPINT);
5256         version (Win64) {
5257             BOOL FlatSB_GetScrollPropPtr(HWND, INT, PINT_PTR);
5258         } else {
5259             alias FlatSB_GetScrollPropPtr = FlatSB_GetScrollProp;
5260         }
5261         INT FlatSB_SetScrollPos(HWND, INT, INT, BOOL);
5262         INT FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL);
5263         INT FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL);
5264         BOOL FlatSB_SetScrollProp(HWND, UINT, INT_PTR, BOOL);
5265         alias FlatSB_SetScrollPropPtr = FlatSB_SetScrollProp;
5266         BOOL InitializeFlatSB(HWND);
5267         HRESULT UninitializeFlatSB(HWND);
5268     }
5269 
5270     static if (_WIN32_WINNT >= 0x501) {
5271         BOOL SetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR);
5272         BOOL GetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR*);
5273         BOOL RemoveWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR);
5274         LRESULT DefSubclassProc(HWND, UINT, WPARAM, LPARAM);
5275         INT DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF,
5276             COLORREF, INT, INT);
5277     }
5278 
5279     int ImageList_Add(HIMAGELIST, HBITMAP, HBITMAP);
5280     int ImageList_AddMasked(HIMAGELIST, HBITMAP, COLORREF);
5281     BOOL ImageList_BeginDrag(HIMAGELIST, int, int, int);
5282     HIMAGELIST ImageList_Create(int, int, UINT, int, int);
5283     BOOL ImageList_Destroy(HIMAGELIST);
5284     BOOL ImageList_DragEnter(HWND, int, int);
5285     BOOL ImageList_DragLeave(HWND);
5286     BOOL ImageList_DragMove(int, int);
5287     BOOL ImageList_DragShowNolock(BOOL);
5288     BOOL ImageList_Draw(HIMAGELIST, int, HDC, int, int, UINT);
5289     BOOL ImageList_DrawEx(HIMAGELIST, int, HDC, int, int, int, int, COLORREF,
5290         COLORREF, UINT);
5291     void ImageList_EndDrag();
5292     COLORREF ImageList_GetBkColor(HIMAGELIST);
5293     HIMAGELIST ImageList_GetDragImage(LPPOINT, LPPOINT);
5294     HICON ImageList_GetIcon(HIMAGELIST, int, UINT);
5295     BOOL ImageList_GetIconSize(HIMAGELIST, int*, int*);
5296     int ImageList_GetImageCount(HIMAGELIST);
5297     BOOL ImageList_GetImageInfo(HIMAGELIST, int, IMAGEINFO*);
5298     HIMAGELIST ImageList_LoadImageA(HINSTANCE, LPCSTR, int, int, COLORREF,
5299         UINT, UINT);
5300     HIMAGELIST ImageList_LoadImageW(HINSTANCE, LPCWSTR, int, int, COLORREF,
5301         UINT, UINT);
5302     HIMAGELIST ImageList_Merge(HIMAGELIST, int, HIMAGELIST, int, int, int);
5303     BOOL ImageList_Remove(HIMAGELIST, int);
5304     BOOL ImageList_Replace(HIMAGELIST, int, HBITMAP, HBITMAP);
5305     int ImageList_ReplaceIcon(HIMAGELIST, int, HICON);
5306     COLORREF ImageList_SetBkColor(HIMAGELIST, COLORREF);
5307     BOOL ImageList_SetDragCursorImage(HIMAGELIST, int, int, int);
5308     BOOL ImageList_SetIconSize(HIMAGELIST, int, int);
5309     BOOL ImageList_SetOverlayImage(HIMAGELIST, int, int);
5310 
5311     //#ifdef _OBJIDL_H
5312     HIMAGELIST ImageList_Read(LPSTREAM);
5313     BOOL ImageList_Write(HIMAGELIST, LPSTREAM);
5314     //#endif
5315 
5316     static if (_WIN32_IE >= 0x400) {
5317         HIMAGELIST ImageList_Duplicate(HIMAGELIST himl);
5318     }
5319 
5320     void InitCommonControls();
5321 
5322     static if (_WIN32_IE >= 0x300) {
5323         BOOL InitCommonControlsEx(LPINITCOMMONCONTROLSEX);
5324     }
5325 
5326     int LBItemFromPt(HWND, POINT, BOOL);
5327 }
5328 
5329 int ImageList_AddIcon(HIMAGELIST himl, HICON hicon) {
5330     return ImageList_ReplaceIcon(himl, -1, hicon);
5331 }
5332 
5333 HICON ImageList_ExtractIcon(HINSTANCE hi, HIMAGELIST himl, int i) {
5334     return ImageList_GetIcon(himl, i, 0);
5335 }
5336 
5337 HIMAGELIST ImageList_LoadBitmap(HINSTANCE hi, LPCTSTR lpbmp, int cx,
5338     int cGrow, COLORREF crMask) {
5339     return ImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0);
5340 }
5341 
5342 BOOL ImageList_RemoveAll(HIMAGELIST himl) {
5343     return ImageList_Remove(himl, -1);
5344 }
5345 
5346 COLORREF ListView_GetBkColor(HWND w) {
5347     return cast(COLORREF) SendMessage(w, LVM_GETBKCOLOR, 0, 0);
5348 }
5349 
5350 HIMAGELIST ListView_GetImageList(HWND w, int i) {
5351     return cast(HIMAGELIST) SendMessage(w, LVM_GETIMAGELIST, i, 0);
5352 }
5353 
5354 int ListView_GetItemCount(HWND w) {
5355     return cast(int) SendMessage(w, LVM_GETITEMCOUNT, 0, 0);
5356 }
5357 
5358 BOOL ListView_GetItem(HWND w, LPLVITEM pitem) {
5359     return cast(BOOL) SendMessage(w, LVM_GETITEM, 0, cast(LPARAM) pitem);
5360 }
5361 
5362 BOOL ListView_SetBkColor(HWND w, COLORREF c) {
5363     return cast(BOOL) SendMessage(w, LVM_SETBKCOLOR, 0, cast(LPARAM) c);
5364 }
5365 
5366 HIMAGELIST ListView_SetImageList(HWND w, HIMAGELIST h, int i) {
5367     return cast(HIMAGELIST) SendMessage(w, LVM_SETIMAGELIST, i,
5368         cast(LPARAM) h);
5369 }
5370 
5371 BOOL ListView_SetItem(HWND w, const(LV_ITEM)* i) {
5372     return cast(BOOL) SendMessage(w, LVM_SETITEM, 0, cast(LPARAM) i);
5373 }
5374 
5375 int ListView_InsertItem(HWND w, const(LV_ITEM)* i) {
5376     return cast(int) SendMessage(w, LVM_INSERTITEM, 0, cast(LPARAM) i);
5377 }
5378 
5379 BOOL ListView_DeleteItem(HWND w, int i) {
5380     return cast(BOOL) SendMessage(w, LVM_DELETEITEM, i, 0);
5381 }
5382 
5383 BOOL ListView_DeleteAllItems(HWND w) {
5384     return cast(BOOL) SendMessage(w, LVM_DELETEALLITEMS, 0, 0);
5385 }
5386 
5387 UINT ListView_GetCallbackMask(HWND w) {
5388     return cast(UINT) SendMessage(w, LVM_GETCALLBACKMASK, 0, 0);
5389 }
5390 
5391 BOOL ListView_SetCallbackMask(HWND w, UINT m) {
5392     return cast(BOOL) SendMessage(w, LVM_SETCALLBACKMASK, m, 0);
5393 }
5394 
5395 int ListView_GetNextItem(HWND w, int i, UINT f) {
5396     return cast(int) SendMessage(w, LVM_GETNEXTITEM, i, MAKELPARAM(cast(ushort) f, 0));
5397 }
5398 
5399 int ListView_FindItem(HWND w, int i, const(LV_FINDINFO)* p) {
5400     return cast(int) SendMessage(w, LVM_FINDITEM, i, cast(LPARAM) p);
5401 }
5402 
5403 BOOL ListView_GetItemRect(HWND w, int i, LPRECT p, int c) {
5404     if (p)
5405         p.left = c;
5406     return cast(BOOL) SendMessage(w, LVM_GETITEMRECT, i, cast(LPARAM) p);
5407 }
5408 
5409 BOOL ListView_SetItemPosition(HWND w, int i, int x, int y) {
5410     return cast(BOOL) SendMessage(w, LVM_SETITEMPOSITION, i, MAKELPARAM(cast(ushort) x, cast(ushort) y));
5411 }
5412 
5413 BOOL ListView_GetItemPosition(HWND w, int i, POINT* p) {
5414     return cast(BOOL) SendMessage(w, LVM_GETITEMPOSITION, i, cast(LPARAM) p);
5415 }
5416 
5417 DWORD ListView_GetItemSpacing(HWND w, BOOL f) {
5418     return cast(DWORD) SendMessage(w, LVM_GETITEMSPACING, f, 0);
5419 }
5420 
5421 int ListView_GetStringWidth(HWND w, LPCSTR s) {
5422     return cast(int) SendMessage(w, LVM_GETSTRINGWIDTH, 0, cast(LPARAM) s);
5423 }
5424 
5425 int ListView_HitTest(HWND w, LPLVHITTESTINFO p) {
5426     return cast(int) SendMessage(w, LVM_HITTEST, 0, cast(LPARAM) p);
5427 }
5428 
5429 BOOL ListView_EnsureVisible(HWND w, int i, BOOL f) {
5430     return cast(BOOL) SendMessage(w, LVM_ENSUREVISIBLE, i, MAKELPARAM(cast(ushort) f, 0));
5431 }
5432 
5433 BOOL ListView_Scroll(HWND w, int dx, int dy) {
5434     return cast(BOOL) SendMessage(w, LVM_SCROLL, dx, dy);
5435 }
5436 
5437 BOOL ListView_RedrawItems(HWND w, int f, int l) {
5438     return cast(BOOL) SendMessage(w, LVM_REDRAWITEMS, f, l);
5439 }
5440 
5441 BOOL ListView_Arrange(HWND w, UINT c) {
5442     return cast(BOOL) SendMessage(w, LVM_ARRANGE, c, 0);
5443 }
5444 
5445 HWND ListView_EditLabel(HWND w, int i) {
5446     return cast(HWND) SendMessage(w, LVM_EDITLABEL, i, 0);
5447 }
5448 
5449 HWND ListView_GetEditControl(HWND w) {
5450     return cast(HWND) SendMessage(w, LVM_GETEDITCONTROL, 0, 0);
5451 }
5452 
5453 BOOL ListView_GetColumn(HWND w, int i, LPLVCOLUMN p) {
5454     return cast(BOOL) SendMessage(w, LVM_GETCOLUMN, i, cast(LPARAM) p);
5455 }
5456 
5457 BOOL ListView_SetColumn(HWND w, int i, const(LV_COLUMN)* p) {
5458     return cast(BOOL) SendMessage(w, LVM_SETCOLUMN, i, cast(LPARAM) p);
5459 }
5460 
5461 int ListView_InsertColumn(HWND w, int i, const(LV_COLUMN)* p) {
5462     return cast(int) SendMessage(w, LVM_INSERTCOLUMN, i, cast(LPARAM) p);
5463 }
5464 
5465 BOOL ListView_DeleteColumn(HWND w, int i) {
5466     return cast(BOOL) SendMessage(w, LVM_DELETECOLUMN, i, 0);
5467 }
5468 
5469 int ListView_GetColumnWidth(HWND w, int i) {
5470     return cast(int) SendMessage(w, LVM_GETCOLUMNWIDTH, i, 0);
5471 }
5472 
5473 BOOL ListView_SetColumnWidth(HWND w, int i, int x) {
5474     return cast(BOOL) SendMessage(w, LVM_SETCOLUMNWIDTH, i, MAKELPARAM(cast(ushort) x, 0));
5475 }
5476 
5477 HIMAGELIST ListView_CreateDragImage(HWND w, int i, LPPOINT p) {
5478     return cast(HIMAGELIST) SendMessage(w, LVM_CREATEDRAGIMAGE, i,
5479         cast(LPARAM) p);
5480 }
5481 
5482 BOOL ListView_GetViewRect(HWND w, RECT* p) {
5483     return cast(BOOL) SendMessage(w, LVM_GETVIEWRECT, 0, cast(LPARAM) p);
5484 }
5485 
5486 COLORREF ListView_GetTextColor(HWND w) {
5487     return cast(COLORREF) SendMessage(w, LVM_GETTEXTCOLOR, 0, 0);
5488 }
5489 
5490 BOOL ListView_SetTextColor(HWND w, COLORREF c) {
5491     return cast(BOOL) SendMessage(w, LVM_SETTEXTCOLOR, 0, cast(LPARAM) c);
5492 }
5493 
5494 COLORREF ListView_GetTextBkColor(HWND w) {
5495     return cast(COLORREF) SendMessage(w, LVM_GETTEXTBKCOLOR, 0, 0);
5496 }
5497 
5498 BOOL ListView_SetTextBkColor(HWND w, COLORREF c) {
5499     return cast(BOOL) SendMessage(w, LVM_SETTEXTBKCOLOR, 0, cast(LPARAM) c);
5500 }
5501 
5502 int ListView_GetTopIndex(HWND w) {
5503     return cast(int) SendMessage(w, LVM_GETTOPINDEX, 0, 0);
5504 }
5505 
5506 int ListView_GetCountPerPage(HWND w) {
5507     return cast(int) SendMessage(w, LVM_GETCOUNTPERPAGE, 0, 0);
5508 }
5509 
5510 BOOL ListView_GetOrigin(HWND w, LPPOINT p) {
5511     return cast(BOOL) SendMessage(w, LVM_GETORIGIN, 0, cast(LPARAM) p);
5512 }
5513 
5514 BOOL ListView_Update(HWND w, WPARAM i) {
5515     return cast(BOOL) SendMessage(w, LVM_UPDATE, i, 0);
5516 }
5517 
5518 void ListView_SetItemState(HWND w, int i, UINT d, UINT m) {
5519     LV_ITEM _lvi;
5520     _lvi.stateMask = m;
5521     _lvi.state = d;
5522     SendMessage(w, LVM_SETITEMSTATE, i, cast(LPARAM)&_lvi);
5523 }
5524 
5525 UINT ListView_GetItemState(HWND w, int i, UINT m) {
5526     return cast(UINT) SendMessage(w, LVM_GETITEMSTATE, i, m);
5527 }
5528 
5529 void ListView_GetItemText(HWND w, int i, int iS, LPTSTR s, int n) {
5530     LV_ITEM _lvi;
5531     _lvi.iSubItem = iS;
5532     _lvi.cchTextMax = n;
5533     _lvi.pszText = s;
5534     SendMessage(w, LVM_GETITEMTEXT, i, cast(LPARAM)&_lvi);
5535 }
5536 
5537 void ListView_SetItemText(HWND w, int i, int iS, LPTSTR s) {
5538     LV_ITEM _lvi;
5539     _lvi.iSubItem = iS;
5540     _lvi.pszText = s;
5541     SendMessage(w, LVM_SETITEMTEXT, i, cast(LPARAM)&_lvi);
5542 }
5543 
5544 void ListView_SetItemCount(HWND w, int n) {
5545     SendMessage(w, LVM_SETITEMCOUNT, n, 0);
5546 }
5547 
5548 BOOL ListView_SortItems(HWND w, PFNLVCOMPARE f, LPARAM l) {
5549     return cast(BOOL) SendMessage(w, LVM_SORTITEMS, l, cast(LPARAM) f);
5550 }
5551 
5552 void ListView_SetItemPosition32(HWND w, int i, int x, int y) {
5553     POINT p;
5554     p.x = x;
5555     p.y = y;
5556     SendMessage(w, LVM_SETITEMPOSITION32, i, cast(LPARAM)&p);
5557 }
5558 
5559 UINT ListView_GetSelectedCount(HWND w) {
5560     return cast(UINT) SendMessage(w, LVM_GETSELECTEDCOUNT, 0, 0);
5561 }
5562 
5563 UINT ListView_GetCheckState(HWND w, UINT i) {
5564     return ((cast(UINT) SendMessage(w, LVM_GETITEMSTATE, i, LVIS_STATEIMAGEMASK)) >> 12) - 1;
5565 }
5566 
5567 void ListView_SetCheckState(HWND w, UINT i, BOOL f) {
5568     ListView_SetItemState(w, i, INDEXTOSTATEIMAGEMASK(f ? 2 : 1),
5569         LVIS_STATEIMAGEMASK);
5570 }
5571 
5572 BOOL ListView_GetISearchString(HWND w, LPSTR lpsz) {
5573     return cast(BOOL) SendMessage(w, LVM_GETISEARCHSTRING, 0,
5574         cast(LPARAM) lpsz);
5575 }
5576 
5577 void ListView_CancelEditLabel(HWND w) {
5578     SendMessage(w, LVM_CANCELEDITLABEL, 0, 0);
5579 }
5580 
5581 int ListView_EnableGroupView(HWND w, BOOL i) {
5582     return cast(int) SendMessage(w, LVM_ENABLEGROUPVIEW, i, 0);
5583 }
5584 
5585 //static if (_WIN32_WINNT >= 0x500 || _WIN32_IE >= 0x500) {
5586 BOOL ListView_SortItemsEx(HWND w, PFNLVCOMPARE c, LPARAM p) {
5587     return cast(BOOL) SendMessage(w, LVM_SORTITEMSEX, cast(WPARAM) p, cast(LPARAM) c);
5588 }
5589 //}
5590 
5591 static if (_WIN32_WINNT >= 0x501) {
5592     int ListView_GetGroupInfo(HWND w, int i, PLVGROUP p) {
5593         return cast(int) SendMessage(w, LVM_GETGROUPINFO, i, cast(LPARAM) p);
5594     }
5595 
5596     void ListView_GetGroupMetrics(HWND w, PLVGROUPMETRICS p) {
5597         SendMessage(w, LVM_GETGROUPMETRICS, 0, cast(LPARAM) p);
5598     }
5599 
5600     BOOL ListView_GetInsertMark(HWND w, PLVINSERTMARK p) {
5601         return cast(BOOL) SendMessage(w, LVM_GETINSERTMARK, 0, cast(LPARAM) p);
5602     }
5603 
5604     COLORREF ListView_GetInsertMarkColor(HWND w) {
5605         return cast(COLORREF) SendMessage(w, LVM_GETINSERTMARKCOLOR, 0, 0);
5606     }
5607 
5608     int ListView_GetInsertMarkRect(HWND w, LPRECT p) {
5609         return cast(int) SendMessage(w, LVM_GETINSERTMARKRECT, 0, cast(LPARAM) p);
5610     }
5611 
5612     COLORREF ListView_GetOutlineColor(HWND w) {
5613         return cast(COLORREF) SendMessage(w, LVM_GETOUTLINECOLOR, 0, 0);
5614     }
5615 
5616     UINT ListView_GetSelectedColumn(HWND w) {
5617         return cast(UINT) SendMessage(w, LVM_GETSELECTEDCOLUMN, 0, 0);
5618     }
5619 
5620     void ListView_GetTileInfo(HWND w, PLVTILEINFO p) {
5621         SendMessage(w, LVM_GETTILEINFO, 0, cast(LPARAM) p);
5622     }
5623 
5624     void ListView_GetTileViewInfo(HWND w, PLVTILEVIEWINFO p) {
5625         SendMessage(w, LVM_GETTILEVIEWINFO, 0, cast(LPARAM) p);
5626     }
5627 
5628     DWORD ListView_GetView(HWND w) {
5629         return cast(DWORD) SendMessage(w, LVM_GETVIEW, 0, 0);
5630     }
5631 
5632     BOOL ListView_HasGroup(HWND w, int i) {
5633         return cast(BOOL) SendMessage(w, LVM_HASGROUP, i, 0);
5634     }
5635 
5636     int ListView_InsertGroup(HWND w, int i, PLVGROUP p) {
5637         return cast(int) SendMessage(w, LVM_INSERTGROUP, i, cast(LPARAM) p);
5638     }
5639 
5640     void ListView_InsertGroupSorted(HWND w, PLVINSERTGROUPSORTED p) {
5641         SendMessage(w, LVM_INSERTGROUPSORTED, cast(WPARAM) p, 0);
5642     }
5643 
5644     BOOL ListView_InsertMarkHitTest(HWND w, LPPOINT p, PLVINSERTMARK t) {
5645         return cast(BOOL) SendMessage(w, LVM_INSERTMARKHITTEST, cast(WPARAM) p, cast(LPARAM) t);
5646     }
5647 
5648     BOOL ListView_IsGroupViewEnabled(HWND w) {
5649         return cast(BOOL) SendMessage(w, LVM_ISGROUPVIEWENABLED, 0, 0);
5650     }
5651 
5652     UINT ListView_MapIDToIndex(HWND w, UINT i) {
5653         return cast(UINT) SendMessage(w, LVM_MAPIDTOINDEX, i, 0);
5654     }
5655 
5656     /*  ??? MSDN documents this as "Not implemented", except in relation to
5657      *  Windows CE/Mobile.
5658      */
5659     void ListView_MoveGroup(HWND w, int i, int t) {
5660         SendMessage(w, LVM_MOVEGROUP, i, t);
5661     }
5662 
5663     void ListView_RemoveAllGroups(HWND w) {
5664         SendMessage(w, LVM_REMOVEALLGROUPS, 0, 0);
5665     }
5666 
5667     int ListView_RemoveGroup(HWND w, int i) {
5668         return cast(int) SendMessage(w, LVM_REMOVEGROUP, i, 0);
5669     }
5670 
5671     int ListView_SetGroupInfo(HWND w, int i, PLVGROUP p) {
5672         return cast(int) SendMessage(w, LVM_SETGROUPINFO, i, cast(LPARAM) p);
5673     }
5674 
5675     void ListView_SetGroupMetrics(HWND w, PLVGROUPMETRICS p) {
5676         SendMessage(w, LVM_SETGROUPMETRICS, 0, cast(LPARAM) p);
5677     }
5678 
5679     BOOL ListView_SetInfoTip(HWND w, PLVSETINFOTIP p) {
5680         return cast(BOOL) SendMessage(w, LVM_SETINFOTIP, 0, cast(LPARAM) p);
5681     }
5682 
5683     BOOL ListView_SetInsertMark(HWND w, PLVINSERTMARK p) {
5684         return cast(BOOL) SendMessage(w, LVM_SETINSERTMARK, 0, cast(LPARAM) p);
5685     }
5686 
5687     COLORREF ListView_SetInsertMarkColor(HWND w, COLORREF c) {
5688         return cast(COLORREF) SendMessage(w, LVM_SETINSERTMARKCOLOR, 0, c);
5689     }
5690 
5691     COLORREF ListView_SetOutlineColor(HWND w, COLORREF c) {
5692         return cast(COLORREF) SendMessage(w, LVM_SETOUTLINECOLOR, 0, c);
5693     }
5694 
5695     void ListView_SetSelectedColumn(HWND w, int i) {
5696         SendMessage(w, LVM_SETSELECTEDCOLUMN, i, 0);
5697     }
5698 
5699     BOOL ListView_SetTileInfo(HWND w, PLVTILEINFO p) {
5700         return cast(BOOL) SendMessage(w, LVM_SETTILEINFO, 0, cast(LPARAM) p);
5701     }
5702 
5703     BOOL ListView_SetTileViewInfo(HWND w, PLVTILEVIEWINFO p) {
5704         return cast(BOOL) SendMessage(w, LVM_SETTILEVIEWINFO, 0, cast(LPARAM) p);
5705     }
5706 
5707     int ListView_SetView(HWND w, DWORD i) {
5708         return cast(int) SendMessage(w, LVM_SETVIEW, i, 0);
5709     }
5710 
5711     int ListView_SortGroups(HWND w, PFNLVGROUPCOMPARE c, LPVOID p) {
5712         return cast(int) SendMessage(w, LVM_SORTGROUPS, cast(WPARAM) c, cast(LPARAM) p);
5713     }
5714 }
5715 
5716 static if (_WIN32_WINNT >= 0x501) {
5717     enum {
5718         CBM_FIRST = 0x1700,
5719         CB_SETMINVISIBLE = CBM_FIRST + 1,
5720         CB_GETMINVISIBLE = CBM_FIRST + 2,
5721         CB_SETCUEBANNER = CBM_FIRST + 3,
5722         CB_GETCUEBANNER = CBM_FIRST + 4,
5723     }
5724 
5725     BOOL ComboBox_SetMinVisible(HWND w, INT i) {
5726         return cast(BOOL) SendMessage(w, CB_SETMINVISIBLE, cast(WPARAM) i, 0);
5727     }
5728 
5729     int ComboBox_GetMinVisible(HWND w) {
5730         return cast(int) SendMessage(w, CB_GETMINVISIBLE, 0, 0);
5731     }
5732 }
5733 
5734 extern (Windows) BOOL MakeDragList(HWND);
5735 extern (Windows) void MenuHelp(UINT, WPARAM, LPARAM, HMENU, HINSTANCE, HWND,
5736     PUINT);
5737 
5738 COLORREF MonthCal_GetColor(HWND hwnd, INT icolor) {
5739     return cast(COLORREF) SendMessage(hwnd, MCM_GETCOLOR,
5740         cast(WPARAM) icolor, 0);
5741 }
5742 
5743 BOOL MonthCal_GetCurSel(HWND hwnd, LPSYSTEMTIME lpsystime) {
5744     return cast(BOOL) SendMessage(hwnd, MCM_GETCURSEL, 0,
5745         cast(LPARAM) lpsystime);
5746 }
5747 
5748 DWORD MonthCal_GetFirstDayOfWeek(HWND hwnd) {
5749     return cast(DWORD) SendMessage(hwnd, MCM_GETFIRSTDAYOFWEEK, 0, 0);
5750 }
5751 
5752 DWORD MonthCal_GetMaxSelCount(HWND hwnd) {
5753     return cast(DWORD) SendMessage(hwnd, MCM_GETMAXSELCOUNT, 0, 0);
5754 }
5755 
5756 DWORD MonthCal_GetMaxTodayWidth(HWND hwnd) {
5757     return cast(DWORD) SendMessage(hwnd, MCM_GETMAXTODAYWIDTH, 0, 0);
5758 }
5759 
5760 BOOL MonthCal_GetMinReqRect(HWND hwnd, LPRECT lpRectInfo) {
5761     return cast(BOOL) SendMessage(hwnd, MCM_GETMINREQRECT, 0,
5762         cast(LPARAM) lpRectInfo);
5763 }
5764 
5765 INT MonthCal_GetMonthDelta(HWND hwnd) {
5766     return cast(INT) SendMessage(hwnd, MCM_GETMONTHDELTA, 0, 0);
5767 }
5768 
5769 INT MonthCal_GetMonthRange(HWND hwnd, DWORD flag, LPSYSTEMTIME systimearray) {
5770     return cast(INT) SendMessage(hwnd, MCM_GETMONTHRANGE, cast(WPARAM) flag,
5771         cast(LPARAM) systimearray);
5772 }
5773 
5774 DWORD MonthCal_GetRange(HWND hwnd, LPSYSTEMTIME systimearray) {
5775     return cast(DWORD) SendMessage(hwnd, MCM_GETRANGE, 0,
5776         cast(LPARAM) systimearray);
5777 }
5778 
5779 BOOL MonthCal_GetSelRange(HWND hwnd, LPSYSTEMTIME systimearray) {
5780     return cast(BOOL) SendMessage(hwnd, MCM_GETSELRANGE, 0,
5781         cast(LPARAM) systimearray);
5782 }
5783 
5784 BOOL MonthCal_GetToday(HWND hwnd, LPSYSTEMTIME systime) {
5785     return cast(BOOL) SendMessage(hwnd, MCM_GETTODAY, 0,
5786         cast(LPARAM) systime);
5787 }
5788 
5789 BOOL MonthCal_GetUnicodeFormat(HWND hwnd) {
5790     return cast(BOOL) SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0);
5791 }
5792 
5793 DWORD MonthCal_HitTest(HWND hwnd, PMCHITTESTINFO pmchittest) {
5794     return cast(DWORD) SendMessage(hwnd, MCM_HITTEST, 0,
5795         cast(LPARAM) pmchittest);
5796 }
5797 
5798 COLORREF MonthCal_SetColor(HWND hwnd, INT icolor, COLORREF clr) {
5799     return cast(COLORREF) SendMessage(hwnd, MCM_SETCOLOR, cast(WPARAM) icolor,
5800         cast(LPARAM) clr);
5801 }
5802 
5803 BOOL MonthCal_SetCurSel(HWND hwnd, LPSYSTEMTIME lpsystime) {
5804     return cast(BOOL) SendMessage(hwnd, MCM_SETCURSEL, 0,
5805         cast(LPARAM) lpsystime);
5806 }
5807 
5808 BOOL MonthCal_SetDayState(HWND hwnd, INT imonths, LPMONTHDAYSTATE lpdatestatearray) {
5809     return cast(BOOL) SendMessage(hwnd, MCM_SETDAYSTATE, cast(WPARAM) imonths,
5810         cast(LPARAM) lpdatestatearray);
5811 }
5812 
5813 DWORD MonthCal_SetFirstDayOfWeek(HWND hwnd, INT iday) {
5814     return cast(DWORD) SendMessage(hwnd, MCM_SETFIRSTDAYOFWEEK, 0,
5815         cast(LPARAM) iday);
5816 }
5817 
5818 BOOL MonthCal_SetMaxSelCount(HWND hwnd, UINT imax) {
5819     return cast(BOOL) SendMessage(hwnd, MCM_SETMAXSELCOUNT,
5820         cast(WPARAM) imax, 0);
5821 }
5822 
5823 INT MonthCal_SetMonthDelta(HWND hwnd, INT idelta) {
5824     return cast(INT) SendMessage(hwnd, MCM_SETMONTHDELTA, cast(WPARAM) idelta, 0);
5825 }
5826 
5827 BOOL MonthCal_SetSelRange(HWND hwnd, LPSYSTEMTIME systimearray) {
5828     return cast(BOOL) SendMessage(hwnd, MCM_SETSELRANGE, 0,
5829         cast(LPARAM) systimearray);
5830 }
5831 
5832 void MonthCal_SetToday(HWND hwnd, LPSYSTEMTIME systime) {
5833     SendMessage(hwnd, MCM_SETTODAY, 0, cast(LPARAM) systime);
5834 }
5835 
5836 BOOL MonthCal_SetUnicodeFormat(HWND hwnd, BOOL unicode) {
5837     return cast(BOOL) SendMessage(hwnd, MCM_SETUNICODEFORMAT,
5838         cast(WPARAM) unicode, 0);
5839 }
5840 
5841 BOOL MonthCal_SetRange(HWND w, DWORD f, LPSYSTEMTIME st) {
5842     return cast(BOOL) SendMessage(w, MCM_SETRANGE, cast(WPARAM) f,
5843         cast(LPARAM) st);
5844 }
5845 
5846 extern (Windows) nothrow @nogc BOOL ShowHideMenuCtl(HWND, UINT_PTR, PINT);
5847 
5848 BOOL TabCtrl_GetItem(HWND w, int i, LPTCITEM p) {
5849     return cast(BOOL) SendMessage(w, TCM_GETITEM, i, cast(LPARAM) p);
5850 }
5851 
5852 BOOL TabCtrl_SetItem(HWND w, int i, LPTCITEM p) {
5853     return cast(BOOL) SendMessage(w, TCM_SETITEM, i, cast(LPARAM) p);
5854 }
5855 
5856 int TabCtrl_InsertItem(HWND w, int i, const(TC_ITEM)* p) {
5857     return cast(int) SendMessage(w, TCM_INSERTITEM, i, cast(LPARAM) p);
5858 }
5859 
5860 BOOL TabCtrl_DeleteItem(HWND w, int i) {
5861     return cast(BOOL) SendMessage(w, TCM_DELETEITEM, i, 0);
5862 }
5863 
5864 BOOL TabCtrl_DeleteAllItems(HWND w) {
5865     return cast(BOOL) SendMessage(w, TCM_DELETEALLITEMS, 0, 0);
5866 }
5867 
5868 BOOL TabCtrl_GetItemRect(HWND w, int i, LPRECT p) {
5869     return cast(BOOL) SendMessage(w, TCM_GETITEMRECT, i, cast(LPARAM) p);
5870 }
5871 
5872 int TabCtrl_GetCurSel(HWND w) {
5873     return cast(int) SendMessage(w, TCM_GETCURSEL, 0, 0);
5874 }
5875 
5876 int TabCtrl_SetCurSel(HWND w, int i) {
5877     return cast(int) SendMessage(w, TCM_SETCURSEL, i, 0);
5878 }
5879 
5880 int TabCtrl_HitTest(HWND w, LPTCHITTESTINFO p) {
5881     return cast(int) SendMessage(w, TCM_HITTEST, 0, cast(LPARAM) p);
5882 }
5883 
5884 BOOL TabCtrl_SetItemExtra(HWND w, int c) {
5885     return cast(BOOL) SendMessage(w, TCM_SETITEMEXTRA, c, 0);
5886 }
5887 
5888 int TabCtrl_AdjustRect(HWND w, BOOL b, LPRECT p) {
5889     return cast(int) SendMessage(w, TCM_ADJUSTRECT, b, cast(LPARAM) p);
5890 }
5891 
5892 DWORD TabCtrl_SetItemSize(HWND w, int x, int y) {
5893     return cast(DWORD) SendMessage(w, TCM_SETITEMSIZE, 0, MAKELPARAM(cast(ushort) x, cast(ushort) y));
5894 }
5895 
5896 void TabCtrl_RemoveImage(HWND w, int i) {
5897     SendMessage(w, TCM_REMOVEIMAGE, i, 0);
5898 }
5899 
5900 void TabCtrl_SetPadding(HWND w, int x, int y) {
5901     SendMessage(w, TCM_SETPADDING, 0, MAKELPARAM(cast(ushort) x, cast(ushort) y));
5902 }
5903 
5904 int TabCtrl_GetRowCount(HWND w) {
5905     return cast(int) SendMessage(w, TCM_GETROWCOUNT, 0, 0);
5906 }
5907 
5908 HWND TabCtrl_GetToolTips(HWND w) {
5909     return cast(HWND) SendMessage(w, TCM_GETTOOLTIPS, 0, 0);
5910 }
5911 
5912 void TabCtrl_SetToolTips(HWND w, HWND t) {
5913     SendMessage(w, TCM_SETTOOLTIPS, cast(WPARAM) t, 0);
5914 }
5915 
5916 int TabCtrl_GetCurFocus(HWND w) {
5917     return cast(int) SendMessage(w, TCM_GETCURFOCUS, 0, 0);
5918 }
5919 
5920 void TabCtrl_SetCurFocus(HWND w, int i) {
5921     SendMessage(w, TCM_SETCURFOCUS, i, 0);
5922 }
5923 
5924 HIMAGELIST TabCtrl_GetImageList(HWND w) {
5925     return cast(HIMAGELIST) SendMessage(w, TCM_GETIMAGELIST, 0, 0);
5926 }
5927 
5928 HIMAGELIST TabCtrl_SetImageList(HWND w, HIMAGELIST h) {
5929     return cast(HIMAGELIST) SendMessage(w, TCM_SETIMAGELIST, 0,
5930         cast(LPARAM) h);
5931 }
5932 
5933 int TabCtrl_GetItemCount(HWND w) {
5934     return cast(int) SendMessage(w, TCM_GETITEMCOUNT, 0, 0);
5935 }
5936 
5937 extern (Windows) BOOL _TrackMouseEvent(LPTRACKMOUSEEVENT);
5938 
5939 HTREEITEM TreeView_InsertItem(HWND w, LPTVINSERTSTRUCT i) {
5940     return cast(HTREEITEM) SendMessage(w, TVM_INSERTITEM, 0, cast(LPARAM) i);
5941 }
5942 
5943 BOOL TreeView_DeleteItem(HWND w, HTREEITEM i) {
5944     return cast(BOOL) SendMessage(w, TVM_DELETEITEM, 0, cast(LPARAM) i);
5945 }
5946 
5947 BOOL TreeView_DeleteAllItems(HWND w) {
5948     return cast(BOOL) SendMessage(w, TVM_DELETEITEM, 0, cast(LPARAM) TVI_ROOT);
5949 }
5950 
5951 BOOL TreeView_Expand(HWND w, HTREEITEM i, UINT c) {
5952     return cast(BOOL) SendMessage(w, TVM_EXPAND, c, cast(LPARAM) i);
5953 }
5954 
5955 BOOL TreeView_GetItemRect(HWND w, HTREEITEM i, LPRECT p, BOOL c) {
5956     *cast(HTREEITEM*) p = i;
5957     return cast(BOOL) SendMessage(w, TVM_GETITEMRECT, c, cast(LPARAM) p);
5958 }
5959 
5960 UINT TreeView_GetCount(HWND w) {
5961     return cast(UINT) SendMessage(w, TVM_GETCOUNT, 0, 0);
5962 }
5963 
5964 UINT TreeView_GetIndent(HWND w) {
5965     return cast(UINT) SendMessage(w, TVM_GETINDENT, 0, 0);
5966 }
5967 
5968 BOOL TreeView_SetIndent(HWND w, INT i) {
5969     return cast(BOOL) SendMessage(w, TVM_SETINDENT, i, 0);
5970 }
5971 
5972 HIMAGELIST TreeView_GetImageList(HWND w, INT i) {
5973     return cast(HIMAGELIST) SendMessage(w, TVM_GETIMAGELIST, i, 0);
5974 }
5975 
5976 HIMAGELIST TreeView_SetImageList(HWND w, HIMAGELIST h, INT i) {
5977     return cast(HIMAGELIST) SendMessage(w, TVM_SETIMAGELIST, i,
5978         cast(LPARAM) h);
5979 }
5980 
5981 HTREEITEM TreeView_GetNextItem(HWND w, HTREEITEM i, UINT c) {
5982     return cast(HTREEITEM) SendMessage(w, TVM_GETNEXTITEM, c, cast(LPARAM) i);
5983 }
5984 
5985 HTREEITEM TreeView_GetChild(HWND w, HTREEITEM i) {
5986     return TreeView_GetNextItem(w, i, TVGN_CHILD);
5987 }
5988 
5989 HTREEITEM TreeView_GetNextSibling(HWND w, HTREEITEM i) {
5990     return TreeView_GetNextItem(w, i, TVGN_NEXT);
5991 }
5992 
5993 HTREEITEM TreeView_GetPrevSibling(HWND w, HTREEITEM i) {
5994     return TreeView_GetNextItem(w, i, TVGN_PREVIOUS);
5995 }
5996 
5997 HTREEITEM TreeView_GetParent(HWND w, HTREEITEM i) {
5998     return TreeView_GetNextItem(w, i, TVGN_PARENT);
5999 }
6000 
6001 HTREEITEM TreeView_GetFirstVisible(HWND w) {
6002     return TreeView_GetNextItem(w, null, TVGN_FIRSTVISIBLE);
6003 }
6004 
6005 HTREEITEM TreeView_GetNextVisible(HWND w, HTREEITEM i) {
6006     return TreeView_GetNextItem(w, i, TVGN_NEXTVISIBLE);
6007 }
6008 
6009 HTREEITEM TreeView_GetPrevVisible(HWND w, HTREEITEM i) {
6010     return TreeView_GetNextItem(w, i, TVGN_PREVIOUSVISIBLE);
6011 }
6012 
6013 HTREEITEM TreeView_GetSelection(HWND w) {
6014     return TreeView_GetNextItem(w, null, TVGN_CARET);
6015 }
6016 
6017 HTREEITEM TreeView_GetDropHilight(HTREEITEM w) {
6018     return TreeView_GetNextItem(w, null, TVGN_DROPHILITE);
6019 }
6020 
6021 HTREEITEM TreeView_GetRoot(HWND w) {
6022     return TreeView_GetNextItem(w, null, TVGN_ROOT);
6023 }
6024 
6025 BOOL TreeView_Select(HWND w, HTREEITEM i, UINT c) {
6026     return cast(BOOL) SendMessage(w, TVM_SELECTITEM, c, cast(LPARAM) i);
6027 }
6028 
6029 BOOL TreeView_SelectItem(HWND w, HTREEITEM i) {
6030     return TreeView_Select(w, i, TVGN_CARET);
6031 }
6032 
6033 BOOL TreeView_SelectDropTarget(HWND w, HTREEITEM i) {
6034     return TreeView_Select(w, i, TVGN_DROPHILITE);
6035 }
6036 
6037 BOOL TreeView_SelectSetFirstVisible(HWND w, HTREEITEM i) {
6038     return TreeView_Select(w, i, TVGN_FIRSTVISIBLE);
6039 }
6040 
6041 BOOL TreeView_GetItem(HWND w, LPTVITEM i) {
6042     return cast(BOOL) SendMessage(w, TVM_GETITEM, 0, cast(LPARAM) i);
6043 }
6044 
6045 BOOL TreeView_SetItem(HWND w, const(TV_ITEM)* i) {
6046     return cast(BOOL) SendMessage(w, TVM_SETITEM, 0, cast(LPARAM) i);
6047 }
6048 
6049 HWND TreeView_EditLabel(HWND w, HTREEITEM i) {
6050     return cast(HWND) SendMessage(w, TVM_EDITLABEL, 0, cast(LPARAM) i);
6051 }
6052 
6053 HWND TreeView_GetEditControl(HWND w) {
6054     return cast(HWND) SendMessage(w, TVM_GETEDITCONTROL, 0, 0);
6055 }
6056 
6057 UINT TreeView_GetVisibleCount(HWND w) {
6058     return cast(UINT) SendMessage(w, TVM_GETVISIBLECOUNT, 0, 0);
6059 }
6060 
6061 HTREEITEM TreeView_HitTest(HWND w, LPTVHITTESTINFO p) {
6062     return cast(HTREEITEM) SendMessage(w, TVM_HITTEST, 0, cast(LPARAM) p);
6063 }
6064 
6065 HIMAGELIST TreeView_CreateDragImage(HWND w, HTREEITEM i) {
6066     return cast(HIMAGELIST) SendMessage(w, TVM_CREATEDRAGIMAGE, 0,
6067         cast(LPARAM) i);
6068 }
6069 
6070 BOOL TreeView_SortChildren(HWND w, HTREEITEM i, BOOL r) {
6071     return cast(BOOL) SendMessage(w, TVM_SORTCHILDREN, r, cast(LPARAM) i);
6072 }
6073 
6074 BOOL TreeView_EnsureVisible(HWND w, HTREEITEM i) {
6075     return cast(BOOL) SendMessage(w, TVM_ENSUREVISIBLE, 0, cast(LPARAM) i);
6076 }
6077 
6078 BOOL TreeView_SortChildrenCB(HWND w, LPTVSORTCB s, BOOL r) {
6079     return cast(BOOL) SendMessage(w, TVM_SORTCHILDRENCB, r, cast(LPARAM) s);
6080 }
6081 
6082 BOOL TreeView_EndEditLabelNow(HWND w, BOOL f) {
6083     return cast(BOOL) SendMessage(w, TVM_ENDEDITLABELNOW, f, 0);
6084 }
6085 
6086 BOOL TreeView_GetISearchString(HWND w, LPTSTR s) {
6087     return cast(BOOL) SendMessage(w, TVM_GETISEARCHSTRING, 0, cast(LPARAM) s);
6088 }
6089 
6090 static if (_WIN32_IE >= 0x300) {
6091     DWORD ListView_ApproximateViewRect(HWND w, int iw, int ih, int i) {
6092         return cast(DWORD) SendMessage(w, LVM_APPROXIMATEVIEWRECT, i,
6093             MAKELPARAM(cast(ushort) iw, cast(ushort) ih));
6094     }
6095 
6096     DWORD ListView_SetExtendedListViewStyle(HWND w, DWORD s) {
6097         return cast(DWORD) SendMessage(w, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, s);
6098     }
6099 
6100     DWORD ListView_GetExtendedListViewStyle(HWND w) {
6101         return cast(DWORD) SendMessage(w, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
6102     }
6103 
6104     BOOL ListView_SetColumnOrderArray(HWND w, int i, int* a) {
6105         return cast(BOOL) SendMessage(w, LVM_SETCOLUMNORDERARRAY,
6106             cast(WPARAM) i, cast(LPARAM) a);
6107     }
6108 
6109     BOOL ListView_GetColumnOrderArray(HWND w, int i, int* a) {
6110         return cast(BOOL) SendMessage(w, LVM_GETCOLUMNORDERARRAY,
6111             cast(WPARAM) i, cast(LPARAM) a);
6112     }
6113 
6114     HWND ListView_GetHeader(HWND w) {
6115         return cast(HWND) SendMessage(w, LVM_GETHEADER, 0, 0);
6116     }
6117 
6118     HCURSOR ListView_GetHotCursor(HWND w) {
6119         return cast(HCURSOR) SendMessage(w, LVM_GETHOTCURSOR, 0, 0);
6120     }
6121 
6122     INT ListView_GetHotItem(HWND w) {
6123         return cast(INT) SendMessage(w, LVM_GETHOTITEM, 0, 0);
6124     }
6125 
6126     BOOL ListView_GetSubItemRect(HWND w, int i, int isi, int c, LPRECT p) {
6127         if (p) {
6128             p.left = c;
6129             p.top = isi;
6130         }
6131         return cast(BOOL) SendMessage(w, LVM_GETSUBITEMRECT, i, cast(LPARAM) p);
6132     }
6133 
6134     HCURSOR ListView_SetHotCursor(HWND w, HCURSOR c) {
6135         return cast(HCURSOR) SendMessage(w, LVM_SETHOTCURSOR, 0,
6136             cast(LPARAM) c);
6137     }
6138 
6139     INT ListView_SetHotItem(HWND w, INT i) {
6140         return cast(INT) SendMessage(w, LVM_SETHOTITEM, cast(WPARAM) i, 0);
6141     }
6142 
6143     DWORD ListView_SetIconSpacing(HWND w, int x, int y) {
6144         return cast(DWORD) SendMessage(w, LVM_SETICONSPACING, 0,
6145             MAKELONG(cast(ushort) x, cast(ushort) y));
6146     }
6147 
6148     INT ListView_SubItemHitTest(HWND w, LPLVHITTESTINFO p) {
6149         return cast(INT) SendMessage(w, LVM_SUBITEMHITTEST, 0, cast(LPARAM) p);
6150     }
6151 
6152     BOOL ListView_SetItemCountEx(HWND w, int i, DWORD f) {
6153         return cast(BOOL) SendMessage(w, LVM_SETITEMCOUNT, i, cast(LPARAM) f);
6154     }
6155 
6156     extern (Windows) nothrow @nogc {
6157         WINBOOL ImageList_SetImageCount(HIMAGELIST, UINT);
6158         WINBOOL ImageList_Copy(HIMAGELIST, int, HIMAGELIST, int, UINT);
6159         WINBOOL ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*);
6160     }
6161 
6162     int TabCtrl_SetMinTabWidth(HWND hwnd, int x) {
6163         return cast(int) SendMessage(hwnd, TCM_SETMINTABWIDTH, 0, x);
6164     }
6165 
6166     VOID TabCtrl_DeselectAll(HWND hwnd, UINT fExcludeFocus) {
6167         SendMessage(hwnd, TCM_DESELECTALL, fExcludeFocus, 0);
6168     }
6169 
6170     HWND TreeView_GetToolTips(HWND w) {
6171         return cast(HWND) SendMessage(w, TVM_GETTOOLTIPS, 0, 0);
6172     }
6173 
6174     HWND TreeView_SetToolTips(HWND w, HWND wt) {
6175         return cast(HWND) SendMessage(w, TVM_SETTOOLTIPS, cast(WPARAM) wt, 0);
6176     }
6177 }
6178 
6179 static if (_WIN32_IE >= 0x400) {
6180     BOOL ListView_GetBkImage(HWND h, LPLVBKIMAGE plvbki) {
6181         return cast(BOOL) SendMessage(h, LVM_GETBKIMAGE, 0,
6182             cast(LPARAM) plvbki);
6183     }
6184 
6185     BOOL ListView_SetBkImage(HWND h, LPLVBKIMAGE plvbki) {
6186         return cast(BOOL) SendMessage(h, LVM_SETBKIMAGE, 0,
6187             cast(LPARAM) plvbki);
6188     }
6189 
6190     DWORD ListView_SetExtendedListViewStyleEx(HWND w, DWORD m, DWORD s) {
6191         return cast(DWORD) SendMessage(w, LVM_SETEXTENDEDLISTVIEWSTYLE, m, s);
6192     }
6193 
6194     VOID ListView_SetWorkAreas(HWND w, INT n, LPRECT r) {
6195         SendMessage(w, LVM_SETWORKAREAS, cast(WPARAM) n, cast(LPARAM) r);
6196     }
6197 
6198     VOID ListView_GetWorkAreas(HWND w, INT n, LPRECT r) {
6199         SendMessage(w, LVM_GETWORKAREAS, cast(WPARAM) n, cast(LPARAM) r);
6200     }
6201 
6202     BOOL ListView_GetNumberOfWorkAreas(HWND w, LPUINT n) {
6203         return cast(BOOL) SendMessage(w, LVM_GETNUMBEROFWORKAREAS, 0,
6204             cast(LPARAM) n);
6205     }
6206 
6207     DWORD ListView_SetHoverTime(HWND w, DWORD t) {
6208         return cast(DWORD) SendMessage(w, LVM_SETHOVERTIME, 0,
6209             cast(LPARAM) t);
6210     }
6211 
6212     DWORD ListView_GetHoverTime(HWND w) {
6213         return cast(DWORD) SendMessage(w, LVM_GETHOVERTIME, 0, 0);
6214     }
6215 
6216     INT ListView_GetSelectionMark(HWND w) {
6217         return cast(INT) SendMessage(w, LVM_GETSELECTIONMARK, 0, 0);
6218     }
6219 
6220     INT ListView_SetSelectionMark(HWND w, INT i) {
6221         return cast(INT) SendMessage(w, LVM_SETSELECTIONMARK, 0, cast(LPARAM) i);
6222     }
6223 
6224     HWND ListView_SetToolTips(HWND w, HWND n) {
6225         return cast(HWND) SendMessage(w, LVM_SETTOOLTIPS, cast(WPARAM) n, 0);
6226     }
6227 
6228     HWND ListView_GetToolTips(HWND w) {
6229         return cast(HWND) SendMessage(w, LVM_GETTOOLTIPS, 0, 0);
6230     }
6231 
6232     BOOL ListView_SetUnicodeFormat(HWND w, BOOL f) {
6233         return cast(BOOL) SendMessage(w, LVM_SETUNICODEFORMAT,
6234             cast(WPARAM) f, 0);
6235     }
6236 
6237     BOOL ListView_GetUnicodeFormat(HWND w) {
6238         return cast(BOOL) SendMessage(w, LVM_GETUNICODEFORMAT, 0, 0);
6239     }
6240 
6241     BOOL TabCtrl_HighlightItem(HWND hwnd, INT i, WORD fHighlight) {
6242         return cast(BOOL) SendMessage(hwnd, TCM_HIGHLIGHTITEM,
6243             cast(WPARAM) i, cast(LPARAM) MAKELONG(fHighlight, 0));
6244     }
6245 
6246     DWORD TabCtrl_SetExtendedStyle(HWND hwnd, DWORD dw) {
6247         return cast(DWORD) SendMessage(hwnd, TCM_SETEXTENDEDSTYLE, 0, dw);
6248     }
6249 
6250     DWORD TabCtrl_GetExtendedStyle(HWND hwnd) {
6251         return cast(DWORD) SendMessage(hwnd, TCM_GETEXTENDEDSTYLE, 0, 0);
6252     }
6253 
6254     BOOL TabCtrl_SetUnicodeFormat(HWND hwnd, HWND fUnicode) {
6255         return cast(BOOL) SendMessage(hwnd, TCM_SETUNICODEFORMAT,
6256             cast(WPARAM) fUnicode, 0);
6257     }
6258 
6259     BOOL TabCtrl_GetUnicodeFormat(HWND hwnd) {
6260         return cast(BOOL) SendMessage(hwnd, TCM_GETUNICODEFORMAT, 0, 0);
6261     }
6262 
6263     COLORREF TreeView_GetBkColor(HWND w) {
6264         return cast(COLORREF) SendMessage(w, TVM_GETBKCOLOR, 0, 0);
6265     }
6266 
6267     COLORREF TreeView_GetInsertMarkColor(HWND w) {
6268         return cast(COLORREF) SendMessage(w, TVM_GETINSERTMARKCOLOR, 0, 0);
6269     }
6270 
6271     int TreeView_GetItemHeight(HWND w) {
6272         return cast(int) SendMessage(w, TVM_GETITEMHEIGHT, 0, 0);
6273     }
6274 
6275     UINT TreeView_GetScrollTime(HWND w) {
6276         return cast(UINT) SendMessage(w, TVM_GETSCROLLTIME, 0, 0);
6277     }
6278 
6279     COLORREF TreeView_GetTextColor(HWND w) {
6280         return cast(COLORREF) SendMessage(w, TVM_GETTEXTCOLOR, 0, 0);
6281     }
6282 
6283     COLORREF TreeView_SetBkColor(HWND w, COLORREF c) {
6284         return cast(COLORREF) SendMessage(w, TVM_SETBKCOLOR, 0,
6285             cast(LPARAM) c);
6286     }
6287 
6288     COLORREF TreeView_SetInsertMarkColor(HWND w, COLORREF c) {
6289         return cast(COLORREF) SendMessage(w, TVM_SETINSERTMARKCOLOR, 0,
6290             cast(LPARAM) c);
6291     }
6292 
6293     int TreeView_SetItemHeight(HWND w, SHORT h) {
6294         return cast(int) SendMessage(w, TVM_SETITEMHEIGHT, cast(WPARAM) h, 0);
6295     }
6296 
6297     UINT TreeView_SetScrollTime(HWND w, UINT t) {
6298         return cast(UINT) SendMessage(w, TVM_SETSCROLLTIME, cast(WPARAM) t, 0);
6299     }
6300 
6301     COLORREF TreeView_SetTextColor(HWND w, COLORREF c) {
6302         return cast(COLORREF) SendMessage(w, TVM_SETTEXTCOLOR, 0,
6303             cast(LPARAM) c);
6304     }
6305 
6306     BOOL TreeView_SetInsertMark(HWND w, HTREEITEM i, BOOL a) {
6307         return cast(BOOL) SendMessage(w, TVM_SETINSERTMARK, cast(WPARAM) a,
6308             cast(LPARAM) i);
6309     }
6310 
6311     BOOL TreeView_SetUnicodeFormat(HWND w, BOOL u) {
6312         return cast(BOOL) SendMessage(w, TVM_SETUNICODEFORMAT,
6313             cast(WPARAM) u, 0);
6314     }
6315 
6316     BOOL TreeView_GetUnicodeFormat(HWND w) {
6317         return cast(BOOL) SendMessage(w, TVM_GETUNICODEFORMAT, 0, 0);
6318     }
6319 
6320     HTREEITEM TreeView_GetLastVisible(HWND w) {
6321         return TreeView_GetNextItem(w, null, TVGN_LASTVISIBLE);
6322     }
6323 }
6324 
6325 static if (_WIN32_IE >= 0x500) {
6326     UINT TreeView_GetItemState(HWND w, HTREEITEM i, UINT m) {
6327         return cast(UINT) SendMessage(w, TVM_GETITEMSTATE, cast(WPARAM) i,
6328             cast(LPARAM) m);
6329     }
6330 
6331     BOOL TreeView_SetItemState(HWND w, HTREEITEM i, UINT d, UINT m) {
6332         TVITEM _tvi;
6333         _tvi.mask = TVIF_STATE;
6334         _tvi.hItem = i;
6335         _tvi.stateMask = m;
6336         _tvi.state = d;
6337         return cast(BOOL) SendMessage(w, TVM_SETITEM, 0, cast(LPARAM)&_tvi);
6338     }
6339 }
6340 
6341 // These are PPC only
6342 version (PPC) {
6343     extern (Windows) {
6344         HWND CommandBar_Create(HINSTANCE, HWND, int);
6345         BOOL CommandBar_Show(HWND, BOOL);
6346         int CommandBar_AddBitmap(HWND, HINSTANCE, int, int, int, int);
6347         HWND CommandBar_InsertComboBox(HWND, HINSTANCE, int, UINT, WORD, WORD);
6348         BOOL CommandBar_InsertMenubar(HWND, HINSTANCE, WORD, WORD);
6349         BOOL CommandBar_InsertMenubarEx(HWND, HINSTANCE, LPTSTR, WORD);
6350         BOOL CommandBar_DrawMenuBar(HWND, WORD);
6351         HMENU CommandBar_GetMenu(HWND, WORD);
6352         BOOL CommandBar_AddAdornments(HWND, DWORD, DWORD);
6353         int CommandBar_Height(HWND hwndCB);
6354     }
6355 
6356     // MinGW: These two are not in the DLL
6357     version (MinGW) {
6358         void CommandBar_InsertButton(HWND hwnd, int i, LPTBBUTTON lptbbutton) {
6359             SendMessage(hwnd, TB_INSERTBUTTON, i, lptbbutton);
6360         }
6361 
6362         alias DestroyWindow = CommandBar_Destroy;
6363     }
6364 }
6365 
6366 static if (_WIN32_WINNT >= 0x501) {
6367     struct EDITBALLOONTIP {
6368         DWORD cbStruct;
6369         LPCWSTR pszTitle;
6370         LPCWSTR pszText;
6371         INT ttiIcon;
6372     }
6373 
6374     alias PEDITBALLOONTIP = EDITBALLOONTIP*;
6375 
6376     enum EM_SETCUEBANNER = ECM_FIRST + 1;
6377     enum EM_GETCUEBANNER = ECM_FIRST + 2;
6378     enum EM_SHOWBALLOONTIP = ECM_FIRST + 3;
6379     enum EM_HIDEBALLOONTIP = ECM_FIRST + 4;
6380 }
6381 
6382 static if (_WIN32_WINNT >= 0x600) {
6383     enum EM_SETHILITE = ECM_FIRST + 5;
6384     enum EM_GETHILITE = ECM_FIRST + 6;
6385 }