[PSDK]
[reactos.git] / reactos / include / psdk / commctrl.h
index 2b51c2e..2b2bfd3 100644 (file)
@@ -6,6 +6,8 @@
 #ifndef _INC_COMMCTRL
 #define _INC_COMMCTRL
 
+#include <_mingw_unicode.h>
+
 #ifndef _WINRESRC_
 #ifndef _WIN32_IE
 #define _WIN32_IE 0x0501
@@ -336,6 +338,7 @@ extern "C" {
   WINCOMMCTRLAPI COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST himl,COLORREF clrBk);
   WINCOMMCTRLAPI COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST himl);
   WINCOMMCTRLAPI WINBOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST himl,int iImage,int iOverlay);
+  WINCOMMCTRLAPI HRESULT WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **);
 #define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon)
 
 #define ILD_NORMAL 0x0
@@ -372,11 +375,7 @@ extern "C" {
   WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE hi,LPCSTR lpbmp,int cx,int cGrow,COLORREF crMask,UINT uType,UINT uFlags);
   WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE hi,LPCWSTR lpbmp,int cx,int cGrow,COLORREF crMask,UINT uType,UINT uFlags);
 
-#ifdef UNICODE
-#define ImageList_LoadImage ImageList_LoadImageW
-#else
-#define ImageList_LoadImage ImageList_LoadImageA
-#endif
+#define ImageList_LoadImage __MINGW_NAME_AW(ImageList_LoadImage)
 
 #define ILCF_MOVE 0x0
 #define ILCF_SWAP 0x1
