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