@@ -424,11 +423,7 @@ extern "C" {
 #define WC_HEADERA "SysHeader32"
 #define WC_HEADERW L"SysHeader32"
 
-#ifdef UNICODE
-#define WC_HEADER WC_HEADERW
-#else
-#define WC_HEADER WC_HEADERA
-#endif
+#define WC_HEADER __MINGW_NAME_AW(WC_HEADER)
 
 #define HDS_HORZ 0x0
 #define HDS_BUTTONS 0x2
@@ -449,17 +444,10 @@ extern "C" {
 
 #define HDFT_HASNOVALUE 0x8000
 
-#ifdef UNICODE
-#define HD_TEXTFILTER HD_TEXTFILTERW
-#define HDTEXTFILTER HD_TEXTFILTERW
-#define LPHD_TEXTFILTER LPHD_TEXTFILTERW
-#define LPHDTEXTFILTER LPHD_TEXTFILTERW
-#else
-#define HD_TEXTFILTER HD_TEXTFILTERA
-#define HDTEXTFILTER HD_TEXTFILTERA
-#define LPHD_TEXTFILTER LPHD_TEXTFILTERA
-#define LPHDTEXTFILTER LPHD_TEXTFILTERA
-#endif
+#define HD_TEXTFILTER __MINGW_NAME_AW(HD_TEXTFILTER)
+#define HDTEXTFILTER __MINGW_NAME_AW(HD_TEXTFILTER)
+#define LPHD_TEXTFILTER __MINGW_NAME_AW(LPHD_TEXTFILTER)
+#define LPHDTEXTFILTER __MINGW_NAME_AW(LPHD_TEXTFILTER)
 
   typedef struct _HD_TEXTFILTERA {
     LPSTR pszText;
@@ -506,15 +494,10 @@ extern "C" {
     void *pvFilter;
   } HDITEMW,*LPHDITEMW;
 
-#ifdef UNICODE
-#define HDITEM HDITEMW
-#define LPHDITEM LPHDITEMW
-#define HDITEM_V1_SIZE HDITEMW_V1_SIZE
-#else
-#define HDITEM HDITEMA
-#define LPHDITEM LPHDITEMA
-#define HDITEM_V1_SIZE HDITEMA_V1_SIZE
-#endif
+#define HDITEM __MINGW_NAME_AW(HDITEM)
+#define LPHDITEM __MINGW_NAME_AW(LPHDITEM)
+
+#define HDITEM_V1_SIZE __MINGW_NAME_AW_EXT(HDITEM,_V1_SIZE)
 
 #define HDI_WIDTH 0x1
 #define HDI_HEIGHT HDI_WIDTH
@@ -553,11 +536,7 @@ extern "C" {
 #define HDM_INSERTITEMA (HDM_FIRST+1)
 #define HDM_INSERTITEMW (HDM_FIRST+10)
 
-#ifdef UNICODE
-#define HDM_INSERTITEM HDM_INSERTITEMW
-#else
-#define HDM_INSERTITEM HDM_INSERTITEMA
-#endif
+#define HDM_INSERTITEM __MINGW_NAME_AW(HDM_INSERTITEM)
 
 #define Header_InsertItem(hwndHD,i,phdi) (int)SNDMSG((hwndHD),HDM_INSERTITEM,(WPARAM)(int)(i),(LPARAM)(const HD_ITEM *)(phdi))
 
@@ -567,22 +546,14 @@ extern "C" {
 #define HDM_GETITEMA (HDM_FIRST+3)
 #define HDM_GETITEMW (HDM_FIRST+11)
 
-#ifdef UNICODE
-#define HDM_GETITEM HDM_GETITEMW
-#else
-#define HDM_GETITEM HDM_GETITEMA
-#endif
+#define HDM_GETITEM __MINGW_NAME_AW(HDM_GETITEM)
 
 #define Header_GetItem(hwndHD,i,phdi) (WINBOOL)SNDMSG((hwndHD),HDM_GETITEM,(WPARAM)(int)(i),(LPARAM)(HD_ITEM *)(phdi))
 
 #define HDM_SETITEMA (HDM_FIRST+4)
 #define HDM_SETITEMW (HDM_FIRST+12)
 
-#ifdef UNICODE
-#define HDM_SETITEM HDM_SETITEMW
-#else
-#define HDM_SETITEM HDM_SETITEMA
-#endif
+#define HDM_SETITEM __MINGW_NAME_AW(HDM_SETITEM)
 
 #define Header_SetItem(hwndHD,i,phdi) (WINBOOL)SNDMSG((hwndHD),HDM_SETITEM,(WPARAM)(int)(i),(LPARAM)(const HD_ITEM *)(phdi))
 
@@ -686,27 +657,15 @@ extern "C" {
 #define HDN_FILTERCHANGE (HDN_FIRST-12)
 #define HDN_FILTERBTNCLICK (HDN_FIRST-13)
 
-#ifdef UNICODE
-#define HDN_ITEMCHANGING HDN_ITEMCHANGINGW
-#define HDN_ITEMCHANGED HDN_ITEMCHANGEDW
-#define HDN_ITEMCLICK HDN_ITEMCLICKW
-#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKW
-#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW
-#define HDN_BEGINTRACK HDN_BEGINTRACKW
-#define HDN_ENDTRACK HDN_ENDTRACKW
-#define HDN_TRACK HDN_TRACKW
-#define HDN_GETDISPINFO HDN_GETDISPINFOW
-#else
-#define HDN_ITEMCHANGING HDN_ITEMCHANGINGA
-#define HDN_ITEMCHANGED HDN_ITEMCHANGEDA
-#define HDN_ITEMCLICK HDN_ITEMCLICKA
-#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA
-#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKA
-#define HDN_BEGINTRACK HDN_BEGINTRACKA
-#define HDN_ENDTRACK HDN_ENDTRACKA
-#define HDN_TRACK HDN_TRACKA
-#define HDN_GETDISPINFO HDN_GETDISPINFOA
-#endif
+#define HDN_ITEMCHANGING __MINGW_NAME_AW(HDN_ITEMCHANGING)
+#define HDN_ITEMCHANGED __MINGW_NAME_AW(HDN_ITEMCHANGED)
+#define HDN_ITEMCLICK __MINGW_NAME_AW(HDN_ITEMCLICK)
+#define HDN_ITEMDBLCLICK __MINGW_NAME_AW(HDN_ITEMDBLCLICK)
+#define HDN_DIVIDERDBLCLICK __MINGW_NAME_AW(HDN_DIVIDERDBLCLICK)
+#define HDN_BEGINTRACK __MINGW_NAME_AW(HDN_BEGINTRACK)
+#define HDN_ENDTRACK __MINGW_NAME_AW(HDN_ENDTRACK)
+#define HDN_TRACK __MINGW_NAME_AW(HDN_TRACK)
+#define HDN_GETDISPINFO __MINGW_NAME_AW(HDN_GETDISPINFO)
 
 #define HD_NOTIFYA NMHEADERA
 #define HD_NOTIFYW NMHEADERW
@@ -726,13 +685,8 @@ extern "C" {
     HDITEMW *pitem;
   } NMHEADERW,*LPNMHEADERW;
 
-#ifdef UNICODE
-#define NMHEADER NMHEADERW
-#define LPNMHEADER LPNMHEADERW
-#else
-#define NMHEADER NMHEADERA
-#define LPNMHEADER LPNMHEADERA
-#endif
+#define NMHEADER __MINGW_NAME_AW(NMHEADER)
+#define LPNMHEADER __MINGW_NAME_AW(LPNMHEADER)
 
   typedef struct tagNMHDDISPINFOW {
     NMHDR hdr;
@@ -754,13 +708,8 @@ extern "C" {
     LPARAM lParam;
   } NMHDDISPINFOA,*LPNMHDDISPINFOA;
 
-#ifdef UNICODE
-#define NMHDDISPINFO NMHDDISPINFOW
-#define LPNMHDDISPINFO LPNMHDDISPINFOW
-#else
-#define NMHDDISPINFO NMHDDISPINFOA
-#define LPNMHDDISPINFO LPNMHDDISPINFOA
-#endif
+#define NMHDDISPINFO __MINGW_NAME_AW(NMHDDISPINFO)
+#define LPNMHDDISPINFO __MINGW_NAME_AW(LPNMHDDISPINFO)
 
   typedef struct tagNMHDFILTERBTNCLICK {
     NMHDR hdr;
@@ -774,11 +723,7 @@ extern "C" {
 #define TOOLBARCLASSNAMEW L"ToolbarWindow32"
 #define TOOLBARCLASSNAMEA "ToolbarWindow32"
 
-#ifdef UNICODE
-#define TOOLBARCLASSNAME TOOLBARCLASSNAMEW
-#else
-#define TOOLBARCLASSNAME TOOLBARCLASSNAMEA
-#endif
+#define TOOLBARCLASSNAME __MINGW_NAME_AW(TOOLBARCLASSNAME)
 
   typedef struct _TBBUTTON {
     int iBitmap;
@@ -955,13 +900,8 @@ extern "C" {
     LPCWSTR pszValueName;
   } TBSAVEPARAMSW,*LPTBSAVEPARAMW;
 
-#ifdef UNICODE
-#define TBSAVEPARAMS TBSAVEPARAMSW
-#define LPTBSAVEPARAMS LPTBSAVEPARAMSW
-#else
-#define TBSAVEPARAMS TBSAVEPARAMSA
-#define LPTBSAVEPARAMS LPTBSAVEPARAMSA
-#endif
+#define TBSAVEPARAMS __MINGW_NAME_AW(TBSAVEPARAMS)
+#define LPTBSAVEPARAMS __MINGW_NAME_AW(LPTBSAVEPARAMS)
 
 #define TB_SAVERESTOREA (WM_USER+26)
 #define TB_SAVERESTOREW (WM_USER+76)
@@ -1000,15 +940,10 @@ extern "C" {
 #define TB_SETMAXTEXTROWS (WM_USER+60)
 #define TB_GETTEXTROWS (WM_USER+61)
 
-#ifdef UNICODE
-#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW
-#define TB_SAVERESTORE TB_SAVERESTOREW
-#define TB_ADDSTRING TB_ADDSTRINGW
-#else
-#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA
-#define TB_SAVERESTORE TB_SAVERESTOREA
-#define TB_ADDSTRING TB_ADDSTRINGA
-#endif
+#define TB_GETBUTTONTEXT __MINGW_NAME_AW(TB_GETBUTTONTEXT)
+#define TB_SAVERESTORE __MINGW_NAME_AW(TB_SAVERESTORE)
+#define TB_ADDSTRING __MINGW_NAME_AW(TB_ADDSTRING)
+
 #define TB_GETOBJECT (WM_USER+62)
 #define TB_GETHOTITEM (WM_USER+71)
 #define TB_SETHOTITEM (WM_USER+72)
@@ -1042,11 +977,8 @@ extern "C" {
 #define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
 
 #define TB_MAPACCELERATORW (WM_USER+90)
-#ifdef UNICODE
-#define TB_MAPACCELERATOR TB_MAPACCELERATORW
-#else
-#define TB_MAPACCELERATOR TB_MAPACCELERATORA
-#endif
+
+#define TB_MAPACCELERATOR __MINGW_NAME_AW(TB_MAPACCELERATOR)
 
   typedef struct {
     HINSTANCE hInstOld;
@@ -1095,48 +1027,31 @@ extern "C" {
     int cchText;
   } TBBUTTONINFOW,*LPTBBUTTONINFOW;
 
-#ifdef UNICODE
-#define TBBUTTONINFO TBBUTTONINFOW
-#define LPTBBUTTONINFO LPTBBUTTONINFOW
-#else
-#define TBBUTTONINFO TBBUTTONINFOA
-#define LPTBBUTTONINFO LPTBBUTTONINFOA
-#endif
+#define TBBUTTONINFO __MINGW_NAME_AW(TBBUTTONINFO)
+#define LPTBBUTTONINFO __MINGW_NAME_AW(LPTBBUTTONINFO)
 
 #define TB_GETBUTTONINFOW (WM_USER+63)
 #define TB_SETBUTTONINFOW (WM_USER+64)
 #define TB_GETBUTTONINFOA (WM_USER+65)
 #define TB_SETBUTTONINFOA (WM_USER+66)
-#ifdef UNICODE
-#define TB_GETBUTTONINFO TB_GETBUTTONINFOW
-#define TB_SETBUTTONINFO TB_SETBUTTONINFOW
-#else
-#define TB_GETBUTTONINFO TB_GETBUTTONINFOA
-#define TB_SETBUTTONINFO TB_SETBUTTONINFOA
-#endif
+
+#define TB_GETBUTTONINFO __MINGW_NAME_AW(TB_GETBUTTONINFO)
+#define TB_SETBUTTONINFO __MINGW_NAME_AW(TB_SETBUTTONINFO)
 
 #define TB_INSERTBUTTONW (WM_USER+67)
 #define TB_ADDBUTTONSW (WM_USER+68)
 
 #define TB_HITTEST (WM_USER+69)
 
-#ifdef UNICODE
-#define TB_INSERTBUTTON TB_INSERTBUTTONW
-#define TB_ADDBUTTONS TB_ADDBUTTONSW
-#else
-#define TB_INSERTBUTTON TB_INSERTBUTTONA
-#define TB_ADDBUTTONS TB_ADDBUTTONSA
-#endif
+#define TB_INSERTBUTTON __MINGW_NAME_AW(TB_INSERTBUTTON)
+#define TB_ADDBUTTONS __MINGW_NAME_AW(TB_ADDBUTTONS)
 
 #define TB_SETDRAWTEXTFLAGS (WM_USER+70)
 
 #define TB_GETSTRINGW (WM_USER+91)
 #define TB_GETSTRINGA (WM_USER+92)
-#ifdef UNICODE
-#define TB_GETSTRING TB_GETSTRINGW
-#else
-#define TB_GETSTRING TB_GETSTRINGA
-#endif
+
+#define TB_GETSTRING __MINGW_NAME_AW(TB_GETSTRING)
 
 #define TB_SETHOTITEM2 (WM_USER+94)
 #define TB_SETLISTGAP (WM_USER+96)
@@ -1249,15 +1164,9 @@ extern "C" {
     LPARAM lParam;
   } NMTBGETINFOTIPW,*LPNMTBGETINFOTIPW;
 
-#ifdef UNICODE
-#define TBN_GETINFOTIP TBN_GETINFOTIPW
-#define NMTBGETINFOTIP NMTBGETINFOTIPW
-#define LPNMTBGETINFOTIP LPNMTBGETINFOTIPW
-#else
-#define TBN_GETINFOTIP TBN_GETINFOTIPA
-#define NMTBGETINFOTIP NMTBGETINFOTIPA
-#define LPNMTBGETINFOTIP LPNMTBGETINFOTIPA
-#endif
+#define TBN_GETINFOTIP __MINGW_NAME_AW(TBN_GETINFOTIP)
+#define NMTBGETINFOTIP __MINGW_NAME_AW(NMTBGETINFOTIP)
+#define LPNMTBGETINFOTIP __MINGW_NAME_AW(LPNMTBGETINFOTIP)
 
 #define TBNF_IMAGE 0x1
 #define TBNF_TEXT 0x2
@@ -1283,25 +1192,15 @@ extern "C" {
     int cchText;
   } NMTBDISPINFOW,*LPNMTBDISPINFOW;
 
-#ifdef UNICODE
-#define TBN_GETDISPINFO TBN_GETDISPINFOW
-#define NMTBDISPINFO NMTBDISPINFOW
-#define LPNMTBDISPINFO LPNMTBDISPINFOW
-#else
-#define TBN_GETDISPINFO TBN_GETDISPINFOA
-#define NMTBDISPINFO NMTBDISPINFOA
-#define LPNMTBDISPINFO LPNMTBDISPINFOA
-#endif
+#define TBN_GETDISPINFO __MINGW_NAME_AW(TBN_GETDISPINFO)
+#define NMTBDISPINFO __MINGW_NAME_AW(NMTBDISPINFO)
+#define LPNMTBDISPINFO __MINGW_NAME_AW(LPNMTBDISPINFO)
 
 #define TBDDRET_DEFAULT 0
 #define TBDDRET_NODEFAULT 1
 #define TBDDRET_TREATPRESSED 2
 
-#ifdef UNICODE
-#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOW
-#else
-#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOA
-#endif
+#define TBN_GETBUTTONINFO __MINGW_NAME_AW(TBN_GETBUTTONINFO)
 
 #define TBNOTIFYA NMTOOLBARA
 #define TBNOTIFYW NMTOOLBARW
@@ -1329,13 +1228,9 @@ extern "C" {
     RECT rcButton;
   } NMTOOLBARW,*LPNMTOOLBARW;
 
-#ifdef UNICODE
-#define NMTOOLBAR NMTOOLBARW
-#define LPNMTOOLBAR LPNMTOOLBARW
-#else
-#define NMTOOLBAR NMTOOLBARA
-#define LPNMTOOLBAR LPNMTOOLBARA
-#endif
+#define NMTOOLBAR __MINGW_NAME_AW(NMTOOLBAR)
+#define LPNMTOOLBAR __MINGW_NAME_AW(LPNMTOOLBAR)
+
 #endif
 
 #ifndef NOREBAR
@@ -1343,11 +1238,7 @@ extern "C" {
 #define REBARCLASSNAMEW L"ReBarWindow32"
 #define REBARCLASSNAMEA "ReBarWindow32"
 
-#ifdef UNICODE
-#define REBARCLASSNAME REBARCLASSNAMEW
-#else
-#define REBARCLASSNAME REBARCLASSNAMEA
-#endif
+#define REBARCLASSNAME __MINGW_NAME_AW(REBARCLASSNAME)
 
 #define RBIM_IMAGELIST 0x1
 
@@ -1447,19 +1338,14 @@ extern "C" {
     LPARAM lParam;
     UINT cxHeader;
   } REBARBANDINFOW,*LPREBARBANDINFOW;
+
   typedef REBARBANDINFOW CONST *LPCREBARBANDINFOW;
 
-#ifdef UNICODE
-#define REBARBANDINFO REBARBANDINFOW
-#define LPREBARBANDINFO LPREBARBANDINFOW
-#define LPCREBARBANDINFO LPCREBARBANDINFOW
-#define REBARBANDINFO_V3_SIZE REBARBANDINFOW_V3_SIZE
-#else
-#define REBARBANDINFO REBARBANDINFOA
-#define LPREBARBANDINFO LPREBARBANDINFOA
-#define LPCREBARBANDINFO LPCREBARBANDINFOA
-#define REBARBANDINFO_V3_SIZE REBARBANDINFOA_V3_SIZE
-#endif
+#define REBARBANDINFO __MINGW_NAME_AW(REBARBANDINFO)
+#define LPREBARBANDINFO __MINGW_NAME_AW(LPREBARBANDINFO)
+#define LPCREBARBANDINFO __MINGW_NAME_AW(LPCREBARBANDINFO)
+
+#define REBARBANDINFO_V3_SIZE __MINGW_NAME_AW_EXT(REBARBANDINFO,_V3_SIZE)
 
 #define RB_INSERTBANDA (WM_USER+1)
 #define RB_DELETEBAND (WM_USER+2)
@@ -1488,13 +1374,8 @@ extern "C" {
 #define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME
 #define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME
 
-#ifdef UNICODE
-#define RB_INSERTBAND RB_INSERTBANDW
-#define RB_SETBANDINFO RB_SETBANDINFOW
-#else
-#define RB_INSERTBAND RB_INSERTBANDA
-#define RB_SETBANDINFO RB_SETBANDINFOA
-#endif
+#define RB_INSERTBAND __MINGW_NAME_AW(RB_INSERTBAND)
+#define RB_SETBANDINFO __MINGW_NAME_AW(RB_SETBANDINFO)
 
 #define RB_BEGINDRAG (WM_USER+24)
 #define RB_ENDDRAG (WM_USER+25)
@@ -1503,11 +1384,7 @@ extern "C" {
 #define RB_GETBANDINFOW (WM_USER+28)
 #define RB_GETBANDINFOA (WM_USER+29)
 
-#ifdef UNICODE
-#define RB_GETBANDINFO RB_GETBANDINFOW
-#else
-#define RB_GETBANDINFO RB_GETBANDINFOA
-#endif
+#define RB_GETBANDINFO __MINGW_NAME_AW(RB_GETBANDINFO)
 
 #define RB_MINIMIZEBAND (WM_USER+30)
 #define RB_MAXIMIZEBAND (WM_USER+31)
@@ -1603,11 +1480,8 @@ extern "C" {
 
 #define TOOLTIPS_CLASSW L"tooltips_class32"
 #define TOOLTIPS_CLASSA "tooltips_class32"
-#ifdef UNICODE
-#define TOOLTIPS_CLASS TOOLTIPS_CLASSW
-#else
-#define TOOLTIPS_CLASS TOOLTIPS_CLASSA
-#endif
+
+#define TOOLTIPS_CLASS __MINGW_NAME_AW(TOOLTIPS_CLASS)
 
 #define LPTOOLINFOA LPTTTOOLINFOA
 #define LPTOOLINFOW LPTTTOOLINFOW
@@ -1648,17 +1522,11 @@ extern "C" {
     void *lpReserved;
   } TTTOOLINFOW,NEAR *PTOOLINFOW,*LPTTTOOLINFOW;
 
-#ifdef UNICODE
-#define TTTOOLINFO TTTOOLINFOW
-#define PTOOLINFO PTOOLINFOW
-#define LPTTTOOLINFO LPTTTOOLINFOW
-#define TTTOOLINFO_V1_SIZE TTTOOLINFOW_V1_SIZE
-#else
-#define PTOOLINFO PTOOLINFOA
-#define TTTOOLINFO TTTOOLINFOA
-#define LPTTTOOLINFO LPTTTOOLINFOA
-#define TTTOOLINFO_V1_SIZE TTTOOLINFOA_V1_SIZE
-#endif
+#define TTTOOLINFO __MINGW_NAME_AW(TTTOOLINFO)
+#define PTOOLINFO __MINGW_NAME_AW(PTOOLINFO)
+#define LPTTTOOLINFO __MINGW_NAME_AW(LPTTTOOLINFO)
+
+#define TTTOOLINFO_V1_SIZE __MINGW_NAME_AW_EXT(TTTOOLINFO,_V1_SIZE)
 
 #define TTS_ALWAYSTIP 0x1
 #define TTS_NOPREFIX 0x2
@@ -1742,31 +1610,18 @@ extern "C" {
     WCHAR *pszTitle;
   } TTGETTITLE,*PTTGETTITLE;
 
-#ifdef UNICODE
-#define TTM_ADDTOOL TTM_ADDTOOLW
-#define TTM_DELTOOL TTM_DELTOOLW
-#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTW
-#define TTM_GETTOOLINFO TTM_GETTOOLINFOW
-#define TTM_SETTOOLINFO TTM_SETTOOLINFOW
-#define TTM_HITTEST TTM_HITTESTW
-#define TTM_GETTEXT TTM_GETTEXTW
-#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTW
-#define TTM_ENUMTOOLS TTM_ENUMTOOLSW
-#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLW
-#define TTM_SETTITLE TTM_SETTITLEW
-#else
-#define TTM_ADDTOOL TTM_ADDTOOLA
-#define TTM_DELTOOL TTM_DELTOOLA
-#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTA
-#define TTM_GETTOOLINFO TTM_GETTOOLINFOA
-#define TTM_SETTOOLINFO TTM_SETTOOLINFOA
-#define TTM_HITTEST TTM_HITTESTA
-#define TTM_GETTEXT TTM_GETTEXTA
-#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTA
-#define TTM_ENUMTOOLS TTM_ENUMTOOLSA
-#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLA
-#define TTM_SETTITLE TTM_SETTITLEA
-#endif
+#define TTM_ADDTOOL __MINGW_NAME_AW(TTM_ADDTOOL)
+#define TTM_DELTOOL __MINGW_NAME_AW(TTM_DELTOOL)
+#define TTM_NEWTOOLRECT __MINGW_NAME_AW(TTM_NEWTOOLRECT)
+#define TTM_GETTOOLINFO __MINGW_NAME_AW(TTM_GETTOOLINFO)
+#define TTM_SETTOOLINFO __MINGW_NAME_AW(TTM_SETTOOLINFO)
+#define TTM_HITTEST __MINGW_NAME_AW(TTM_HITTEST)
+#define TTM_GETTEXT __MINGW_NAME_AW(TTM_GETTEXT)
+#define TTM_UPDATETIPTEXT __MINGW_NAME_AW(TTM_UPDATETIPTEXT)
+#define TTM_ENUMTOOLS __MINGW_NAME_AW(TTM_ENUMTOOLS)
+#define TTM_GETCURRENTTOOL __MINGW_NAME_AW(TTM_GETCURRENTTOOL)
+#define TTM_SETTITLE __MINGW_NAME_AW(TTM_SETTITLE)
+
 #define TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME
 
 #define LPHITTESTINFOW LPTTHITTESTINFOW
@@ -1785,13 +1640,8 @@ extern "C" {
     TTTOOLINFOW ti;
   } TTHITTESTINFOW,*LPTTHITTESTINFOW;
 
-#ifdef UNICODE
-#define TTHITTESTINFO TTHITTESTINFOW
-#define LPTTHITTESTINFO LPTTHITTESTINFOW
-#else
-#define TTHITTESTINFO TTHITTESTINFOA
-#define LPTTHITTESTINFO LPTTHITTESTINFOA
-#endif
+#define TTHITTESTINFO __MINGW_NAME_AW(TTHITTESTINFO)
+#define LPTTHITTESTINFO __MINGW_NAME_AW(LPTTHITTESTINFO)
 
 #define TTN_GETDISPINFOA (TTN_FIRST - 0)
 #define TTN_GETDISPINFOW (TTN_FIRST - 10)
@@ -1799,11 +1649,7 @@ extern "C" {
 #define TTN_POP (TTN_FIRST - 2)
 #define TTN_LINKCLICK (TTN_FIRST - 3)
 
-#ifdef UNICODE
-#define TTN_GETDISPINFO TTN_GETDISPINFOW
-#else
-#define TTN_GETDISPINFO TTN_GETDISPINFOA
-#endif
+#define TTN_GETDISPINFO __MINGW_NAME_AW(TTN_GETDISPINFO)
 
 #define TTN_NEEDTEXT TTN_GETDISPINFO
 #define TTN_NEEDTEXTA TTN_GETDISPINFOA
@@ -1838,15 +1684,11 @@ extern "C" {
     LPARAM lParam;
   } NMTTDISPINFOW,*LPNMTTDISPINFOW;
 
-#ifdef UNICODE
-#define NMTTDISPINFO NMTTDISPINFOW
-#define LPNMTTDISPINFO LPNMTTDISPINFOW
-#define NMTTDISPINFO_V1_SIZE NMTTDISPINFOW_V1_SIZE
-#else
-#define NMTTDISPINFO NMTTDISPINFOA
-#define LPNMTTDISPINFO LPNMTTDISPINFOA
-#define NMTTDISPINFO_V1_SIZE NMTTDISPINFOA_V1_SIZE
-#endif
+
+#define NMTTDISPINFO __MINGW_NAME_AW(NMTTDISPINFO)
+#define LPNMTTDISPINFO __MINGW_NAME_AW(LPNMTTDISPINFO)
+
+#define NMTTDISPINFO_V1_SIZE __MINGW_NAME_AW_EXT(NMTTDISPINFO,_V1_SIZE)
 #endif
 
 #ifndef NOSTATUSBAR
@@ -1861,21 +1703,13 @@ extern "C" {
   WINCOMMCTRLAPI HWND WINAPI CreateStatusWindowA(LONG style,LPCSTR lpszText,HWND hwndParent,UINT wID);
   WINCOMMCTRLAPI HWND WINAPI CreateStatusWindowW(LONG style,LPCWSTR lpszText,HWND hwndParent,UINT wID);
 
-#ifdef UNICODE
-#define CreateStatusWindow CreateStatusWindowW
-#define DrawStatusText DrawStatusTextW
-#else
-#define CreateStatusWindow CreateStatusWindowA
-#define DrawStatusText DrawStatusTextA
-#endif
+#define CreateStatusWindow __MINGW_NAME_AW(CreateStatusWindow)
+#define DrawStatusText __MINGW_NAME_AW(DrawStatusText)
 
 #define STATUSCLASSNAMEW L"msctls_statusbar32"
 #define STATUSCLASSNAMEA "msctls_statusbar32"
-#ifdef UNICODE
-#define STATUSCLASSNAME STATUSCLASSNAMEW
-#else
-#define STATUSCLASSNAME STATUSCLASSNAMEA
-#endif
+
+#define STATUSCLASSNAME __MINGW_NAME_AW(STATUSCLASSNAME)
 
 #define SB_SETTEXTA (WM_USER+1)
 #define SB_SETTEXTW (WM_USER+11)
@@ -1884,19 +1718,11 @@ extern "C" {
 #define SB_GETTEXTLENGTHA (WM_USER+3)
 #define SB_GETTEXTLENGTHW (WM_USER+12)
 
-#ifdef UNICODE
-#define SB_GETTEXT SB_GETTEXTW
-#define SB_SETTEXT SB_SETTEXTW
-#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHW
-#define SB_SETTIPTEXT SB_SETTIPTEXTW
-#define SB_GETTIPTEXT SB_GETTIPTEXTW
-#else
-#define SB_GETTEXT SB_GETTEXTA
-#define SB_SETTEXT SB_SETTEXTA
-#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHA
-#define SB_SETTIPTEXT SB_SETTIPTEXTA
-#define SB_GETTIPTEXT SB_GETTIPTEXTA
-#endif
+#define SB_GETTEXT __MINGW_NAME_AW(SB_GETTEXT)
+#define SB_SETTEXT __MINGW_NAME_AW(SB_SETTEXT)
+#define SB_GETTEXTLENGTH __MINGW_NAME_AW(SB_GETTEXTLENGTH)
+#define SB_SETTIPTEXT __MINGW_NAME_AW(SB_SETTIPTEXT)
+#define SB_GETTIPTEXT __MINGW_NAME_AW(SB_GETTIPTEXT)
 
 #define SB_SETPARTS (WM_USER+4)
 #define SB_GETPARTS (WM_USER+6)
@@ -1940,11 +1766,8 @@ extern "C" {
 
 #define TRACKBAR_CLASSA "msctls_trackbar32"
 #define TRACKBAR_CLASSW L"msctls_trackbar32"
-#ifdef UNICODE
-#define TRACKBAR_CLASS TRACKBAR_CLASSW
-#else
-#define TRACKBAR_CLASS TRACKBAR_CLASSA
-#endif
+
+#define TRACKBAR_CLASS __MINGW_NAME_AW(TRACKBAR_CLASS)
 
 #define TBS_AUTOTICKS 0x1
 #define TBS_VERT 0x2
@@ -2049,11 +1872,8 @@ extern "C" {
 
 #define UPDOWN_CLASSA "msctls_updown32"
 #define UPDOWN_CLASSW L"msctls_updown32"
-#ifdef UNICODE
-#define UPDOWN_CLASS UPDOWN_CLASSW
-#else
-#define UPDOWN_CLASS UPDOWN_CLASSA
-#endif
+
+#define UPDOWN_CLASS __MINGW_NAME_AW(UPDOWN_CLASS)
 
   typedef struct _UDACCEL {
     UINT nSec;
@@ -2108,11 +1928,8 @@ extern "C" {
 
 #define PROGRESS_CLASSA "msctls_progress32"
 #define PROGRESS_CLASSW L"msctls_progress32"
-#ifdef UNICODE
-#define PROGRESS_CLASS PROGRESS_CLASSW
-#else
-#define PROGRESS_CLASS PROGRESS_CLASSA
-#endif
+
+#define PROGRESS_CLASS __MINGW_NAME_AW(PROGRESS_CLASS)
 
 #define PBS_SMOOTH 0x1
 #define PBS_VERTICAL 0x4
@@ -2171,11 +1988,8 @@ extern "C" {
 
 #define HOTKEY_CLASSA "msctls_hotkey32"
 #define HOTKEY_CLASSW L"msctls_hotkey32"
-#ifdef UNICODE
-#define HOTKEY_CLASS HOTKEY_CLASSW
-#else
-#define HOTKEY_CLASS HOTKEY_CLASSA
-#endif
+
+#define HOTKEY_CLASS __MINGW_NAME_AW(HOTKEY_CLASS)
 #endif
 
 #define CCS_TOP 0x1L
@@ -2194,11 +2008,8 @@ extern "C" {
 
 #define WC_LISTVIEWA "SysListView32"
 #define WC_LISTVIEWW L"SysListView32"
-#ifdef UNICODE
-#define WC_LISTVIEW WC_LISTVIEWW
-#else
-#define WC_LISTVIEW WC_LISTVIEWA
-#endif
+
+#define WC_LISTVIEW __MINGW_NAME_AW(WC_LISTVIEW)
 
 #define LVS_ICON 0x0
 #define LVS_REPORT 0x1
@@ -2237,9 +2048,10 @@ extern "C" {
 #define LVM_GETIMAGELIST (LVM_FIRST+2)
 #define ListView_GetImageList(hwnd,iImageList) (HIMAGELIST)SNDMSG((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT)(iImageList),0L)
 
-#define LVSIL_NORMAL 0
-#define LVSIL_SMALL 1
-#define LVSIL_STATE 2
+#define LVSIL_NORMAL            0
+#define LVSIL_SMALL             1
+#define LVSIL_STATE             2
+#define LVSIL_GROUPHEADER       3
 
 #define LVM_SETIMAGELIST (LVM_FIRST+3)
 #define ListView_SetImageList(hwnd,himl,iImageList) (HIMAGELIST)SNDMSG((hwnd),LVM_SETIMAGELIST,(WPARAM)(iImageList),(LPARAM)(HIMAGELIST)(himl))
@@ -2313,23 +2125,15 @@ extern "C" {
     PUINT puColumns;
   } LVITEMW,*LPLVITEMW;
 
-#ifdef UNICODE
-#define LVITEM LVITEMW
-#define LPLVITEM LPLVITEMW
-#define LVITEM_V1_SIZE LVITEMW_V1_SIZE
-#else
-#define LVITEM LVITEMA
-#define LPLVITEM LPLVITEMA
-#define LVITEM_V1_SIZE LVITEMA_V1_SIZE
-#endif
+#define LVITEM __MINGW_NAME_AW(LVITEM)
+#define LPLVITEM __MINGW_NAME_AW(LPLVITEM)
+
+#define LVITEM_V1_SIZE __MINGW_NAME_AW_EXT(LVITEM,_V1_SIZE)
 
 #define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L)
 #define LPSTR_TEXTCALLBACKA ((LPSTR)-1L)
-#ifdef UNICODE
-#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKW
-#else
-#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKA
-#endif
+
+#define LPSTR_TEXTCALLBACK __MINGW_NAME_AW(LPSTR_TEXTCALLBACK)
 
 #define I_IMAGECALLBACK (-1)
 #define I_IMAGENONE (-2)
@@ -2337,31 +2141,23 @@ extern "C" {
 
 #define LVM_GETITEMA (LVM_FIRST+5)
 #define LVM_GETITEMW (LVM_FIRST+75)
-#ifdef UNICODE
-#define LVM_GETITEM LVM_GETITEMW
-#else
-#define LVM_GETITEM LVM_GETITEMA
-#endif
+
+#define LVM_GETITEM __MINGW_NAME_AW(LVM_GETITEM)
 
 #define ListView_GetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),LVM_GETITEM,0,(LPARAM)(LV_ITEM *)(pitem))
 
 #define LVM_SETITEMA (LVM_FIRST+6)
 #define LVM_SETITEMW (LVM_FIRST+76)
-#ifdef UNICODE
-#define LVM_SETITEM LVM_SETITEMW
-#else
-#define LVM_SETITEM LVM_SETITEMA
-#endif
+
+#define LVM_SETITEM __MINGW_NAME_AW(LVM_SETITEM)
 
 #define ListView_SetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),LVM_SETITEM,0,(LPARAM)(const LV_ITEM *)(pitem))
 
 #define LVM_INSERTITEMA (LVM_FIRST+7)
 #define LVM_INSERTITEMW (LVM_FIRST+77)
-#ifdef UNICODE
-#define LVM_INSERTITEM LVM_INSERTITEMW
-#else
-#define LVM_INSERTITEM LVM_INSERTITEMA
-#endif
+
+#define LVM_INSERTITEM __MINGW_NAME_AW(LVM_INSERTITEM)
+
 #define ListView_InsertItem(hwnd,pitem) (int)SNDMSG((hwnd),LVM_INSERTITEM,0,(LPARAM)(const LV_ITEM *)(pitem))
 
 #define LVM_DELETEITEM (LVM_FIRST+8)
@@ -2390,12 +2186,12 @@ extern "C" {
 #define LVM_GETNEXTITEM (LVM_FIRST+12)
 #define ListView_GetNextItem(hwnd,i,flags) (int)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(int)(i),MAKELPARAM((flags),0))
 
-#define LVFI_PARAM 0x1
-#define LVFI_STRING 0x2
-#define LVFI_SUBSTRING 0x4
-#define LVFI_PARTIAL 0x8
-#define LVFI_WRAP 0x20
-#define LVFI_NEARESTXY 0x40
+#define LVFI_PARAM              0x0001
+#define LVFI_STRING             0x0002
+#define LVFI_SUBSTRING          0x0004
+#define LVFI_PARTIAL            0x0008
+#define LVFI_WRAP               0x0020
+#define LVFI_NEARESTXY          0x0040
 
 #define LV_FINDINFOA LVFINDINFOA
 #define LV_FINDINFOW LVFINDINFOW
@@ -2417,19 +2213,12 @@ extern "C" {
     UINT vkDirection;
   } LVFINDINFOW,*LPFINDINFOW;
 
-#ifdef UNICODE
-#define LVFINDINFO LVFINDINFOW
-#else
-#define LVFINDINFO LVFINDINFOA
-#endif
+#define LVFINDINFO __MINGW_NAME_AW(LVFINDINFO)
 
 #define LVM_FINDITEMA (LVM_FIRST+13)
 #define LVM_FINDITEMW (LVM_FIRST+83)
-#ifdef UNICODE
-#define LVM_FINDITEM LVM_FINDITEMW
-#else
-#define LVM_FINDITEM LVM_FINDITEMA
-#endif
+
+#define LVM_FINDITEM __MINGW_NAME_AW(LVM_FINDITEM)
 
 #define ListView_FindItem(hwnd,iStart,plvfi) (int)SNDMSG((hwnd),LVM_FINDITEM,(WPARAM)(int)(iStart),(LPARAM)(const LV_FINDINFO *)(plvfi))
 
@@ -2449,11 +2238,8 @@ extern "C" {
 
 #define LVM_GETSTRINGWIDTHA (LVM_FIRST+17)
 #define LVM_GETSTRINGWIDTHW (LVM_FIRST+87)
-#ifdef UNICODE
-#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHW
-#else
-#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHA
-#endif
+
+#define LVM_GETSTRINGWIDTH __MINGW_NAME_AW(LVM_GETSTRINGWIDTH)
 
 #define ListView_GetStringWidth(hwndLV,psz) (int)SNDMSG((hwndLV),LVM_GETSTRINGWIDTH,0,(LPARAM)(LPCTSTR)(psz))
 
@@ -2501,11 +2287,8 @@ extern "C" {
 
 #define LVM_EDITLABELA (LVM_FIRST+23)
 #define LVM_EDITLABELW (LVM_FIRST+118)
-#ifdef UNICODE
-#define LVM_EDITLABEL LVM_EDITLABELW
-#else
-#define LVM_EDITLABEL LVM_EDITLABELA
-#endif
+
+#define LVM_EDITLABEL __MINGW_NAME_AW(LVM_EDITLABEL)
 
 #define ListView_EditLabel(hwndLV,i) (HWND)SNDMSG((hwndLV),LVM_EDITLABEL,(WPARAM)(int)(i),0L)
 
@@ -2530,33 +2313,28 @@ extern "C" {
     int iOrder;
   } LVCOLUMNA,*LPLVCOLUMNA;
 
- typedef struct tagLVCOLUMNW {
-   UINT mask;
-   int fmt;
-   int cx;
-   LPWSTR pszText;
-   int cchTextMax;
-   int iSubItem;
-  #if (_WIN32_IE >= 0x0300)
-   int iImage;
-   int iOrder;
-  #endif
-  #if (_WIN32_WINNT >= 0x0600)
-   int cxMin;
-   int cxDefault;
-   int cxIdeal;
-  #endif
 typedef struct tagLVCOLUMNW {
+    UINT mask;
+    int fmt;
+    int cx;
+    LPWSTR pszText;
+    int cchTextMax;
+    int iSubItem;
+if (_WIN32_IE >= 0x0300)
+    int iImage;
+    int iOrder;
+endif
+if (_WIN32_WINNT >= 0x0600)
+    int cxMin;
+    int cxDefault;
+    int cxIdeal;
+endif
   } LVCOLUMNW,*LPLVCOLUMNW;
 
-#ifdef UNICODE
-#define LVCOLUMN LVCOLUMNW
-#define LPLVCOLUMN LPLVCOLUMNW
-#define LVCOLUMN_V1_SIZE LVCOLUMNW_V1_SIZE
-#else
-#define LVCOLUMN LVCOLUMNA
-#define LPLVCOLUMN LPLVCOLUMNA
-#define LVCOLUMN_V1_SIZE LVCOLUMNA_V1_SIZE
-#endif
+#define LVCOLUMN __MINGW_NAME_AW(LVCOLUMN)
+#define LPLVCOLUMN __MINGW_NAME_AW(LPLVCOLUMN)
+
+#define LVCOLUMN_V1_SIZE __MINGW_NAME_AW_EXT(LVCOLUMN,_V1_SIZE)
 
 #define LVCF_FMT 0x1
 #define LVCF_WIDTH 0x2
@@ -2591,31 +2369,22 @@ extern "C" {
 
 #define LVM_GETCOLUMNA (LVM_FIRST+25)
 #define LVM_GETCOLUMNW (LVM_FIRST+95)
-#ifdef UNICODE
-#define LVM_GETCOLUMN LVM_GETCOLUMNW
-#else
-#define LVM_GETCOLUMN LVM_GETCOLUMNA
-#endif
+
+#define LVM_GETCOLUMN __MINGW_NAME_AW(LVM_GETCOLUMN)
 
 #define ListView_GetColumn(hwnd,iCol,pcol) (WINBOOL)SNDMSG((hwnd),LVM_GETCOLUMN,(WPARAM)(int)(iCol),(LPARAM)(LV_COLUMN *)(pcol))
 
 #define LVM_SETCOLUMNA (LVM_FIRST+26)
 #define LVM_SETCOLUMNW (LVM_FIRST+96)
-#ifdef UNICODE
-#define LVM_SETCOLUMN LVM_SETCOLUMNW
-#else
-#define LVM_SETCOLUMN LVM_SETCOLUMNA
-#endif
+
+#define LVM_SETCOLUMN __MINGW_NAME_AW(LVM_SETCOLUMN)
 
 #define ListView_SetColumn(hwnd,iCol,pcol) (WINBOOL)SNDMSG((hwnd),LVM_SETCOLUMN,(WPARAM)(int)(iCol),(LPARAM)(const LV_COLUMN *)(pcol))
 
 #define LVM_INSERTCOLUMNA (LVM_FIRST+27)
 #define LVM_INSERTCOLUMNW (LVM_FIRST+97)
-#ifdef UNICODE
-#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNW
-#else
-#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNA
-#endif
+
+#define LVM_INSERTCOLUMN __MINGW_NAME_AW(LVM_INSERTCOLUMN)
 
 #define ListView_InsertColumn(hwnd,iCol,pcol) (int)SNDMSG((hwnd),LVM_INSERTCOLUMN,(WPARAM)(int)(iCol),(LPARAM)(const LV_COLUMN *)(pcol))
 
@@ -2663,22 +2432,14 @@ extern "C" {
 #define LVM_GETITEMTEXTA (LVM_FIRST+45)
 #define LVM_GETITEMTEXTW (LVM_FIRST+115)
 
-#ifdef UNICODE
-#define LVM_GETITEMTEXT LVM_GETITEMTEXTW
-#else
-#define LVM_GETITEMTEXT LVM_GETITEMTEXTA
-#endif
+#define LVM_GETITEMTEXT __MINGW_NAME_AW(LVM_GETITEMTEXT)
 
 #define ListView_GetItemText(hwndLV,i,iSubItem_,pszText_,cchTextMax_) { LV_ITEM _ms_lvi; _ms_lvi.iSubItem = iSubItem_; _ms_lvi.cchTextMax = cchTextMax_; _ms_lvi.pszText = pszText_; SNDMSG((hwndLV),LVM_GETITEMTEXT,(WPARAM)(i),(LPARAM)(LV_ITEM *)&_ms_lvi);}
 
 #define LVM_SETITEMTEXTA (LVM_FIRST+46)
 #define LVM_SETITEMTEXTW (LVM_FIRST+116)
 
-#ifdef UNICODE
-#define LVM_SETITEMTEXT LVM_SETITEMTEXTW
-#else
-#define LVM_SETITEMTEXT LVM_SETITEMTEXTA
-#endif
+#define LVM_SETITEMTEXT __MINGW_NAME_AW(LVM_SETITEMTEXT)
 
 #define ListView_SetItemText(hwndLV,i,iSubItem_,pszText_) { LV_ITEM _ms_lvi; _ms_lvi.iSubItem = iSubItem_; _ms_lvi.pszText = pszText_; SNDMSG((hwndLV),LVM_SETITEMTEXT,(WPARAM)(i),(LPARAM)(LV_ITEM *)&_ms_lvi);}
 
@@ -2706,11 +2467,7 @@ extern "C" {
 #define LVM_GETISEARCHSTRINGA (LVM_FIRST+52)
 #define LVM_GETISEARCHSTRINGW (LVM_FIRST+117)
 
-#ifdef UNICODE
-#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGW
-#else
-#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGA
-#endif
+#define LVM_GETISEARCHSTRING __MINGW_NAME_AW(LVM_GETISEARCHSTRING)
 
 #define ListView_GetISearchString(hwndLV,lpsz) (WINBOOL)SNDMSG((hwndLV),LVM_GETISEARCHSTRING,0,(LPARAM)(LPTSTR)(lpsz))
 
@@ -3014,17 +2771,10 @@ extern "C" {
 #define LVM_ISITEMVISIBLE (LVM_FIRST+182)
 #define ListView_IsItemVisible(hwnd,index) (UINT)SNDMSG((hwnd),LVM_ISITEMVISIBLE,(WPARAM)(index),(LPARAM)0)
 
-#ifdef UNICODE
-#define LVBKIMAGE LVBKIMAGEW
-#define LPLVBKIMAGE LPLVBKIMAGEW
-#define LVM_SETBKIMAGE LVM_SETBKIMAGEW
-#define LVM_GETBKIMAGE LVM_GETBKIMAGEW
-#else
-#define LVBKIMAGE LVBKIMAGEA
-#define LPLVBKIMAGE LPLVBKIMAGEA
-#define LVM_SETBKIMAGE LVM_SETBKIMAGEA
-#define LVM_GETBKIMAGE LVM_GETBKIMAGEA
-#endif
+#define LVBKIMAGE __MINGW_NAME_AW(LVBKIMAGE)
+#define LPLVBKIMAGE __MINGW_NAME_AW(LPLVBKIMAGE)
+#define LVM_SETBKIMAGE __MINGW_NAME_AW(LVM_SETBKIMAGE)
+#define LVM_GETBKIMAGE __MINGW_NAME_AW(LVM_GETBKIMAGE)
 
 #define ListView_SetBkImage(hwnd,plvbki) (WINBOOL)SNDMSG((hwnd),LVM_SETBKIMAGE,0,(LPARAM)(plvbki))
 #define ListView_GetBkImage(hwnd,plvbki) (WINBOOL)SNDMSG((hwnd),LVM_GETBKIMAGE,0,(LPARAM)(plvbki))
@@ -3112,19 +2862,11 @@ extern "C" {
 #define LPNM_FINDITEMW LPNMLVFINDITEMW
 #define NM_FINDITEMW NMLVFINDITEMW
 
-#ifdef UNICODE
-#define PNM_FINDITEM PNM_FINDITEMW
-#define LPNM_FINDITEM LPNM_FINDITEMW
-#define NM_FINDITEM NM_FINDITEMW
-#define NMLVFINDITEM NMLVFINDITEMW
-#define LPNMLVFINDITEM LPNMLVFINDITEMW
-#else
-#define PNM_FINDITEM PNM_FINDITEMA
-#define LPNM_FINDITEM LPNM_FINDITEMA
-#define NM_FINDITEM NM_FINDITEMA
-#define NMLVFINDITEM NMLVFINDITEMA
-#define LPNMLVFINDITEM LPNMLVFINDITEMA
-#endif
+#define PNM_FINDITEM __MINGW_NAME_AW(PNM_FINDITEM)
+#define LPNM_FINDITEM __MINGW_NAME_AW(LPNM_FINDITEM)
+#define NM_FINDITEM __MINGW_NAME_AW(NM_FINDITEM)
+#define NMLVFINDITEM __MINGW_NAME_AW(NMLVFINDITEM)
+#define LPNMLVFINDITEM __MINGW_NAME_AW(LPNMLVFINDITEM)
 
   typedef struct tagNMLVODSTATECHANGE {
     NMHDR hdr;
@@ -3158,11 +2900,7 @@ extern "C" {
 #define LVN_ITEMACTIVATE (LVN_FIRST-14)
 #define LVN_ODSTATECHANGED (LVN_FIRST-15)
 
-#ifdef UNICODE
-#define LVN_ODFINDITEM LVN_ODFINDITEMW
-#else
-#define LVN_ODFINDITEM LVN_ODFINDITEMA
-#endif
+#define LVN_ODFINDITEM __MINGW_NAME_AW(LVN_ODFINDITEM)
 
 #define LVN_HOTTRACK (LVN_FIRST-21)
 #define LVN_GETDISPINFOA (LVN_FIRST-50)
@@ -3170,17 +2908,10 @@ extern "C" {
 #define LVN_SETDISPINFOA (LVN_FIRST-51)
 #define LVN_SETDISPINFOW (LVN_FIRST-78)
 
-#ifdef UNICODE
-#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITW
-#define LVN_ENDLABELEDIT LVN_ENDLABELEDITW
-#define LVN_GETDISPINFO LVN_GETDISPINFOW
-#define LVN_SETDISPINFO LVN_SETDISPINFOW
-#else
-#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITA
-#define LVN_ENDLABELEDIT LVN_ENDLABELEDITA
-#define LVN_GETDISPINFO LVN_GETDISPINFOA
-#define LVN_SETDISPINFO LVN_SETDISPINFOA
-#endif
+#define LVN_BEGINLABELEDIT __MINGW_NAME_AW(LVN_BEGINLABELEDIT)
+#define LVN_ENDLABELEDIT __MINGW_NAME_AW(LVN_ENDLABELEDIT)
+#define LVN_GETDISPINFO __MINGW_NAME_AW(LVN_GETDISPINFO)
+#define LVN_SETDISPINFO __MINGW_NAME_AW(LVN_SETDISPINFO)
 
 #define LVIF_DI_SETITEM 0x1000
 
@@ -3198,11 +2929,7 @@ extern "C" {
     LVITEMW item;
   } NMLVDISPINFOW,*LPNMLVDISPINFOW;
 
-#ifdef UNICODE
-#define NMLVDISPINFO NMLVDISPINFOW
-#else
-#define NMLVDISPINFO NMLVDISPINFOA
-#endif
+#define NMLVDISPINFO __MINGW_NAME_AW(NMLVDISPINFO)
 
 #define LVN_KEYDOWN (LVN_FIRST-55)
 
@@ -3245,15 +2972,9 @@ extern "C" {
 #define LVN_GETINFOTIPA (LVN_FIRST-57)
 #define LVN_GETINFOTIPW (LVN_FIRST-58)
 
-#ifdef UNICODE
-#define LVN_GETINFOTIP LVN_GETINFOTIPW
-#define NMLVGETINFOTIP NMLVGETINFOTIPW
-#define LPNMLVGETINFOTIP LPNMLVGETINFOTIPW
-#else
-#define LVN_GETINFOTIP LVN_GETINFOTIPA
-#define NMLVGETINFOTIP NMLVGETINFOTIPA
-#define LPNMLVGETINFOTIP LPNMLVGETINFOTIPA
-#endif
+#define LVN_GETINFOTIP __MINGW_NAME_AW(LVN_GETINFOTIP)
+#define NMLVGETINFOTIP __MINGW_NAME_AW(NMLVGETINFOTIP)
+#define LPNMLVGETINFOTIP __MINGW_NAME_AW(LPNMLVGETINFOTIP)
 
   typedef struct tagNMLVSCROLL {
     NMHDR hdr;
@@ -3269,11 +2990,8 @@ extern "C" {
 
 #define WC_TREEVIEWA "SysTreeView32"
 #define WC_TREEVIEWW L"SysTreeView32"
-#ifdef UNICODE
-#define WC_TREEVIEW WC_TREEVIEWW
-#else
-#define WC_TREEVIEW WC_TREEVIEWA
-#endif
+
+#define WC_TREEVIEW __MINGW_NAME_AW(WC_TREEVIEW)
 
 #define TVS_HASBUTTONS 0x1
 #define TVS_HASLINES 0x2
@@ -3301,7 +3019,13 @@ extern "C" {
 #define TVIF_HANDLE 0x10
 #define TVIF_SELECTEDIMAGE 0x20
 #define TVIF_CHILDREN 0x40
+#if(_WIN32_IE >= 0x0400)
 #define TVIF_INTEGRAL 0x80
+#endif
+#if(_WIN32_IE >= 0x0600)
+#define TVIF_STATEEX 0x100
+#endif
+#define TVIF_EXPANDEDIMAGE 0x200
 #define TVIS_SELECTED 0x2
 #define TVIS_CUT 0x4
 #define TVIS_DROPHILITED 0x8
@@ -3360,7 +3084,10 @@ extern "C" {
     int cChildren;
     LPARAM lParam;
     int iIntegral;
-  } TVITEMEXA,*LPTVITEMEXA;
+    UINT uStateEx;        /* _WIN32_IE >= 0x600 */
+    HWND hwnd;            /* _WIN32_IE >= 0x600 */
+    int iExpandedImage;   /* _WIN32_IE >= 0x600 */
+  } TVITEMEXA, *LPTVITEMEXA;
 
   typedef struct tagTVITEMEXW {
     UINT mask;
@@ -3374,22 +3101,16 @@ extern "C" {
     int cChildren;
     LPARAM lParam;
     int iIntegral;
-  } TVITEMEXW,*LPTVITEMEXW;
-#ifdef UNICODE
-  typedef TVITEMEXW TVITEMEX;
-  typedef LPTVITEMEXW LPTVITEMEX;
-#else
-  typedef TVITEMEXA TVITEMEX;
-  typedef LPTVITEMEXA LPTVITEMEX;
-#endif
+    UINT uStateEx;        /* _WIN32_IE >= 0x600 */
+    HWND hwnd;            /* _WIN32_IE >= 0x600 */
+    int iExpandedImage;   /* _WIN32_IE >= 0x600 */
+  } TVITEMEXW, *LPTVITEMEXW;
 
-#ifdef UNICODE
-#define TVITEM TVITEMW
-#define LPTVITEM LPTVITEMW
-#else
-#define TVITEM TVITEMA
-#define LPTVITEM LPTVITEMA
-#endif
+  __MINGW_TYPEDEF_AW(TVITEMEX)
+  __MINGW_TYPEDEF_AW(LPTVITEMEX)
+
+#define TVITEM __MINGW_NAME_AW(TVITEM)
+#define LPTVITEM __MINGW_NAME_AW(LPTVITEM)
 
 #define TVI_ROOT ((HTREEITEM)(ULONG_PTR)-0x10000)
 #define TVI_FIRST ((HTREEITEM)(ULONG_PTR)-0xffff)
@@ -3409,7 +3130,7 @@ extern "C" {
   typedef struct tagTVINSERTSTRUCTA {
     HTREEITEM hParent;
     HTREEITEM hInsertAfter;
-    __MINGW_EXTENSION union {
+    __C89_NAMELESS union {
       TVITEMEXA itemex;
       TV_ITEMA item;
     } DUMMYUNIONNAME;
@@ -3418,29 +3139,22 @@ extern "C" {
   typedef struct tagTVINSERTSTRUCTW {
     HTREEITEM hParent;
     HTREEITEM hInsertAfter;
-    __MINGW_EXTENSION union {
+    __C89_NAMELESS union {
       TVITEMEXW itemex;
       TV_ITEMW item;
     } DUMMYUNIONNAME;
   } TVINSERTSTRUCTW,*LPTVINSERTSTRUCTW;
 
-#ifdef UNICODE
-#define TVINSERTSTRUCT TVINSERTSTRUCTW
-#define LPTVINSERTSTRUCT LPTVINSERTSTRUCTW
-#define TVINSERTSTRUCT_V1_SIZE TVINSERTSTRUCTW_V1_SIZE
-#else
-#define TVINSERTSTRUCT TVINSERTSTRUCTA
-#define LPTVINSERTSTRUCT LPTVINSERTSTRUCTA
-#define TVINSERTSTRUCT_V1_SIZE TVINSERTSTRUCTA_V1_SIZE
-#endif
+
+#define TVINSERTSTRUCT __MINGW_NAME_AW(TVINSERTSTRUCT)
+#define LPTVINSERTSTRUCT __MINGW_NAME_AW(LPTVINSERTSTRUCT)
+
+#define TVINSERTSTRUCT_V1_SIZE __MINGW_NAME_AW_EXT(TVINSERTSTRUCT,_V1_SIZE)
 
 #define TVM_INSERTITEMA (TV_FIRST+0)
 #define TVM_INSERTITEMW (TV_FIRST+50)
-#ifdef UNICODE
-#define TVM_INSERTITEM TVM_INSERTITEMW
-#else
-#define TVM_INSERTITEM TVM_INSERTITEMA
-#endif
+
+#define TVM_INSERTITEM __MINGW_NAME_AW(TVM_INSERTITEM)
 
 #define TreeView_InsertItem(hwnd,lpis) (HTREEITEM)SNDMSG((hwnd),TVM_INSERTITEM,0,(LPARAM)(LPTV_INSERTSTRUCT)(lpis))
 
@@ -3518,32 +3232,21 @@ extern "C" {
 #define TVM_GETITEMA (TV_FIRST+12)
 #define TVM_GETITEMW (TV_FIRST+62)
 
-#ifdef UNICODE
-#define TVM_GETITEM TVM_GETITEMW
-#else
-#define TVM_GETITEM TVM_GETITEMA
-#endif
+#define TVM_GETITEM __MINGW_NAME_AW(TVM_GETITEM)
 
 #define TreeView_GetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),TVM_GETITEM,0,(LPARAM)(TV_ITEM *)(pitem))
 
 #define TVM_SETITEMA (TV_FIRST+13)
 #define TVM_SETITEMW (TV_FIRST+63)
 
-#ifdef UNICODE
-#define TVM_SETITEM TVM_SETITEMW
-#else
-#define TVM_SETITEM TVM_SETITEMA
-#endif
+#define TVM_SETITEM __MINGW_NAME_AW(TVM_SETITEM)
 
 #define TreeView_SetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),TVM_SETITEM,0,(LPARAM)(const TV_ITEM *)(pitem))
 
 #define TVM_EDITLABELA (TV_FIRST+14)
 #define TVM_EDITLABELW (TV_FIRST+65)
-#ifdef UNICODE
-#define TVM_EDITLABEL TVM_EDITLABELW
-#else
-#define TVM_EDITLABEL TVM_EDITLABELA
-#endif
+
+#define TVM_EDITLABEL __MINGW_NAME_AW(TVM_EDITLABEL)
 
 #define TreeView_EditLabel(hwnd,hitem) (HWND)SNDMSG((hwnd),TVM_EDITLABEL,0,(LPARAM)(HTREEITEM)(hitem))
 
@@ -3597,11 +3300,7 @@ extern "C" {
 #define TVM_GETISEARCHSTRINGA (TV_FIRST+23)
 #define TVM_GETISEARCHSTRINGW (TV_FIRST+64)
 
-#ifdef UNICODE
-#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGW
-#else
-#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGA
-#endif
+#define TVM_GETISEARCHSTRING __MINGW_NAME_AW(TVM_GETISEARCHSTRING)
 
 #define TVM_SETTOOLTIPS (TV_FIRST+24)
 #define TreeView_SetToolTips(hwnd,hwndTT) (HWND)SNDMSG((hwnd),TVM_SETTOOLTIPS,(WPARAM)(hwndTT),0)
@@ -3687,13 +3386,8 @@ extern "C" {
     POINT ptDrag;
   } NMTREEVIEWW,*LPNMTREEVIEWW;
 
-#ifdef UNICODE
-#define NMTREEVIEW NMTREEVIEWW
-#define LPNMTREEVIEW LPNMTREEVIEWW
-#else
-#define NMTREEVIEW NMTREEVIEWA
-#define LPNMTREEVIEW LPNMTREEVIEWA
-#endif
+#define NMTREEVIEW __MINGW_NAME_AW(NMTREEVIEW)
+#define LPNMTREEVIEW __MINGW_NAME_AW(LPNMTREEVIEW)
 
 #define TVN_SELCHANGINGA (TVN_FIRST-1)
 #define TVN_SELCHANGINGW (TVN_FIRST-50)
@@ -3725,13 +3419,8 @@ extern "C" {
     TVITEMW item;
   } NMTVDISPINFOW,*LPNMTVDISPINFOW;
 
-#ifdef UNICODE
-#define NMTVDISPINFO NMTVDISPINFOW
-#define LPNMTVDISPINFO LPNMTVDISPINFOW
-#else
-#define NMTVDISPINFO NMTVDISPINFOA
-#define LPNMTVDISPINFO LPNMTVDISPINFOA
-#endif
+#define NMTVDISPINFO __MINGW_NAME_AW(NMTVDISPINFO)
+#define LPNMTVDISPINFO __MINGW_NAME_AW(LPNMTVDISPINFO)
 
 #if (_WIN32_IE >= 0x0600)
 
@@ -3745,13 +3434,8 @@ typedef struct tagTVDISPINFOEXW {
     TVITEMEXW item;
 } NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW;
 
-#ifdef UNICODE
-#define NMTVDISPINFOEX   NMTVDISPINFOEXW
-#define LPNMTVDISPINFOEX LPNMTVDISPINFOEXW
-#else
-#define NMTVDISPINFOEX   NMTVDISPINFOEXA
-#define LPNMTVDISPINFOEX LPNMTVDISPINFOEXA
-#endif /* UNICODE */
+#define NMTVDISPINFOEX   __MINGW_NAME_AW(NMTVDISPINFOEX)
+#define LPNMTVDISPINFOEX __MINGW_NAME_AW(LPNMTVDISPINFOEX)
 
 #define TV_DISPINFOEXA NMTVDISPINFOEXA
 #define TV_DISPINFOEXW NMTVDISPINFOEXW
@@ -3794,31 +3478,17 @@ typedef struct tagTVDISPINFOEXW {
 
 #include <poppack.h>
 
-#ifdef UNICODE
-#define TVN_SELCHANGING TVN_SELCHANGINGW
-#define TVN_SELCHANGED TVN_SELCHANGEDW
-#define TVN_GETDISPINFO TVN_GETDISPINFOW
-#define TVN_SETDISPINFO TVN_SETDISPINFOW
-#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGW
-#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDW
-#define TVN_BEGINDRAG TVN_BEGINDRAGW
-#define TVN_BEGINRDRAG TVN_BEGINRDRAGW
-#define TVN_DELETEITEM TVN_DELETEITEMW
-#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW
-#define TVN_ENDLABELEDIT TVN_ENDLABELEDITW
-#else
-#define TVN_SELCHANGING TVN_SELCHANGINGA
-#define TVN_SELCHANGED TVN_SELCHANGEDA
-#define TVN_GETDISPINFO TVN_GETDISPINFOA
-#define TVN_SETDISPINFO TVN_SETDISPINFOA
-#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGA
-#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDA
-#define TVN_BEGINDRAG TVN_BEGINDRAGA
-#define TVN_BEGINRDRAG TVN_BEGINRDRAGA
-#define TVN_DELETEITEM TVN_DELETEITEMA
-#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITA
-#define TVN_ENDLABELEDIT TVN_ENDLABELEDITA
-#endif
+#define TVN_SELCHANGING __MINGW_NAME_AW(TVN_SELCHANGING)
+#define TVN_SELCHANGED __MINGW_NAME_AW(TVN_SELCHANGED)
+#define TVN_GETDISPINFO __MINGW_NAME_AW(TVN_GETDISPINFO)
+#define TVN_SETDISPINFO __MINGW_NAME_AW(TVN_SETDISPINFO)
+#define TVN_ITEMEXPANDING __MINGW_NAME_AW(TVN_ITEMEXPANDING)
+#define TVN_ITEMEXPANDED __MINGW_NAME_AW(TVN_ITEMEXPANDED)
+#define TVN_BEGINDRAG __MINGW_NAME_AW(TVN_BEGINDRAG)
+#define TVN_BEGINRDRAG __MINGW_NAME_AW(TVN_BEGINRDRAG)
+#define TVN_DELETEITEM __MINGW_NAME_AW(TVN_DELETEITEM)
+#define TVN_BEGINLABELEDIT __MINGW_NAME_AW(TVN_BEGINLABELEDIT)
+#define TVN_ENDLABELEDIT __MINGW_NAME_AW(TVN_ENDLABELEDIT)
 
 #define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW,clrTextBk)
 
@@ -3845,15 +3515,9 @@ typedef struct tagTVDISPINFOEXW {
     LPARAM lParam;
   } NMTVGETINFOTIPW,*LPNMTVGETINFOTIPW;
 
-#ifdef UNICODE
-#define TVN_GETINFOTIP TVN_GETINFOTIPW
-#define NMTVGETINFOTIP NMTVGETINFOTIPW
-#define LPNMTVGETINFOTIP LPNMTVGETINFOTIPW
-#else
-#define TVN_GETINFOTIP TVN_GETINFOTIPA
-#define NMTVGETINFOTIP NMTVGETINFOTIPA
-#define LPNMTVGETINFOTIP LPNMTVGETINFOTIPA
-#endif
+#define TVN_GETINFOTIP __MINGW_NAME_AW(TVN_GETINFOTIP)
+#define NMTVGETINFOTIP __MINGW_NAME_AW(NMTVGETINFOTIP)
+#define LPNMTVGETINFOTIP __MINGW_NAME_AW(LPNMTVGETINFOTIP)
 
 #define TVCDRF_NOIMAGES 0x10000
 #endif
@@ -3863,11 +3527,7 @@ typedef struct tagTVDISPINFOEXW {
 #define WC_COMBOBOXEXW L"ComboBoxEx32"
 #define WC_COMBOBOXEXA "ComboBoxEx32"
 
-#ifdef UNICODE
-#define WC_COMBOBOXEX WC_COMBOBOXEXW
-#else
-#define WC_COMBOBOXEX WC_COMBOBOXEXA
-#endif
+#define WC_COMBOBOXEX __MINGW_NAME_AW(WC_COMBOBOXEX)
 
 #define CBEIF_TEXT 0x1
 #define CBEIF_IMAGE 0x2
@@ -3905,15 +3565,9 @@ typedef struct tagTVDISPINFOEXW {
   } COMBOBOXEXITEMW,*PCOMBOBOXEXITEMW;
   typedef COMBOBOXEXITEMW CONST *PCCOMBOEXITEMW;
 
-#ifdef UNICODE
-#define COMBOBOXEXITEM COMBOBOXEXITEMW
-#define PCOMBOBOXEXITEM PCOMBOBOXEXITEMW
-#define PCCOMBOBOXEXITEM PCCOMBOBOXEXITEMW
-#else
-#define COMBOBOXEXITEM COMBOBOXEXITEMA
-#define PCOMBOBOXEXITEM PCOMBOBOXEXITEMA
-#define PCCOMBOBOXEXITEM PCCOMBOBOXEXITEMA
-#endif
+#define COMBOBOXEXITEM __MINGW_NAME_AW(COMBOBOXEXITEM)
+#define PCOMBOBOXEXITEM __MINGW_NAME_AW(PCOMBOBOXEXITEM)
+#define PCCOMBOBOXEXITEM __MINGW_NAME_AW(PCCOMBOBOXEXITEM)
 
 #define CBEM_INSERTITEMA (WM_USER+1)
 #define CBEM_SETIMAGELIST (WM_USER+2)
@@ -3934,15 +3588,9 @@ typedef struct tagTVDISPINFOEXW {
 #define CBEM_SETITEMW (WM_USER+12)
 #define CBEM_GETITEMW (WM_USER+13)
 
-#ifdef UNICODE
-#define CBEM_INSERTITEM CBEM_INSERTITEMW
-#define CBEM_SETITEM CBEM_SETITEMW
-#define CBEM_GETITEM CBEM_GETITEMW
-#else
-#define CBEM_INSERTITEM CBEM_INSERTITEMA
-#define CBEM_SETITEM CBEM_SETITEMA
-#define CBEM_GETITEM CBEM_GETITEMA
-#endif
+#define CBEM_INSERTITEM __MINGW_NAME_AW(CBEM_INSERTITEM)
+#define CBEM_SETITEM __MINGW_NAME_AW(CBEM_SETITEM)
+#define CBEM_GETITEM __MINGW_NAME_AW(CBEM_GETITEM)
 
 #define CBEM_SETWINDOWTHEME CCM_SETWINDOWTHEME
 
@@ -3962,15 +3610,9 @@ typedef struct tagTVDISPINFOEXW {
     COMBOBOXEXITEMW ceItem;
   } NMCOMBOBOXEXW,*PNMCOMBOBOXEXW;
 
-#ifdef UNICODE
-#define NMCOMBOBOXEX NMCOMBOBOXEXW
-#define PNMCOMBOBOXEX PNMCOMBOBOXEXW
-#define CBEN_GETDISPINFO CBEN_GETDISPINFOW
-#else
-#define NMCOMBOBOXEX NMCOMBOBOXEXA
-#define PNMCOMBOBOXEX PNMCOMBOBOXEXA
-#define CBEN_GETDISPINFO CBEN_GETDISPINFOA
-#endif
+#define NMCOMBOBOXEX __MINGW_NAME_AW(NMCOMBOBOXEX)
+#define PNMCOMBOBOXEX __MINGW_NAME_AW(PNMCOMBOBOXEX)
+#define CBEN_GETDISPINFO __MINGW_NAME_AW(CBEN_GETDISPINFO)
 
 #define CBEN_GETDISPINFOA (CBEN_FIRST - 0)
 #define CBEN_INSERTITEM (CBEN_FIRST - 1)
@@ -3984,17 +3626,9 @@ typedef struct tagTVDISPINFOEXW {
 #define CBEN_DRAGBEGINA (CBEN_FIRST - 8)
 #define CBEN_DRAGBEGINW (CBEN_FIRST - 9)
 
-#ifdef UNICODE
-#define CBEN_DRAGBEGIN CBEN_DRAGBEGINW
-#else
-#define CBEN_DRAGBEGIN CBEN_DRAGBEGINA
-#endif
+#define CBEN_DRAGBEGIN __MINGW_NAME_AW(CBEN_DRAGBEGIN)
 
-#ifdef UNICODE
-#define CBEN_ENDEDIT CBEN_ENDEDITW
-#else
-#define CBEN_ENDEDIT CBEN_ENDEDITA
-#endif
+#define CBEN_ENDEDIT __MINGW_NAME_AW(CBEN_ENDEDIT)
 
 #define CBENF_KILLFOCUS 1
 #define CBENF_RETURN 2
@@ -4015,15 +3649,9 @@ typedef struct tagTVDISPINFOEXW {
     char szText[CBEMAXSTRLEN];
   }NMCBEDRAGBEGINA,*LPNMCBEDRAGBEGINA,*PNMCBEDRAGBEGINA;
 
-#ifdef UNICODE
-#define NMCBEDRAGBEGIN NMCBEDRAGBEGINW
-#define LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINW
-#define PNMCBEDRAGBEGIN PNMCBEDRAGBEGINW
-#else
-#define NMCBEDRAGBEGIN NMCBEDRAGBEGINA
-#define LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINA
-#define PNMCBEDRAGBEGIN PNMCBEDRAGBEGINA
-#endif
+#define NMCBEDRAGBEGIN __MINGW_NAME_AW(NMCBEDRAGBEGIN)
+#define LPNMCBEDRAGBEGIN __MINGW_NAME_AW(LPNMCBEDRAGBEGIN)
+#define PNMCBEDRAGBEGIN __MINGW_NAME_AW(PNMCBEDRAGBEGIN)
 
   typedef struct {
     NMHDR hdr;
@@ -4041,26 +3669,17 @@ typedef struct tagTVDISPINFOEXW {
     int iWhy;
   } NMCBEENDEDITA,*LPNMCBEENDEDITA,*PNMCBEENDEDITA;
 
-#ifdef UNICODE
-#define NMCBEENDEDIT NMCBEENDEDITW
-#define LPNMCBEENDEDIT LPNMCBEENDEDITW
-#define PNMCBEENDEDIT PNMCBEENDEDITW
-#else
-#define NMCBEENDEDIT NMCBEENDEDITA
-#define LPNMCBEENDEDIT LPNMCBEENDEDITA
-#define PNMCBEENDEDIT PNMCBEENDEDITA
-#endif
+#define NMCBEENDEDIT __MINGW_NAME_AW(NMCBEENDEDIT)
+#define LPNMCBEENDEDIT __MINGW_NAME_AW(LPNMCBEENDEDIT)
+#define PNMCBEENDEDIT __MINGW_NAME_AW(PNMCBEENDEDIT)
+
 #endif
 
 #ifndef NOTABCONTROL
 
 #define WC_TABCONTROLA "SysTabControl32"
 #define WC_TABCONTROLW L"SysTabControl32"
-#ifdef UNICODE
-#define WC_TABCONTROL WC_TABCONTROLW
-#else
-#define WC_TABCONTROL WC_TABCONTROLA
-#endif
+#define WC_TABCONTROL __MINGW_NAME_AW(WC_TABCONTROL)
 
 #define TCS_SCROLLOPPOSITE 0x1
 #define TCS_BOTTOM 0x2
@@ -4126,13 +3745,8 @@ typedef struct tagTVDISPINFOEXW {
     int iImage;
   } TCITEMHEADERW,*LPTCITEMHEADERW;
 
-#ifdef UNICODE
-#define TCITEMHEADER TCITEMHEADERW
-#define LPTCITEMHEADER LPTCITEMHEADERW
-#else
-#define TCITEMHEADER TCITEMHEADERA
-#define LPTCITEMHEADER LPTCITEMHEADERA
-#endif
+#define TCITEMHEADER __MINGW_NAME_AW(TCITEMHEADER)
+#define LPTCITEMHEADER __MINGW_NAME_AW(LPTCITEMHEADER)
 
 #define TC_ITEMA TCITEMA
 #define TC_ITEMW TCITEMW
@@ -4158,44 +3772,27 @@ typedef struct tagTVDISPINFOEXW {
     LPARAM lParam;
   } TCITEMW,*LPTCITEMW;
 
-#ifdef UNICODE
-#define TCITEM TCITEMW
-#define LPTCITEM LPTCITEMW
-#else
-#define TCITEM TCITEMA
-#define LPTCITEM LPTCITEMA
-#endif
+#define TCITEM __MINGW_NAME_AW(TCITEM)
+#define LPTCITEM __MINGW_NAME_AW(LPTCITEM)
 
 #define TCM_GETITEMA (TCM_FIRST+5)
 #define TCM_GETITEMW (TCM_FIRST+60)
 
-#ifdef UNICODE
-#define TCM_GETITEM TCM_GETITEMW
-#else
-#define TCM_GETITEM TCM_GETITEMA
-#endif
+#define TCM_GETITEM __MINGW_NAME_AW(TCM_GETITEM)
 
 #define TabCtrl_GetItem(hwnd,iItem,pitem) (WINBOOL)SNDMSG((hwnd),TCM_GETITEM,(WPARAM)(int)(iItem),(LPARAM)(TC_ITEM *)(pitem))
 
 #define TCM_SETITEMA (TCM_FIRST+6)
 #define TCM_SETITEMW (TCM_FIRST+61)
 
-#ifdef UNICODE
-#define TCM_SETITEM TCM_SETITEMW
-#else
-#define TCM_SETITEM TCM_SETITEMA
-#endif
+#define TCM_SETITEM __MINGW_NAME_AW(TCM_SETITEM)
 
 #define TabCtrl_SetItem(hwnd,iItem,pitem) (WINBOOL)SNDMSG((hwnd),TCM_SETITEM,(WPARAM)(int)(iItem),(LPARAM)(TC_ITEM *)(pitem))
 
 #define TCM_INSERTITEMA (TCM_FIRST+7)
 #define TCM_INSERTITEMW (TCM_FIRST+62)
 
-#ifdef UNICODE
-#define TCM_INSERTITEM TCM_INSERTITEMW
-#else
-#define TCM_INSERTITEM TCM_INSERTITEMA
-#endif
+#define TCM_INSERTITEM __MINGW_NAME_AW(TCM_INSERTITEM)
 
 #define TabCtrl_InsertItem(hwnd,iItem,pitem) (int)SNDMSG((hwnd),TCM_INSERTITEM,(WPARAM)(int)(iItem),(LPARAM)(const TC_ITEM *)(pitem))
 
@@ -4288,11 +3885,8 @@ typedef struct tagTVDISPINFOEXW {
 
 #define ANIMATE_CLASSW L"SysAnimate32"
 #define ANIMATE_CLASSA "SysAnimate32"
-#ifdef UNICODE
-#define ANIMATE_CLASS ANIMATE_CLASSW
-#else
-#define ANIMATE_CLASS ANIMATE_CLASSA
-#endif
+
+#define ANIMATE_CLASS __MINGW_NAME_AW(ANIMATE_CLASS)
 
 #define ACS_CENTER 0x1
 #define ACS_TRANSPARENT 0x2
@@ -4301,11 +3895,8 @@ typedef struct tagTVDISPINFOEXW {
 
 #define ACM_OPENA (WM_USER+100)
 #define ACM_OPENW (WM_USER+103)
-#ifdef UNICODE
-#define ACM_OPEN ACM_OPENW
-#else
-#define ACM_OPEN ACM_OPENA
-#endif
+
+#define ACM_OPEN __MINGW_NAME_AW(ACM_OPEN)
 
 #define ACM_PLAY (WM_USER+101)
 #define ACM_STOP (WM_USER+102)
@@ -4326,11 +3917,8 @@ typedef struct tagTVDISPINFOEXW {
 #ifndef NOMONTHCAL
 #define MONTHCAL_CLASSW L"SysMonthCal32"
 #define MONTHCAL_CLASSA "SysMonthCal32"
-#ifdef UNICODE
-#define MONTHCAL_CLASS MONTHCAL_CLASSW
-#else
-#define MONTHCAL_CLASS MONTHCAL_CLASSA
-#endif
+
+#define MONTHCAL_CLASS __MINGW_NAME_AW(MONTHCAL_CLASS)
 
   typedef DWORD MONTHDAYSTATE,*LPMONTHDAYSTATE;
 
@@ -4373,13 +3961,18 @@ typedef struct tagTVDISPINFOEXW {
 #define MCM_HITTEST (MCM_FIRST+14)
 #define MonthCal_HitTest(hmc,pinfo) SNDMSG(hmc,MCM_HITTEST,0,(LPARAM)(PMCHITTESTINFO)(pinfo))
 
-  typedef struct {
-    UINT cbSize;
-    POINT pt;
-
-    UINT uHit;
-    SYSTEMTIME st;
-  } MCHITTESTINFO,*PMCHITTESTINFO;
+typedef struct {
+  UINT cbSize;
+  POINT pt;
+  UINT uHit;
+  SYSTEMTIME st;
+#if(NTDDI_VERSION >= NTDDI_VISTA)
+  RECT rc;
+  int iOffset;
+  int iRow;
+  int iCol;
+#endif
+} MCHITTESTINFO, *PMCHITTESTINFO;
 
 #define MCHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(MCHITTESTINFO, st)
 
@@ -4423,6 +4016,8 @@ typedef struct tagTVDISPINFOEXW {
 #define MonthCal_SetUnicodeFormat(hwnd,fUnicode) (WINBOOL)SNDMSG((hwnd),MCM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0)
 #define MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT
 #define MonthCal_GetUnicodeFormat(hwnd) (WINBOOL)SNDMSG((hwnd),MCM_GETUNICODEFORMAT,0,0)
+#define MCM_SETCALENDARBORDER (MCM_FIRST + 30)
+#define MCM_GETCALENDARBORDER (MCM_FIRST + 31)
 
   typedef struct tagNMSELCHANGE {
     NMHDR nmhdr;
@@ -4446,11 +4041,12 @@ typedef struct tagTVDISPINFOEXW {
 
 #define MCN_SELECT (MCN_FIRST+4)
 
-#define MCS_DAYSTATE 0x1
-#define MCS_MULTISELECT 0x2
-#define MCS_WEEKNUMBERS 0x4
-#define MCS_NOTODAYCIRCLE 0x8
-#define MCS_NOTODAY 0x10
+#define MCS_DAYSTATE           0x0001
+#define MCS_MULTISELECT        0x0002
+#define MCS_WEEKNUMBERS        0x0004
+#define MCS_NOTODAYCIRCLE      0x0008
+#define MCS_NOTODAY            0x0010
+#define MCS_NOTRAILINGDATES    0x0040
 
 #define GMR_VISIBLE 0
 #define GMR_DAYSTATE 1
@@ -4459,11 +4055,9 @@ typedef struct tagTVDISPINFOEXW {
 #ifndef NODATETIMEPICK
 #define DATETIMEPICK_CLASSW L"SysDateTimePick32"
 #define DATETIMEPICK_CLASSA "SysDateTimePick32"
-#ifdef UNICODE
-#define DATETIMEPICK_CLASS DATETIMEPICK_CLASSW
-#else
-#define DATETIMEPICK_CLASS DATETIMEPICK_CLASSA
-#endif
+
+#define DATETIMEPICK_CLASS __MINGW_NAME_AW(DATETIMEPICK_CLASS)
+
 #define DTM_FIRST 0x1000
 
 #define DTM_GETSYSTEMTIME (DTM_FIRST+1)
@@ -4477,11 +4071,7 @@ typedef struct tagTVDISPINFOEXW {
 #define DTM_SETFORMATA (DTM_FIRST+5)
 #define DTM_SETFORMATW (DTM_FIRST+50)
 
-#ifdef UNICODE
-#define DTM_SETFORMAT DTM_SETFORMATW
-#else
-#define DTM_SETFORMAT DTM_SETFORMATA
-#endif
+#define DTM_SETFORMAT __MINGW_NAME_AW(DTM_SETFORMAT)
 
 #define DateTime_SetFormat(hdp,sz) (WINBOOL)SNDMSG(hdp,DTM_SETFORMAT,0,(LPARAM)(sz))
 
@@ -4528,15 +4118,9 @@ typedef struct tagTVDISPINFOEXW {
     DWORD dwFlags;
   } NMDATETIMESTRINGW,*LPNMDATETIMESTRINGW;
 
-#ifdef UNICODE
-#define DTN_USERSTRING DTN_USERSTRINGW
-#define NMDATETIMESTRING NMDATETIMESTRINGW
-#define LPNMDATETIMESTRING LPNMDATETIMESTRINGW
-#else
-#define DTN_USERSTRING DTN_USERSTRINGA
-#define NMDATETIMESTRING NMDATETIMESTRINGA
-#define LPNMDATETIMESTRING LPNMDATETIMESTRINGA
-#endif
+#define DTN_USERSTRING __MINGW_NAME_AW(DTN_USERSTRING)
+#define NMDATETIMESTRING __MINGW_NAME_AW(NMDATETIMESTRING)
+#define LPNMDATETIMESTRING __MINGW_NAME_AW(LPNMDATETIMESTRING)
 
 #define DTN_WMKEYDOWNA (DTN_FIRST+3)
 #define DTN_WMKEYDOWNW (DTN_FIRST+16)
@@ -4554,15 +4138,9 @@ typedef struct tagTVDISPINFOEXW {
     SYSTEMTIME st;
   } NMDATETIMEWMKEYDOWNW,*LPNMDATETIMEWMKEYDOWNW;
 
-#ifdef UNICODE
-#define DTN_WMKEYDOWN DTN_WMKEYDOWNW
-#define NMDATETIMEWMKEYDOWN NMDATETIMEWMKEYDOWNW
-#define LPNMDATETIMEWMKEYDOWN LPNMDATETIMEWMKEYDOWNW
-#else
-#define DTN_WMKEYDOWN DTN_WMKEYDOWNA
-#define NMDATETIMEWMKEYDOWN NMDATETIMEWMKEYDOWNA
-#define LPNMDATETIMEWMKEYDOWN LPNMDATETIMEWMKEYDOWNA
-#endif
+#define DTN_WMKEYDOWN __MINGW_NAME_AW(DTN_WMKEYDOWN)
+#define NMDATETIMEWMKEYDOWN __MINGW_NAME_AW(NMDATETIMEWMKEYDOWN)
+#define LPNMDATETIMEWMKEYDOWN __MINGW_NAME_AW(LPNMDATETIMEWMKEYDOWN)
 
 #define DTN_FORMATA (DTN_FIRST+4)
 #define DTN_FORMATW (DTN_FIRST+17)
@@ -4582,15 +4160,9 @@ typedef struct tagTVDISPINFOEXW {
     WCHAR szDisplay[64];
   } NMDATETIMEFORMATW,*LPNMDATETIMEFORMATW;
 
-#ifdef UNICODE
-#define DTN_FORMAT DTN_FORMATW
-#define NMDATETIMEFORMAT NMDATETIMEFORMATW
-#define LPNMDATETIMEFORMAT LPNMDATETIMEFORMATW
-#else
-#define DTN_FORMAT DTN_FORMATA
-#define NMDATETIMEFORMAT NMDATETIMEFORMATA
-#define LPNMDATETIMEFORMAT LPNMDATETIMEFORMATA
-#endif
+#define DTN_FORMAT __MINGW_NAME_AW(DTN_FORMAT)
+#define NMDATETIMEFORMAT __MINGW_NAME_AW(NMDATETIMEFORMAT)
+#define LPNMDATETIMEFORMAT __MINGW_NAME_AW(LPNMDATETIMEFORMAT)
 
 #define DTN_FORMATQUERYA (DTN_FIRST+5)
 #define DTN_FORMATQUERYW (DTN_FIRST+18)
@@ -4606,15 +4178,9 @@ typedef struct tagTVDISPINFOEXW {
     SIZE szMax;
   } NMDATETIMEFORMATQUERYW,*LPNMDATETIMEFORMATQUERYW;
 
-#ifdef UNICODE
-#define DTN_FORMATQUERY DTN_FORMATQUERYW
-#define NMDATETIMEFORMATQUERY NMDATETIMEFORMATQUERYW
-#define LPNMDATETIMEFORMATQUERY LPNMDATETIMEFORMATQUERYW
-#else
-#define DTN_FORMATQUERY DTN_FORMATQUERYA
-#define NMDATETIMEFORMATQUERY NMDATETIMEFORMATQUERYA
-#define LPNMDATETIMEFORMATQUERY LPNMDATETIMEFORMATQUERYA
-#endif
+#define DTN_FORMATQUERY __MINGW_NAME_AW(DTN_FORMATQUERY)
+#define NMDATETIMEFORMATQUERY __MINGW_NAME_AW(NMDATETIMEFORMATQUERY)
+#define LPNMDATETIMEFORMATQUERY __MINGW_NAME_AW(LPNMDATETIMEFORMATQUERY)
 
 #define DTN_DROPDOWN (DTN_FIRST+6)
 #define DTN_CLOSEUP (DTN_FIRST+7)
@@ -4637,11 +4203,7 @@ typedef struct tagTVDISPINFOEXW {
 #define WC_IPADDRESSW L"SysIPAddress32"
 #define WC_IPADDRESSA "SysIPAddress32"
 
-#ifdef UNICODE
-#define WC_IPADDRESS WC_IPADDRESSW
-#else
-#define WC_IPADDRESS WC_IPADDRESSA
-#endif
+#define WC_IPADDRESS __MINGW_NAME_AW(WC_IPADDRESS)
 
 #define IPN_FIELDCHANGED (IPN_FIRST - 0)
   typedef struct tagNMIPADDRESS {
@@ -4664,11 +4226,7 @@ typedef struct tagTVDISPINFOEXW {
 #define WC_PAGESCROLLERW L"SysPager"
 #define WC_PAGESCROLLERA "SysPager"
 
-#ifdef UNICODE
-#define WC_PAGESCROLLER WC_PAGESCROLLERW
-#else
-#define WC_PAGESCROLLER WC_PAGESCROLLERA
-#endif
+#define WC_PAGESCROLLER __MINGW_NAME_AW(WC_PAGESCROLLER)
 
 #define PGS_VERT 0x0
 #define PGS_HORZ 0x1
@@ -4776,11 +4334,7 @@ typedef struct tagTVDISPINFOEXW {
 #define WC_NATIVEFONTCTLW L"NativeFontCtl"
 #define WC_NATIVEFONTCTLA "NativeFontCtl"
 
-#ifdef UNICODE
-#define WC_NATIVEFONTCTL WC_NATIVEFONTCTLW
-#else
-#define WC_NATIVEFONTCTL WC_NATIVEFONTCTLA
-#endif
+#define WC_NATIVEFONTCTL __MINGW_NAME_AW(WC_NATIVEFONTCTL)
 
 #define NFS_EDIT 0x1
 #define NFS_STATIC 0x2
@@ -4793,11 +4347,8 @@ typedef struct tagTVDISPINFOEXW {
 #ifndef NOBUTTON
 #define WC_BUTTONA "Button"
 #define WC_BUTTONW L"Button"
-#ifdef UNICODE
-#define WC_BUTTON WC_BUTTONW
-#else
-#define WC_BUTTON WC_BUTTONA
-#endif
+
+#define WC_BUTTON __MINGW_NAME_AW(WC_BUTTON)
 
 #define BUTTON_IMAGELIST_ALIGN_LEFT 0
 #define BUTTON_IMAGELIST_ALIGN_RIGHT 1
@@ -4839,20 +4390,14 @@ typedef struct tagTVDISPINFOEXW {
 #ifndef NOSTATIC
 #define WC_STATICA "Static"
 #define WC_STATICW L"Static"
-#ifdef UNICODE
-#define WC_STATIC WC_STATICW
-#else
-#define WC_STATIC WC_STATICA
-#endif
+
+#define WC_STATIC __MINGW_NAME_AW(WC_STATIC)
 
 #ifndef NOEDIT
 #define WC_EDITA "Edit"
 #define WC_EDITW L"Edit"
-#ifdef UNICODE
-#define WC_EDIT WC_EDITW
-#else
-#define WC_EDIT WC_EDITA
-#endif
+
+#define WC_EDIT __MINGW_NAME_AW(WC_EDIT)
 
 #define EM_SETCUEBANNER (ECM_FIRST+1)
 #define Edit_SetCueBannerText(hwnd,lpcwText) (WINBOOL)SNDMSG((hwnd),EM_SETCUEBANNER,0,(LPARAM)(lpcwText))
@@ -4874,21 +4419,17 @@ typedef struct tagTVDISPINFOEXW {
 #ifndef NOLISTBOX
 #define WC_LISTBOXA "ListBox"
 #define WC_LISTBOXW L"ListBox"
-#ifdef UNICODE
-#define WC_LISTBOX WC_LISTBOXW
-#else
-#define WC_LISTBOX WC_LISTBOXA
-#endif
+
+#define WC_LISTBOX __MINGW_NAME_AW(WC_LISTBOX)
+
 #endif
 
 #ifndef NOCOMBOBOX
 #define WC_COMBOBOXA "ComboBox"
 #define WC_COMBOBOXW L"ComboBox"
-#ifdef UNICODE
-#define WC_COMBOBOX WC_COMBOBOXW
-#else
-#define WC_COMBOBOX WC_COMBOBOXA
-#endif
+
+#define WC_COMBOBOX __MINGW_NAME_AW(WC_COMBOBOX)
+
 #endif
 
 #define CB_SETMINVISIBLE (CBM_FIRST+1)
@@ -4900,11 +4441,9 @@ typedef struct tagTVDISPINFOEXW {
 #ifndef NOSCROLLBAR
 #define WC_SCROLLBARA "ScrollBar"
 #define WC_SCROLLBARW L"ScrollBar"
-#ifdef UNICODE
-#define WC_SCROLLBAR WC_SCROLLBARW
-#else
-#define WC_SCROLLBAR WC_SCROLLBARA
-#endif
+
+#define WC_SCROLLBAR __MINGW_NAME_AW(WC_SCROLLBAR)
+
 #endif
 
 #define INVALID_LINK_INDEX (-1)
@@ -4996,6 +4535,40 @@ typedef struct tagTVDISPINFOEXW {
   WINCOMMCTRLAPI int WINAPI DPA_Search(HDPA hdpa,void *pFind,int iStart,PFNDPACOMPARE pfnCompare,LPARAM lParam,UINT options);
   WINCOMMCTRLAPI WINBOOL WINAPI Str_SetPtrW(LPWSTR *ppsz,LPCWSTR psz);
 
+typedef struct _DPASTREAMINFO {
+  int iPos;
+  void *pvItem;
+} DPASTREAMINFO;
+
+struct IStream;
+typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, void*);
+typedef void* (CALLBACK *PFNDPAMERGE)(UINT, void*, void*, LPARAM);
+typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*, LPARAM);
+
+  WINCOMMCTRLAPI HRESULT WINAPI DPA_LoadStream(HDPA * phdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData);
+  WINCOMMCTRLAPI HRESULT WINAPI DPA_SaveStream(HDPA hdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData);
+  WINCOMMCTRLAPI WINBOOL WINAPI DPA_Grow(HDPA pdpa, int cp);
+  WINCOMMCTRLAPI int WINAPI DPA_InsertPtr(HDPA hdpa, int i, void *p);
+  WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(HDPA hdpa, INT_PTR i);
+  WINCOMMCTRLAPI WINBOOL WINAPI DPA_SetPtr(HDPA hdpa, int i, void *p);
+  WINCOMMCTRLAPI int WINAPI DPA_GetPtrIndex(HDPA hdpa, const void *p);
+
+#define DPA_GetPtrCount(hdpa) (*(int *)(hdpa))
+#define DPA_SetPtrCount(hdpa, cItems) (*(int *)(hdpa) = (cItems))
+#define DPA_GetPtrPtr(hdpa) (*((void * **)((BYTE *)(hdpa) + sizeof(void *))))
+#define DPA_AppendPtr(hdpa, pitem) DPA_InsertPtr(hdpa, DA_LAST, pitem)
+#define DPA_FastDeleteLastPtr(hdpa) (--*(int *)(hdpa))
+#define DPA_FastGetPtr(hdpa, i) (DPA_GetPtrPtr(hdpa)[i])
+
+#define DPAM_SORTED    1
+#define DPAM_NORMAL    2
+#define DPAM_UNION     4
+#define DPAM_INTERSECT 8
+
+#define DPAMM_MERGE    1
+#define DPAMM_DELETE   2
+#define DPAMM_INSERT   3
+
 #ifndef NOTRACKMOUSEEVENT
 
 #ifndef WM_MOUSEHOVER
@@ -5074,39 +4647,91 @@ typedef struct tagTVDISPINFOEXW {
   LRESULT WINAPI DefSubclassProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
   int WINAPI DrawShadowText(HDC hdc,LPCWSTR pszText,UINT cch,RECT *prc,DWORD dwFlags,COLORREF crText,COLORREF crShadow,int ixOffset,int iyOffset);
 
-typedef struct _DPASTREAMINFO {
-  int iPos;
-  void *pvItem;
-} DPASTREAMINFO;
+#ifndef NOTASKDIALOG
 
-struct IStream;
-typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, void*);
-typedef void* (CALLBACK *PFNDPAMERGE)(UINT, void*, void*, LPARAM);
-typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*, LPARAM);
-
-  WINCOMMCTRLAPI HRESULT WINAPI DPA_LoadStream(HDPA * phdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData);
-  WINCOMMCTRLAPI HRESULT WINAPI DPA_SaveStream(HDPA hdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData);
-  WINCOMMCTRLAPI BOOL WINAPI DPA_Grow(HDPA pdpa, IN int cp);
-  WINCOMMCTRLAPI int WINAPI DPA_InsertPtr(HDPA hdpa, IN int i, void *p);
-  WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(HDPA hdpa, INT_PTR i);
-  WINCOMMCTRLAPI BOOL WINAPI DPA_SetPtr(HDPA hdpa, IN int i, void *p);
-  WINCOMMCTRLAPI int WINAPI DPA_GetPtrIndex(HDPA hdpa, const void *p);
+#include <pshpack1.h>
 
-#define DPA_GetPtrCount(hdpa) (*(int *)(hdpa))
-#define DPA_SetPtrCount(hdpa, cItems) (*(int *)(hdpa) = (cItems))
-#define DPA_GetPtrPtr(hdpa) (*((void * **)((BYTE *)(hdpa) + sizeof(void *))))
-#define DPA_AppendPtr(hdpa, pitem) DPA_InsertPtr(hdpa, DA_LAST, pitem)
-#define DPA_FastDeleteLastPtr(hdpa) (--*(int *)(hdpa))
-#define DPA_FastGetPtr(hdpa, i) (DPA_GetPtrPtr(hdpa)[i])
+enum _TASKDIALOG_FLAGS
+{
+    TDF_ENABLE_HYPERLINKS           = 0x0001,
+    TDF_USE_HICON_MAIN              = 0x0002,
+    TDF_USE_HICON_FOOTER            = 0x0004,
+    TDF_ALLOW_DIALOG_CANCELLATION   = 0x0008,
+    TDF_USE_COMMAND_LINKS           = 0x0010,
+    TDF_USE_COMMAND_LINKS_NO_ICON   = 0x0020,
+    TDF_EXPAND_FOOTER_AREA          = 0x0040,
+    TDF_EXPANDED_BY_DEFAULT         = 0x0080,
+    TDF_VERIFICATION_FLAG_CHECKED   = 0x0100,
+    TDF_SHOW_PROGRESS_BAR           = 0x0200,
+    TDF_SHOW_MARQUEE_PROGRESS_BAR   = 0x0400,
+    TDF_CALLBACK_TIMER              = 0x0800,
+    TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000,
+    TDF_RTL_LAYOUT                  = 0x2000,
+    TDF_NO_DEFAULT_RADIO_BUTTON     = 0x4000,
+    TDF_CAN_BE_MINIMIZED            = 0x8000
+};
+typedef int TASKDIALOG_FLAGS;
+
+enum _TASKDIALOG_COMMON_BUTTON_FLAGS
+{
+    TDCBF_OK_BUTTON     = 0x0001,
+    TDCBF_YES_BUTTON    = 0x0002,
+    TDCBF_NO_BUTTON     = 0x0004,
+    TDCBF_CANCEL_BUTTON = 0x0008,
+    TDCBF_RETRY_BUTTON  = 0x0010,
+    TDCBF_CLOSE_BUTTON  = 0x0020
+};
+typedef int TASKDIALOG_COMMON_BUTTON_FLAGS;
+
+typedef struct _TASKDIALOG_BUTTON
+{
+    int     nButtonID;
+    PCWSTR  pszButtonText;
+} TASKDIALOG_BUTTON;
+
+typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR);
+
+typedef struct _TASKDIALOGCONFIG
+{
+    UINT        cbSize;
+    HWND        hwndParent;
+    HINSTANCE   hInstance;
+    TASKDIALOG_FLAGS    dwFlags;
+    TASKDIALOG_COMMON_BUTTON_FLAGS  dwCommonButtons;
+    PCWSTR      pszWindowTitle;
+    union
+    {
+        HICON   hMainIcon;
+        PCWSTR  pszMainIcon;
+    } DUMMYUNIONNAME;
+    PCWSTR      pszMainInstruction;
+    PCWSTR      pszContent;
+    UINT        cButtons;
+    const TASKDIALOG_BUTTON *pButtons;
+    int         nDefaultButton;
+    UINT        cRadioButtons;
+    const TASKDIALOG_BUTTON *pRadioButtons;
+    int         nDefaultRadioButton;
+    PCWSTR      pszVerificationText;
+    PCWSTR      pszExpandedInformation;
+    PCWSTR      pszExpandedControlText;
+    PCWSTR      pszCollapsedControlText;
+    union
+    {
+        HICON   hFooterIcon;
+        PCWSTR  pszFooterIcon;
+    } DUMMYUNIONNAME2;
+    PCWSTR      pszFooter;
+    PFTASKDIALOGCALLBACK pfCallback;
+    LONG_PTR    lpCallbackData;
+    UINT        cxWidth;
+} TASKDIALOGCONFIG;
+
+HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *);
 
-#define DPAM_SORTED    1
-#define DPAM_NORMAL    2
-#define DPAM_UNION     4
-#define DPAM_INTERSECT 8
+#include <poppack.h>
 
-#define DPAMM_MERGE    1
-#define DPAMM_DELETE   2
-#define DPAMM_INSERT   3
+#endif /* NOTASKDIALOG */
 
 #ifdef __cplusplus
 }