changeset 237:e2affbeb686d

Making tango.sys.win32.Types and dwt.internal.win32.WINTYPES to match common declaration. Make ansi charactars of type ubyte.
author Frank Benoit <benoit@tionex.de>
date Thu, 19 Jun 2008 03:25:36 +0200
parents 9c1bb90eba13
children efe25e7c8a96
files dwt/accessibility/Accessible.d dwt/dnd/HTMLTransfer.d dwt/dnd/ImageTransfer.d dwt/dnd/RTFTransfer.d dwt/dnd/TextTransfer.d dwt/dnd/TreeDropTargetEffect.d dwt/dnd/URLTransfer.d dwt/graphics/Image.d dwt/internal/BidiUtil.d dwt/internal/ole/win32/extras.d dwt/internal/win32/OS.d dwt/internal/win32/WINTYPES.d dwt/widgets/Combo.d dwt/widgets/Composite.d dwt/widgets/Display.d dwt/widgets/Shell.d dwt/widgets/Spinner.d dwt/widgets/Table.d dwt/widgets/Text.d dwt/widgets/Tree.d dwt/widgets/TreeColumn.d dwt/widgets/TreeItem.d
diffstat 22 files changed, 1209 insertions(+), 1400 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/accessibility/Accessible.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/accessibility/Accessible.d	Thu Jun 19 03:25:36 2008 +0200
@@ -1009,9 +1009,9 @@
                 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
                 tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
                 if (OS.COMCTL32_MAJOR >= 6) {
-                    tvItem.hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_MAPACCIDTOHTREEITEM, v.lVal, 0);
+                    tvItem.hItem = cast(HTREEITEM) OS.SendMessage (hwnd, OS.TVM_MAPACCIDTOHTREEITEM, v.lVal, 0);
                 } else {
-                    tvItem.hItem = cast(HANDLE) v.lVal;
+                    tvItem.hItem = cast(HTREEITEM) v.lVal;
                 }
                 auto result = OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, &tvItem);
                 bool checked = (result !is 0) && (((tvItem.state >> 12) & 1) is 0);
--- a/dwt/dnd/HTMLTransfer.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/dnd/HTMLTransfer.d	Thu Jun 19 03:25:36 2008 +0200
@@ -132,7 +132,7 @@
 
     auto wstrz = StrToTCHARz(OS.CP_UTF8,buffer.toString);
     cchMultiByte = OS.WideCharToMultiByte(OS.CP_UTF8, 0, wstrz, -1, null, 0, null, null);
-    auto lpMultiByteStr = cast(char*) OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, cchMultiByte);
+    auto lpMultiByteStr = cast(CHAR*) OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, cchMultiByte);
     OS.WideCharToMultiByte(OS.CP_UTF8, 0, wstrz, -1, lpMultiByteStr, cchMultiByte, null, null);
     transferData.stgmedium = new STGMEDIUM();
     transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
@@ -165,7 +165,7 @@
     auto hMem = stgmedium.unionField;
 
     try {
-        auto lpMultiByteStr = cast(char*) OS.GlobalLock(hMem);
+        auto lpMultiByteStr = cast(CHAR*) OS.GlobalLock(hMem);
         if (lpMultiByteStr is null) return null;
         try {
             /* NOTE: CF_HTML uses UTF-8 encoding.
--- a/dwt/dnd/ImageTransfer.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/dnd/ImageTransfer.d	Thu Jun 19 03:25:36 2008 +0200
@@ -182,8 +182,8 @@
             } else {
                 DIBSECTION dib;
                 OS.GetObject(memDib, DIBSECTION.sizeof, &dib);
-                int biHeight = dib.biHeight;
-                int scanline = dib.biSizeImage / biHeight;
+                int biHeight = dib.dsBmih.biHeight;
+                int scanline = dib.dsBmih.biSizeImage / biHeight;
                 auto pDestBits = pBits;
                 auto pSourceBits = bits + scanline * (biHeight - 1);
                 for (int i = 0; i < biHeight; i++) {
--- a/dwt/dnd/RTFTransfer.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/dnd/RTFTransfer.d	Thu Jun 19 03:25:36 2008 +0200
@@ -89,7 +89,7 @@
         transferData.result = COM.DV_E_STGMEDIUM;
         return;
     }
-    auto lpMultiByteStr = cast(char*)OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, cchMultiByte);
+    auto lpMultiByteStr = cast(CHAR*)OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, cchMultiByte);
     OS.WideCharToMultiByte(codePage, 0, chars, -1, lpMultiByteStr, cchMultiByte, null, null);
     transferData.stgmedium = new STGMEDIUM();
     transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
@@ -121,7 +121,7 @@
     if (transferData.result !is COM.S_OK) return null;
     auto hMem = stgmedium.unionField;
     try {
-        auto lpMultiByteStr = cast(char*) OS.GlobalLock(hMem);
+        auto lpMultiByteStr = cast(CHAR*) OS.GlobalLock(hMem);
         if (lpMultiByteStr is null) return null;
         try {
             int codePage = OS.GetACP();
--- a/dwt/dnd/TextTransfer.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/dnd/TextTransfer.d	Thu Jun 19 03:25:36 2008 +0200
@@ -104,7 +104,7 @@
                 transferData.result = COM.DV_E_STGMEDIUM;
                 return;
             }
-            auto lpMultiByteStr = cast(char*)OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, cchMultiByte);
+            auto lpMultiByteStr = cast(CHAR*)OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, cchMultiByte);
             OS.WideCharToMultiByte(codePage, 0, chars.ptr, -1, lpMultiByteStr, cchMultiByte, null, null);
             transferData.stgmedium = new STGMEDIUM();
             transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
@@ -163,7 +163,7 @@
                 }
             }
             case CF_TEXTID: {
-                auto lpMultiByteStr = cast(char*)OS.GlobalLock(hMem);
+                auto lpMultiByteStr = cast(CHAR*)OS.GlobalLock(hMem);
                 if (lpMultiByteStr is null) return null;
                 try {
                     int codePage = OS.GetACP();
--- a/dwt/dnd/TreeDropTargetEffect.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/dnd/TreeDropTargetEffect.d	Thu Jun 19 03:25:36 2008 +0200
@@ -128,7 +128,7 @@
         auto handle = tree.handle;
         if (dropIndex !is -1) {
             TVITEM tvItem;
-            tvItem.hItem = cast(HANDLE) dropIndex;
+            tvItem.hItem = cast(HTREEITEM) dropIndex;
             tvItem.mask = OS.TVIF_STATE;
             tvItem.stateMask = OS.TVIS_DROPHILITED;
             tvItem.state = 0;
@@ -237,7 +237,7 @@
         }
         if (dropIndex !is -1 && (dropIndex !is cast(int)hItem || (effect & DND.FEEDBACK_SELECT) is 0)) {
             TVITEM tvItem;
-            tvItem.hItem = cast(HANDLE) dropIndex;
+            tvItem.hItem = cast(HTREEITEM) dropIndex;
             tvItem.mask = OS.TVIF_STATE;
             tvItem.stateMask = OS.TVIS_DROPHILITED;
             tvItem.state = 0;
@@ -246,7 +246,7 @@
         }
         if (cast(int)hItem !is -1 && cast(int)hItem !is dropIndex && (effect & DND.FEEDBACK_SELECT) !is 0) {
             TVITEM tvItem;
-            tvItem.hItem = cast(HANDLE) hItem;
+            tvItem.hItem = cast(HTREEITEM) hItem;
             tvItem.mask = OS.TVIF_STATE;
             tvItem.stateMask = OS.TVIS_DROPHILITED;
             tvItem.state = OS.TVIS_DROPHILITED;
--- a/dwt/dnd/URLTransfer.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/dnd/URLTransfer.d	Thu Jun 19 03:25:36 2008 +0200
@@ -90,7 +90,7 @@
         transferData.result = COM.DV_E_STGMEDIUM;
         return;
     }
-    auto lpMultiByteStr = cast(char*)OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, cchMultiByte);
+    auto lpMultiByteStr = cast(CHAR*)OS.GlobalAlloc(OS.GMEM_FIXED | OS.GMEM_ZEROINIT, cchMultiByte);
     OS.WideCharToMultiByte(codePage, 0, chars.ptr, -1, lpMultiByteStr, cchMultiByte, null, null);
     transferData.stgmedium = new STGMEDIUM();
     transferData.stgmedium.tymed = COM.TYMED_HGLOBAL;
@@ -122,7 +122,7 @@
     if (transferData.result !is COM.S_OK) return null;
     auto hMem = stgmedium.unionField;
     try {
-        auto lpMultiByteStr = cast(char*)OS.GlobalLock(hMem);
+        auto lpMultiByteStr = cast(CHAR*)OS.GlobalLock(hMem);
         if (lpMultiByteStr is null) return null;
         try {
             int codePage = OS.GetACP();
--- a/dwt/graphics/Image.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/graphics/Image.d	Thu Jun 19 03:25:36 2008 +0200
@@ -1421,7 +1421,7 @@
             int numColors = 0;
             if (depth <= 8) {
                 if (isDib) {
-                    numColors = dib.biClrUsed;
+                    numColors = dib.dsBmih.biClrUsed;
                 } else {
                     numColors = 1 << depth;
                 }
@@ -1455,7 +1455,7 @@
             /* Find the size of the image and allocate data */
             int imageSize;
             if (isDib) {
-                imageSize = dib.biSizeImage;
+                imageSize = dib.dsBmih.biSizeImage;
             } else {
                 /* Call with null lpBits to get the image size */
                 static if (OS.IsWinCE) DWT.error(DWT.ERROR_NOT_IMPLEMENTED);
@@ -1469,7 +1469,7 @@
                 if (OS.IsWinCE) {
                     if (this.handle !is handle) {
                         /* get image data from the temporary DIB */
-                        OS.MoveMemory(data.ptr, dib.bmBits, imageSize);
+                        OS.MoveMemory(data.ptr, dib.dsBm.bmBits, imageSize);
                     }
                 } else {
                     OS.MoveMemory(data.ptr, bm.bmBits, imageSize);
--- a/dwt/internal/BidiUtil.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/internal/BidiUtil.d	Thu Jun 19 03:25:36 2008 +0200
@@ -193,7 +193,7 @@
     result.nGlyphs = byteCount;
     auto lpOrder = result.lpOrder = cast(uint*)OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount * 4);
     auto lpDx = result.lpDx = cast(int*)OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount * 4);
-    auto lpClass = result.lpClass = cast(char*)OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+    auto lpClass = result.lpClass = cast(CHAR*)OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
     auto lpGlyphs = result.lpGlyphs = cast(wchar*)OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount * 2);
 
     // set required dwFlags
@@ -323,7 +323,7 @@
     result.lStructSize = GCP_RESULTS.sizeof;
     result.nGlyphs = byteCount;
     auto lpOrder = result.lpOrder = cast(uint*) OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount * 4);
-    auto lpClass = result.lpClass = cast(char*) OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
+    auto lpClass = result.lpClass = cast(CHAR*) OS.HeapAlloc(hHeap, OS.HEAP_ZERO_MEMORY, byteCount);
 
     // set required dwFlags, these values will affect how the text gets rendered and
     // ordered
--- a/dwt/internal/ole/win32/extras.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/internal/ole/win32/extras.d	Thu Jun 19 03:25:36 2008 +0200
@@ -214,7 +214,7 @@
 //alias CLSID * LPCLSID;
 alias GUID *REFGUID;
 
-alias IID *REFIID;
+//alias IID *REFIID;
 
 alias CLSID *REFCLSID;
 
@@ -276,4 +276,4 @@
 	READYSTATE_COMPLETE	= 4
 }
 
-alias HANDLE HTASK;
\ No newline at end of file
+alias HANDLE HTASK;
--- a/dwt/internal/win32/OS.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/internal/win32/OS.d	Thu Jun 19 03:25:36 2008 +0200
@@ -223,7 +223,10 @@
         OSVERSIONINFO info;
         info.dwOSVersionInfoSize = OSVERSIONINFO.sizeof;
         if(!OS.GetVersionEx(&info)){
-            MessageBoxA(null, "DWT Unicode version applications can't run in a non-Unicode platform !", "Error", MB_OK|MB_ICONERROR);
+            MessageBoxA(null,
+                    _PCHAR!("DWT Unicode version applications can't run in a non-Unicode platform !"),
+                    _PCHAR!("Error"),
+                    MB_OK|MB_ICONERROR);
             tango.stdc.stdlib.exit(-1);
         }
         //OSVERSIONINFO info = new OSVERSIONINFOW ();
@@ -3521,8 +3524,8 @@
     *cast(HTREEITEM *)prc = hitem;
     return cast(bool) SendMessage( hwnd, TVM_GETITEMRECT, code, cast(int)prc );
 }
-static int strlen( char* ptr ){
-    return tango.stdc.string.strlen( ptr );
+static int strlen( CHAR* ptr ){
+    return tango.stdc.string.strlen( cast(char*)ptr );
 }
 
 static void POINTSTOPOINT( inout POINT pt, int pts) {
@@ -3539,13 +3542,13 @@
 
 // convert UTF-8 to MBCS
 alias StrToMBCS StrToMBCSs;
-public char[] StrToMBCS(char[] sc, uint codepage = 0) {
-    char[] ret = sc;
+public CHAR[] StrToMBCS(char[] sc, uint codepage = 0) {
+    CHAR[] ret = cast(CHAR[]) sc;
     try{
         foreach (char c; sc){
             if (c >= 0x80)
             {
-                char[] result;
+                CHAR[] result;
                 int i;
                 wchar[] ws = .toString16(sc);
                 result.length = OS.WideCharToMultiByte(codepage, 0, ws.ptr, ws.length, null, 0, null, null);
@@ -3556,7 +3559,7 @@
         }
     }catch(Exception e){
         // do nothing
-        ret = "";
+        ret = null;
     }
     return ret;
 }
@@ -3604,11 +3607,11 @@
     return StrToWCHARs(sc, true ).ptr;
 }
 
-public char[] MBCSsToStr(char[] string, uint codepage = 0){
+public char[] MBCSsToStr(CHAR[] string, uint codepage = 0){
     return MBCSzToStr( string.ptr, string.length, codepage);
 }
 
-public char[] MBCSzToStr(char* pString, int _length = -1, uint codepage = 0) {
+public char[] MBCSzToStr(PCHAR pString, int _length = -1, uint codepage = 0) {
     // null terminated string pointer
     if(_length == -1){
         _length = 0;
@@ -3679,7 +3682,7 @@
 } // end of OLE_COM
 
 
-public static wchar[] _mbcszToWs(char* pMBCS, int len, uint codepage = 0)
+public static wchar[] _mbcszToWs(PCHAR pMBCS, int len, uint codepage = 0)
 {
     wchar[] wbuf;
     // Convert MBCS to unicode
--- a/dwt/internal/win32/WINTYPES.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/internal/win32/WINTYPES.d	Thu Jun 19 03:25:36 2008 +0200
@@ -4,39 +4,13 @@
 
 module dwt.internal.win32.WINTYPES;
 
-//public import tango_sys_win32.Types;
-
-
-version(ANSI){
-    alias char  TCHAR;
-}else{
-    alias wchar TCHAR;
-}
-
-
-union LARGE_INTEGER {
-    struct {
-        DWORD LowPart;
-        LONG HighPart;
-    };
-    struct u {
-        DWORD LowPart;
-        LONG HighPart;
-    };
-    LONGLONG QuadPart;
-}
-alias LARGE_INTEGER * PLARGE_INTEGER;
-
-
-///////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////////////
 /*
     adopted form tango
     Author:     Trevor Parscal
 */
 
 /+ Aliases, Types, and Constants +/
-const int NULL = 0;
+const void* NULL = null;
 alias int SCODE;
 alias void VOID;
 alias void* POINTER;
@@ -45,11 +19,11 @@
 alias WINBOOL BOOL;
 alias uint CALTYPE;
 alias uint CALID;
-alias char CCHAR;
-alias char* PCHAR;
+alias ubyte CCHAR;
+alias ubyte* PCHAR;
 alias uint COLORREF;
 alias uint TCOLORREF;
-alias char CHAR;
+alias ubyte CHAR;
 alias ubyte BYTE;
 alias short INT16;
 alias ushort UINT16;
@@ -66,14 +40,14 @@
 alias uint PROPID;
 const BOOL FALSE = 0;
 const BOOL TRUE = -1;
-alias char* PANSICHAR;
+alias ubyte* PANSICHAR;
 alias wchar* PWIDECHAR;
 alias int* PINTEGER;
-alias double LONGLONG;
+alias long LONGLONG;
 alias LONGLONG* PLONGLONG;
-alias double DWORDLONG;
+alias ulong DWORDLONG;
 alias DWORDLONG* PDWORDLONG;
-alias double FLOAT;
+alias float FLOAT;
 alias void* HANDLE;
 alias HANDLE HACCEL;
 alias HANDLE HBITMAP;
@@ -153,7 +127,7 @@
 alias wchar* PCWCH;
 alias wchar* PCWSTR;
 alias DWORD* PDWORD;
-alias double* PFLOAT;
+alias float* PFLOAT;
 alias HANDLE* PHANDLE;
 alias HKEY* PHKEY;
 alias int* PINT;
@@ -181,8 +155,11 @@
 alias DWORD SERVICE_STATUS_HANDLE;
 alias ubyte TBYTE;
 
-// version dependent
-//alias wchar TCHAR;
+version(Win32SansUnicode){
+    alias ubyte  TCHAR;
+}else{
+    alias wchar TCHAR;
+}
 
 alias ubyte BCHAR;
 alias ubyte UCHAR;
@@ -193,27 +170,13 @@
 alias uint WPARAM;
 alias int ACL_INFORMATION_CLASS;
 
-// struct GUID { // size is 16
-// align(1):
-//  DWORD   Data1;
-//  WORD    Data2;
-//  WORD    Data3;
-//  BYTE[8] Data4;
-// }
-
-enum {ASSOCF_INIT_BYEXENAME,
-    ASSOCF_OPEN_BYEXENAME,
-    ASSOCF_INIT_DEFAULTTOSTAR,
-    ASSOCF_INIT_DEFAULTTOFOLDER,
-    ASSOCF_NOUSERSETTINGS,
-    ASSOCF_NOTRUNCATE,
-    ASSOCF_VERIFY,
-    ASSOCF_REMAPRUNDLL,
-    ASSOCF_NOFIXUPS,
-    ASSOCF_IGNOREBASECLASS
-};
-
-alias DWORD ASSOCF;
+alias GUID IID;
+alias IID* REFIID;
+
+// Cast a string literal to a ubyte*=PCHAR
+template _PCHAR( char[] a ){
+    const PCHAR _PCHAR = cast(PCHAR)a.ptr;
+}
 
 enum { AclRevisionInformation = 1, AclSizeInformation,  };
 alias ACL_INFORMATION_CLASS _ACL_INFORMATION_CLASS;
@@ -267,7 +230,7 @@
 alias WINBOOL (*ENUMWINDOWSPROC)(HWND, LPARAM);
 alias WINBOOL (*ENUMWINDOWSTATIONPROC)(LPTSTR, LPARAM);
 alias void (*SENDASYNCPROC)(HWND, UINT, DWORD);
-alias void (*TIMERPROC)(HWND, UINT, UINT);
+alias void (*TIMERPROC)(HWND, UINT, UINT, DWORD);
 alias BOOL(*MONITORENUMPROC)(HMONITOR, HDC, RECT*, LPARAM);
 alias FARPROC GRAYSTRINGPROC;
 alias WINBOOL (*DRAWSTATEPROC)(HDC, LPARAM, WPARAM, int, int);
@@ -296,36 +259,47 @@
 }
 
 const {
- char* SE_CREATE_TOKEN_NAME = ("SeCreateTokenPrivilege");
- char* SE_ASSIGNPRIMARYTOKEN_NAME = ("SeAssignPrimaryTokenPrivilege");
- char* SE_LOCK_MEMORY_NAME = ("SeLockMemoryPrivilege");
- char* SE_INCREASE_QUOTA_NAME = ("SeIncreaseQuotaPrivilege");
- char* SE_UNSOLICITED_INPUT_NAME = ("SeUnsolicitedInputPrivilege");
- char* SE_MACHINE_ACCOUNT_NAME = ("SeMachineAccountPrivilege");
- char* SE_TCB_NAME = ("SeTcbPrivilege");
- char* SE_SECURITY_NAME = ("SeSecurityPrivilege");
- char* SE_TAKE_OWNERSHIP_NAME = ("SeTakeOwnershipPrivilege");
- char* SE_LOAD_DRIVER_NAME = ("SeLoadDriverPrivilege");
- char* SE_SYSTEM_PROFILE_NAME = ("SeSystemProfilePrivilege");
- char* SE_SYSTEMTIME_NAME = ("SeSystemtimePrivilege");
- char* SE_PROF_SINGLE_PROCESS_NAME = ("SeProfileSingleProcessPrivilege");
- char* SE_INC_BASE_PRIORITY_NAME = ("SeIncreaseBasePriorityPrivilege");
- char* SE_CREATE_PAGEFILE_NAME = ("SeCreatePagefilePrivilege");
- char* SE_CREATE_PERMANENT_NAME = ("SeCreatePermanentPrivilege");
- char* SE_BACKUP_NAME = ("SeBackupPrivilege");
- char* SE_RESTORE_NAME = ("SeRestorePrivilege");
- char* SE_SHUTDOWN_NAME = ("SeShutdownPrivilege");
- char* SE_DEBUG_NAME = ("SeDebugPrivilege");
- char* SE_AUDIT_NAME = ("SeAuditPrivilege");
- char* SE_SYSTEM_ENVIRONMENT_NAME = ("SeSystemEnvironmentPrivilege");
- char* SE_CHANGE_NOTIFY_NAME = ("SeChangeNotifyPrivilege");
- char* SE_REMOTE_SHUTDOWN_NAME = ("SeRemoteShutdownPrivilege");
- char* SERVICES_ACTIVE_DATABASEA = ("ServicesActive");
- char* SERVICES_FAILED_DATABASEA = ("ServicesFailed");
- char* SC_GROUP_IDENTIFIERA = ("+");
- char* SERVICES_ACTIVE_DATABASE = (SERVICES_ACTIVE_DATABASEA);
- char* SERVICES_FAILED_DATABASE = (SERVICES_FAILED_DATABASEA);
- char* SC_GROUP_IDENTIFIER = (SC_GROUP_IDENTIFIERA);
+    LPCTSTR SE_CREATE_TOKEN_NAME = ("SeCreateTokenPrivilege");
+    LPCTSTR SE_ASSIGNPRIMARYTOKEN_NAME = ("SeAssignPrimaryTokenPrivilege");
+    LPCTSTR SE_LOCK_MEMORY_NAME = ("SeLockMemoryPrivilege");
+    LPCTSTR SE_INCREASE_QUOTA_NAME = ("SeIncreaseQuotaPrivilege");
+    LPCTSTR SE_UNSOLICITED_INPUT_NAME = ("SeUnsolicitedInputPrivilege");
+    LPCTSTR SE_MACHINE_ACCOUNT_NAME = ("SeMachineAccountPrivilege");
+    LPCTSTR SE_TCB_NAME = ("SeTcbPrivilege");
+    LPCTSTR SE_SECURITY_NAME = ("SeSecurityPrivilege");
+    LPCTSTR SE_TAKE_OWNERSHIP_NAME = ("SeTakeOwnershipPrivilege");
+    LPCTSTR SE_LOAD_DRIVER_NAME = ("SeLoadDriverPrivilege");
+    LPCTSTR SE_SYSTEM_PROFILE_NAME = ("SeSystemProfilePrivilege");
+    LPCTSTR SE_SYSTEMTIME_NAME = ("SeSystemtimePrivilege");
+    LPCTSTR SE_PROF_SINGLE_PROCESS_NAME = ("SeProfileSingleProcessPrivilege");
+    LPCTSTR SE_INC_BASE_PRIORITY_NAME = ("SeIncreaseBasePriorityPrivilege");
+    LPCTSTR SE_CREATE_PAGEFILE_NAME = ("SeCreatePagefilePrivilege");
+    LPCTSTR SE_CREATE_PERMANENT_NAME = ("SeCreatePermanentPrivilege");
+    LPCTSTR SE_BACKUP_NAME = ("SeBackupPrivilege");
+    LPCTSTR SE_RESTORE_NAME = ("SeRestorePrivilege");
+    LPCTSTR SE_SHUTDOWN_NAME = ("SeShutdownPrivilege");
+    LPCTSTR SE_DEBUG_NAME = ("SeDebugPrivilege");
+    LPCTSTR SE_AUDIT_NAME = ("SeAuditPrivilege");
+    LPCTSTR SE_SYSTEM_ENVIRONMENT_NAME = ("SeSystemEnvironmentPrivilege");
+    LPCTSTR SE_CHANGE_NOTIFY_NAME = ("SeChangeNotifyPrivilege");
+    LPCTSTR SE_REMOTE_SHUTDOWN_NAME = ("SeRemoteShutdownPrivilege");
+
+    LPCSTR  SERVICES_ACTIVE_DATABASEA = _PCHAR!("ServicesActive");
+    LPCWSTR SERVICES_ACTIVE_DATABASEW = ("ServicesActive");
+    LPCSTR  SERVICES_FAILED_DATABASEA = _PCHAR!("ServicesFailed");
+    LPCWSTR SERVICES_FAILED_DATABASEW = ("ServicesFailed");
+    LPCSTR  SC_GROUP_IDENTIFIERA = _PCHAR!("+");
+    LPCWSTR SC_GROUP_IDENTIFIERW = ("+");
+    version(Win32SansUnicode){
+        alias SERVICES_ACTIVE_DATABASEA SERVICES_ACTIVE_DATABASE;
+        alias SERVICES_FAILED_DATABASEA SERVICES_FAILED_DATABASE;
+        alias SC_GROUP_IDENTIFIERA SC_GROUP_IDENTIFIER;
+    }
+    else{
+        alias SERVICES_ACTIVE_DATABASEW SERVICES_ACTIVE_DATABASE;
+        alias SERVICES_FAILED_DATABASEW SERVICES_FAILED_DATABASE;
+        alias SC_GROUP_IDENTIFIERW SC_GROUP_IDENTIFIER;
+    }
 }
 
 extern(Windows){
@@ -1306,6 +1280,7 @@
     DIB_RGB_COLORS = (0),
     GENERIC_READ = (0x80000000),
     GENERIC_WRITE = (0x40000000),
+    GENERIC_EXECUTE = (0x20000000),
     FILE_READ_DATA = (0x0001),
     FILE_LIST_DIRECTORY = (0x0001),
     FILE_WRITE_DATA = (0x0002),
@@ -1487,6 +1462,7 @@
     CREATE_DEFAULT_ERROR_MODE = (67108864),
     CREATE_NEW_CONSOLE = (16),
     CREATE_NEW_PROCESS_GROUP = (512),
+    CREATE_NO_WINDOW = (0x8000000),
     CREATE_SEPARATE_WOW_VDM = (2048),
     CREATE_SUSPENDED = (4),
     CREATE_UNICODE_ENVIRONMENT = (1024),
@@ -1862,6 +1838,7 @@
     FILE_MAP_READ = (4),
     FILE_MAP_WRITE = (2),
     FILE_MAP_COPY = (1),
+    FILE_MAP_EXECUTE = (0x20),
     MUTEX_ALL_ACCESS = (0x1f0001),
     MUTEX_MODIFY_STATE = (1),
     SYNCHRONIZE = (0x100000),
@@ -2860,7 +2837,6 @@
     SC_MANAGER_LOCK = (8),
     SC_MANAGER_QUERY_LOCK_STATUS = (16),
     SC_MANAGER_MODIFY_BOOT_CONFIG = (32),
-    HWND_BROADCAST = (0xFFFF),
     TAPE_FORMAT = (0x5),
     TAPE_LOAD = (0),
     TAPE_LOCK = (0x3),
@@ -2900,6 +2876,8 @@
     RDW_UPDATENOW = (256),
     RDW_ALLCHILDREN = (128),
     RDW_NOCHILDREN = (64),
+/*
+   //
     HKEY_CLASSES_ROOT = (0x80000000),
     HKEY_CURRENT_USER = (0x80000001),
     HKEY_LOCAL_MACHINE = (0x80000002),
@@ -2907,6 +2885,7 @@
     HKEY_PERFORMANCE_DATA = (0x80000004),
     HKEY_CURRENT_CONFIG = (0x80000005),
     HKEY_DYN_DATA = (0x80000006),
+*/
     REG_OPTION_VOLATILE = (0x1),
     REG_OPTION_NON_VOLATILE = (0),
     REG_CREATED_NEW_KEY = (0x1),
@@ -3127,10 +3106,6 @@
     EXCEPTION_EXECUTE_HANDLER = (1),
     EXCEPTION_CONTINUE_EXECUTION = -((1)),
     EXCEPTION_CONTINUE_SEARCH = (0),
-    HWND_BOTTOM = (1),
-    HWND_NOTOPMOST = -(2),
-    HWND_TOP = (0),
-    HWND_TOPMOST = -(1),
     SWP_DRAWFRAME = (32),
     SWP_FRAMECHANGED = (32),
     SWP_HIDEWINDOW = (128),
@@ -4115,9 +4090,14 @@
     LVIS_STATEIMAGEMASK = (61440),
 }
 const {
-wchar* LPSTR_TEXTCALLBACKW = cast(LPWSTR)(-(1));
-char* LPSTR_TEXTCALLBACKA = cast(LPSTR)(-(1));
-char* LPSTR_TEXTCALLBACK = (LPSTR_TEXTCALLBACKA);
+    LPWSTR LPSTR_TEXTCALLBACKW = cast(LPWSTR)(-(1));
+    LPSTR  LPSTR_TEXTCALLBACKA = cast(LPSTR)(-(1));
+    version(Win32SansUnicode){
+        alias LPSTR_TEXTCALLBACKA LPSTR_TEXTCALLBACK;
+    }
+    else{
+        alias LPSTR_TEXTCALLBACKW LPSTR_TEXTCALLBACK;
+    }
 }
 enum : DWORD {
     LVIF_TEXT = (1),
@@ -4195,7 +4175,7 @@
 {
 }
 
-alias HANDLE HTREEITEM;
+alias TREEITEM* HTREEITEM;
 alias TREEITEM TTREEITEM;
 alias TREEITEM* PTREEITEM;
 enum : DWORD {
@@ -4593,6 +4573,16 @@
 char* SETRGBSTRING = (SETRGBSTRINGA);
 char* SHAREVISTRING = (SHAREVISTRINGA);
 }
+
+const {
+HWND HWND_DESKTOP = cast(HWND) 0;
+HWND HWND_BOTTOM = cast(HWND) 1;
+HWND HWND_NOTOPMOST = cast(HWND) -2;
+HWND HWND_TOP = cast(HWND) 0;
+HWND HWND_TOPMOST = cast(HWND) -1;
+HWND HWND_BROADCAST = cast(HWND) 0xFFFF;
+}
+
 enum : DWORD {
     CD_LBSELCHANGE = (0),
     CD_LBSELADD = (2),
@@ -4888,7 +4878,6 @@
     PRF_ERASEBKGND = (0x8),
     PRF_NONCLIENT = (0x2),
     PRF_OWNED = (0x20),
-    HWND_DESKTOP = (0),
     SC_CLOSE = (61536),
     SC___FILE__HELP = (61824),
     SC_DEFAULT = (61792),
@@ -6455,17 +6444,17 @@
 alias BLOB TBLOB;
 alias BLOB* PBLOB;
 
-// struct SHITEMID
-// {
-//     USHORT cb;
-//     ubyte[1 + 0] abID;
-// }
-//
-// alias SHITEMID* LPSHITEMID;
-// alias SHITEMID* LPCSHITEMID;
-// alias SHITEMID _SHITEMID;
-// alias SHITEMID TSHITEMID;
-// alias SHITEMID* PSHITEMID;
+struct SHITEMID
+{
+    USHORT cb;
+    ubyte[1 + 0] abID;
+}
+
+alias SHITEMID* LPSHITEMID;
+alias SHITEMID* LPCSHITEMID;
+alias SHITEMID _SHITEMID;
+alias SHITEMID TSHITEMID;
+alias SHITEMID* PSHITEMID;
 
 struct ITEMIDLIST
 {
@@ -6478,22 +6467,37 @@
 alias ITEMIDLIST TITEMIDLIST;
 alias ITEMIDLIST* PITEMIDLIST;
 
-// struct BROWSEINFO
-// {
-//     HWND hwndOwner;
-//     LPCITEMIDLIST pidlRoot;
-//     LPSTR pszDisplayName;
-//     LPCSTR lpszTitle;
-//     UINT ulFlags;
-//     BFFCALLBACK lpfn;
-//     LPARAM lParam;
-//     int iImage;
-// }
-
-// alias BROWSEINFO* LPBROWSEINFO;
-// alias BROWSEINFO _BROWSEINFO;
-// alias BROWSEINFO TBROWSEINFO;
-// alias BROWSEINFO* PBROWSEINFO;
+struct BROWSEINFOA
+{
+    HWND hwndOwner;
+    LPCITEMIDLIST pidlRoot;
+    LPSTR pszDisplayName;
+    LPCSTR lpszTitle;
+    UINT ulFlags;
+    BFFCALLBACK lpfn;
+    LPARAM lParam;
+    int iImage;
+}
+struct BROWSEINFOW
+{
+    HWND hwndOwner;
+    LPCITEMIDLIST pidlRoot;
+    LPWSTR pszDisplayName;
+    LPCWSTR lpszTitle;
+    UINT ulFlags;
+    BFFCALLBACK lpfn;
+    LPARAM lParam;
+    int iImage;
+}
+version( Win32SansUnicode )
+{
+    alias BROWSEINFOA BROWSEINFO;
+}
+else
+{
+    alias BROWSEINFOW BROWSEINFO;
+}
+alias BROWSEINFO* PBROWSEINFO, LPBROWSEINFO;
 
 struct FILETIME
 {
@@ -6611,21 +6615,21 @@
 alias CANDIDATELIST TCANDIDATELIST;
 alias CANDIDATELIST* PCANDIDATELIST;
 
-// struct CREATESTRUCT
-// {
-//     LPVOID lpCreateParams;
-//     HINST hInstance;
-//     HMENU hMenu;
-//     HWND hwndParent;
-//     int cy;
-//     int cx;
-//     int y;
-//     int x;
-//     LONG style;
-//     LPCTSTR lpszName;
-//     LPCTSTR lpszClass;
-//     DWORD dwExStyle;
-// }
+struct CREATESTRUCT
+{
+    LPVOID lpCreateParams;
+    HINST hInstance;
+    HMENU hMenu;
+    HWND hwndParent;
+    int cy;
+    int cx;
+    int y;
+    int x;
+    LONG style;
+    LPCTSTR lpszName;
+    LPCTSTR lpszClass;
+    DWORD dwExStyle;
+}
 
 alias CREATESTRUCT* LPCREATESTRUCT;
 alias CREATESTRUCT TAGCREATESTRUCT;
@@ -6710,16 +6714,16 @@
 alias CHARSET TCHARSET;
 alias CHARSET* PCHARSET;
 
-// struct FONTSIGNATURE
-// {
-//     DWORD[1 + 3] fsUsb;
-//     DWORD[1 + 1] fsCsb;
-// }
-//
-// alias FONTSIGNATURE* LPFONTSIGNATURE;
-// alias FONTSIGNATURE TAGFONTSIGNATURE;
-// alias FONTSIGNATURE TFONTSIGNATURE;
-// alias FONTSIGNATURE* PFONTSIGNATURE;
+struct FONTSIGNATURE
+{
+    DWORD[1 + 3] fsUsb;
+    DWORD[1 + 1] fsCsb;
+}
+
+alias FONTSIGNATURE* LPFONTSIGNATURE;
+alias FONTSIGNATURE TAGFONTSIGNATURE;
+alias FONTSIGNATURE TFONTSIGNATURE;
+alias FONTSIGNATURE* PFONTSIGNATURE;
 
 struct CHARSETINFO
 {
@@ -6732,79 +6736,96 @@
 alias CHARSETINFO TCHARSETINFO;
 alias CHARSETINFO* PCHARSETINFO;
 
-// struct TCHOOSECOLOR
-// {
-//     DWORD lStructSize;
-//     HWND hwndOwner;
-//     HWND hInstance;
-//     COLORREF rgbResult;
-//     COLORREF* lpCustColors;
-//     DWORD Flags;
-//     LPARAM lCustData;
-//     LPCCHOOKPROC lpfnHook;
-//     LPCTSTR lpTemplateName;
-// }
-//
-// alias TCHOOSECOLOR* LPCHOOSECOLOR;
-// alias TCHOOSECOLOR* PCHOOSECOLOR;
-
-// struct LOGFONTA
-// {
-//     LONG lfHeight;
-//     LONG lfWidth;
-//     LONG lfEscapement;
-//     LONG lfOrientation;
-//     LONG lfWeight;
-//     ubyte lfItalic;
-//     ubyte lfUnderline;
-//     ubyte lfStrikeOut;
-//     ubyte lfCharSet;
-//     ubyte lfOutPrecision;
-//     ubyte lfClipPrecision;
-//     ubyte lfQuality;
-//     ubyte lfPitchAndFamily;
-//     TCHAR[1 + LF_FACESIZE-1] lfFaceName;
-// }
-//
-// alias LOGFONTA  TLOGFONTA;
-// alias LOGFONTA* PLOGFONTA;
-// alias LOGFONTA* LPLOGFONTA;
-//
-// struct LOGFONTW
-// {
-//     LONG lfHeight;
-//     LONG lfWidth;
-//     LONG lfEscapement;
-//     LONG lfOrientation;
-//     LONG lfWeight;
-//     ubyte lfItalic;
-//     ubyte lfUnderline;
-//     ubyte lfStrikeOut;
-//     ubyte lfCharSet;
-//     ubyte lfOutPrecision;
-//     ubyte lfClipPrecision;
-//     ubyte lfQuality;
-//     ubyte lfPitchAndFamily;
-//     WCHAR lfFaceName[LF_FACESIZE];
-// };
-//
-// alias LOGFONTW  TLOGFONTW;
-// alias LOGFONTW* LPLOGFONTW;
-// alias LOGFONTW* PLOGFONTW;
-//
-// version( ANSI ){
-//     alias LOGFONTA  LOGFONT;
-//     alias LOGFONTA  TLOGFONT;
-//     alias LOGFONTA* PLOGFONT;
-//     alias LOGFONTA* LPLOGFONT;
-// }
-// else{
-//     alias LOGFONTW  LOGFONT;
-//     alias LOGFONTW  TLOGFONT;
-//     alias LOGFONTW* PLOGFONT;
-//     alias LOGFONTW* LPLOGFONT;
-// }
-
+struct CHOOSECOLORA {
+    DWORD        lStructSize;
+    HWND         hwndOwner;
+    HWND         hInstance;
+    COLORREF     rgbResult;
+    COLORREF*    lpCustColors;
+    DWORD        Flags;
+    LPARAM       lCustData;
+    LPCCHOOKPROC lpfnHook;
+    LPCSTR      lpTemplateName;
+}
+alias CHOOSECOLORA* PCHOOSECOLORA, LPCHOOSECOLORA;
+struct CHOOSECOLORW {
+    DWORD        lStructSize;
+    HWND         hwndOwner;
+    HWND         hInstance;
+    COLORREF     rgbResult;
+    COLORREF*    lpCustColors;
+    DWORD        Flags;
+    LPARAM       lCustData;
+    LPCCHOOKPROC lpfnHook;
+    LPCWSTR      lpTemplateName;
+}
+alias CHOOSECOLORW* PCHOOSECOLORW, LPCHOOSECOLORW;
+version(Win32SansUnicode)
+{
+    alias CHOOSECOLORA CHOOSECOLOR;
+}
+else
+{
+    alias CHOOSECOLORW CHOOSECOLOR;
+}
+alias CHOOSECOLOR* PCHOOSECOLOR, LPCHOOSECOLOR;
+
+struct LOGFONTA
+{
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    ubyte lfItalic;
+    ubyte lfUnderline;
+    ubyte lfStrikeOut;
+    ubyte lfCharSet;
+    ubyte lfOutPrecision;
+    ubyte lfClipPrecision;
+    ubyte lfQuality;
+    ubyte lfPitchAndFamily;
+    ubyte[1 + LF_FACESIZE-1] lfFaceName;
+}
+
+alias LOGFONTA  TLOGFONTA;
+alias LOGFONTA* PLOGFONTA;
+alias LOGFONTA* LPLOGFONTA;
+
+struct LOGFONTW
+{
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    ubyte lfItalic;
+    ubyte lfUnderline;
+    ubyte lfStrikeOut;
+    ubyte lfCharSet;
+    ubyte lfOutPrecision;
+    ubyte lfClipPrecision;
+    ubyte lfQuality;
+    ubyte lfPitchAndFamily;
+    WCHAR lfFaceName[LF_FACESIZE];
+};
+
+alias LOGFONTW  TLOGFONTW;
+alias LOGFONTW* LPLOGFONTW;
+alias LOGFONTW* PLOGFONTW;
+
+version( Win32SansUnicode ){
+    alias LOGFONTA  LOGFONT;
+    alias LOGFONTA  TLOGFONT;
+    alias LOGFONTA* PLOGFONT;
+    alias LOGFONTA* LPLOGFONT;
+}
+else{
+    alias LOGFONTW  LOGFONT;
+    alias LOGFONTW  TLOGFONT;
+    alias LOGFONTW* PLOGFONT;
+    alias LOGFONTW* LPLOGFONT;
+}
 
 struct TCHOOSEFONT
 {
@@ -7820,51 +7841,51 @@
 alias DEVMODE TDEVMODE;
 alias DEVMODE* PDEVMODE;
 
-// struct DEVNAMES
-// {
-//     ushort wDriverOffset;
-//     ushort wDeviceOffset;
-//     ushort wOutputOffset;
-//     ushort wDefault;
-// }
-
-// alias DEVNAMES* LPDEVNAMES;
-// alias DEVNAMES TAGDEVNAMES;
-// alias DEVNAMES TDEVNAMES;
-// alias DEVNAMES* PDEVNAMES;
-
-// struct DIBSECTION
-// {
-//     BITMAP dsBm;
-//     BITMAPINFOHEADER dsBmih;
-//     DWORD[1 + 2] dsBitfields;
-//     HANDLE dshSection;
-//     DWORD dsOffset;
-// }
-//
-// alias DIBSECTION TAGDIBSECTION;
-// alias DIBSECTION TDIBSECTION;
-// alias DIBSECTION* PDIBSECTION;
-
-// union LARGE_INTEGER
-// {
-//     struct
-//     {
-//         DWORD LowPart;
-//         LONG HighPart;
-//     };
-//     struct u
-//     {
-//         DWORD LowPart;
-//         LONG HighPart;
-//     };
-//     LONGLONG QuadPart;
-// };
-//
-// alias LARGE_INTEGER* PLARGE_INTEGER;
-// alias LARGE_INTEGER _LARGE_INTEGER;
-// alias LARGE_INTEGER TLARGEINTEGER;
-// alias LARGE_INTEGER* PLARGEINTEGER;
+struct DEVNAMES
+{
+    ushort wDriverOffset;
+    ushort wDeviceOffset;
+    ushort wOutputOffset;
+    ushort wDefault;
+}
+
+alias DEVNAMES* LPDEVNAMES;
+alias DEVNAMES TAGDEVNAMES;
+alias DEVNAMES TDEVNAMES;
+alias DEVNAMES* PDEVNAMES;
+
+struct DIBSECTION
+{
+    BITMAP dsBm;
+    BITMAPINFOHEADER dsBmih;
+    DWORD[1 + 2] dsBitfields;
+    HANDLE dshSection;
+    DWORD dsOffset;
+}
+
+alias DIBSECTION TAGDIBSECTION;
+alias DIBSECTION TDIBSECTION;
+alias DIBSECTION* PDIBSECTION;
+
+union LARGE_INTEGER
+{
+    struct
+    {
+        DWORD LowPart;
+        LONG HighPart;
+    };
+    struct u
+    {
+        DWORD LowPart;
+        LONG HighPart;
+    };
+    LONGLONG QuadPart;
+}
+
+alias LARGE_INTEGER* PLARGE_INTEGER;
+alias LARGE_INTEGER _LARGE_INTEGER;
+alias LARGE_INTEGER TLARGEINTEGER;
+alias LARGE_INTEGER* PLARGEINTEGER;
 
 struct DISK_GEOMETRY
 {
@@ -7949,18 +7970,37 @@
 alias DOC_INFO_2 TDOCINFO2;
 alias DOC_INFO_2* PDOCINFO2;
 
-// struct DOCINFO
-// {
-//     int cbSize;
-//     LPCTSTR lpszDocName;
-//     LPCTSTR lpszOutput;
-//     LPCTSTR lpszDatatype;
-//     DWORD fwType;
-// }
-//
-// alias DOCINFO TDOCINFO;
-// alias DOCINFO TDOCINFOA;
-// alias DOCINFO* PDOCINFO;
+struct DOCINFOA
+{
+    int     cbSize;
+    LPCSTR   lpszDocName;
+    LPCSTR   lpszOutput;
+    LPCSTR   lpszDatatype;
+    DWORD    fwType;
+}
+alias DOCINFOA TDOCINFOA;
+
+struct DOCINFOW
+{
+    int     cbSize;
+    LPCWSTR  lpszDocName;
+    LPCWSTR  lpszOutput;
+    LPCWSTR  lpszDatatype;
+    DWORD    fwType;
+}
+alias DOCINFOW TDOCINFOW;
+
+version(Win32SansUnicode)
+{
+    alias DOCINFOA DOCINFO;
+}
+else
+{
+    alias DOCINFOW DOCINFO;
+}
+alias DOCINFO TDOCINFO;
+alias DOCINFO* LPDOCINFO;
+alias DOCINFO* PDOCINFO;
 
 struct DRAGLISTINFO
 {
@@ -7973,23 +8013,23 @@
 alias DRAGLISTINFO TDRAGLISTINFO;
 alias DRAGLISTINFO* PDRAGLISTINFO;
 
-// struct DRAWITEMSTRUCT
-// {
-//     UINT CtlType;
-//     UINT CtlID;
-//     UINT itemID;
-//     UINT itemAction;
-//     UINT itemState;
-//     HWND hwndItem;
-//     HDC hDC;
-//     RECT rcItem;
-//     DWORD itemData;
-// }
-//
-// alias DRAWITEMSTRUCT* LPDRAWITEMSTRUCT;
-// alias DRAWITEMSTRUCT TAGDRAWITEMSTRUCT;
-// alias DRAWITEMSTRUCT TDRAWITEMSTRUCT;
-// alias DRAWITEMSTRUCT* PDRAWITEMSTRUCT;
+struct DRAWITEMSTRUCT
+{
+    UINT CtlType;
+    UINT CtlID;
+    UINT itemID;
+    UINT itemAction;
+    UINT itemState;
+    HWND hwndItem;
+    HDC hDC;
+    RECT rcItem;
+    DWORD itemData;
+}
+
+alias DRAWITEMSTRUCT* LPDRAWITEMSTRUCT;
+alias DRAWITEMSTRUCT TAGDRAWITEMSTRUCT;
+alias DRAWITEMSTRUCT TDRAWITEMSTRUCT;
+alias DRAWITEMSTRUCT* PDRAWITEMSTRUCT;
 
 struct DRAWTEXTPARAMS
 {
@@ -8285,16 +8325,16 @@
 alias EMRCREATEPALETTE TEMRCREATEPALETTE;
 alias EMRCREATEPALETTE* PEMRCREATEPALETTE;
 
-// struct LOGPEN
-// {
-//     UINT lopnStyle;
-//     POINT lopnWidth;
-//     COLORREF lopnColor;
-// }
-//
-// alias LOGPEN TAGLOGPEN;
-// alias LOGPEN TLOGPEN;
-// alias LOGPEN* PLOGPEN;
+struct LOGPEN
+{
+    UINT lopnStyle;
+    POINT lopnWidth;
+    COLORREF lopnColor;
+}
+
+alias LOGPEN TAGLOGPEN;
+alias LOGPEN TLOGPEN;
+alias LOGPEN* PLOGPEN;
 
 struct EMRCREATEPEN
 {
@@ -9131,16 +9171,16 @@
 alias EMRSELECTCLIPPATH TEMRENABLEICM;
 alias EMRSELECTCLIPPATH* PEMRENABLEICM;
 
-// struct NMHDR
-// {
-//     HWND hwndFrom;
-//     UINT idFrom;
-//     UINT code;
-// }
-//
-// alias NMHDR TAGNMHDR;
-// alias NMHDR TNMHDR;
-// alias NMHDR* PNMHDR;
+struct NMHDR
+{
+    HWND hwndFrom;
+    UINT idFrom;
+    UINT code;
+}
+
+alias NMHDR TAGNMHDR;
+alias NMHDR TNMHDR;
+alias NMHDR* PNMHDR;
 
 struct ENCORRECTTEXT
 {
@@ -9265,57 +9305,39 @@
 
 struct ENUMLOGFONTA {
   LOGFONTA elfLogFont;
-  CHAR   elfFullName[LF_FULLFACESIZE];
-  CHAR   elfStyle[LF_FACESIZE];
+  BYTE     elfFullName[LF_FULLFACESIZE];
+  BYTE     elfStyle[LF_FACESIZE];
 }
 struct ENUMLOGFONTW {
   LOGFONTW elfLogFont;
-  WCHAR   elfFullName[LF_FULLFACESIZE];
-  WCHAR   elfStyle[LF_FACESIZE];
+  WCHAR    elfFullName[LF_FULLFACESIZE];
+  WCHAR    elfStyle[LF_FACESIZE];
 }
 struct ENUMLOGFONTEXA {
     LOGFONTA  elfLogFont;
-    BYTE  elfFullName[LF_FULLFACESIZE];
-    BYTE  elfStyle[LF_FACESIZE];
-    BYTE  elfScript[LF_FACESIZE];
+    BYTE      elfFullName[LF_FULLFACESIZE];
+    BYTE      elfStyle[LF_FACESIZE];
+    BYTE      elfScript[LF_FACESIZE];
 }
 struct ENUMLOGFONTEXW {
     LOGFONTW  elfLogFont;
-    WCHAR  elfFullName[LF_FULLFACESIZE];
-    WCHAR  elfStyle[LF_FACESIZE];
-    WCHAR  elfScript[LF_FACESIZE];
-}
-version(ANSI){
+    WCHAR     elfFullName[LF_FULLFACESIZE];
+    WCHAR     elfStyle[LF_FACESIZE];
+    WCHAR     elfScript[LF_FACESIZE];
+}
+version(Win32SansUnicode){
     alias ENUMLOGFONTA ENUMLOGFONT;
     alias ENUMLOGFONTEXA ENUMLOGFONTEX;
 }else {
     alias ENUMLOGFONTW ENUMLOGFONT;
     alias ENUMLOGFONTEXW ENUMLOGFONTEX;
 }
-
-
-// struct ENUMLOGFONT
-// {
-//  LOGFONT elfLogFont;
-//  BCHAR[1 + LF_FULLFACESIZE-1] elfFullName;
-//  BCHAR[1 + LF_FACESIZE-1] elfStyle;
-// }
-//
-// alias ENUMLOGFONT TAGENUMLOGFONT;
-// alias ENUMLOGFONT TENUMLOGFONT;
-// alias ENUMLOGFONT* PENUMLOGFONT;
-//
-// struct ENUMLOGFONTEX
-// {
-//  LOGFONT elfLogFont;
-//  BCHAR[1 + LF_FULLFACESIZE-1] elfFullName;
-//  BCHAR[1 + LF_FACESIZE-1] elfStyle;
-//  BCHAR[1 + LF_FACESIZE-1] elfScript;
-// }
-//
-// alias ENUMLOGFONTEX TAGENUMLOGFONTEX;
-// alias ENUMLOGFONTEX TENUMLOGFONTEX;
-// alias ENUMLOGFONTEX* PENUMLOGFONTEX;
+alias ENUMLOGFONT TAGENUMLOGFONT;
+alias ENUMLOGFONT TENUMLOGFONT;
+alias ENUMLOGFONT* PENUMLOGFONT;
+alias ENUMLOGFONTEX TAGENUMLOGFONTEX;
+alias ENUMLOGFONTEX TENUMLOGFONTEX;
+alias ENUMLOGFONTEX* PENUMLOGFONTEX;
 
 struct EVENTLOGRECORD
 {
@@ -9554,23 +9576,43 @@
 alias FORMATRANGE TFORMATRANGE;
 alias FORMATRANGE* PFORMATRANGE;
 
-// struct GCP_RESULTS
-// {
-//     DWORD lStructSize;
-//     LPTSTR lpOutString;
-//     UINT* lpOrder;
-//     INT* lpDx;
-//     INT* lpCaretPos;
-//     LPTSTR lpClass;
-//     UINT* lpGlyphs;
-//     UINT nGlyphs;
-//     UINT nMaxFit;
-// }
-//
-// alias GCP_RESULTS* LPGCP_RESULTS;
-// alias GCP_RESULTS TAGGCP_RESULTS;
-// alias GCP_RESULTS TGCPRESULTS;
-// alias GCP_RESULTS* PGCPRESULTS;
+struct GCP_RESULTSA
+{
+    DWORD   lStructSize;
+    LPSTR   lpOutString;
+    UINT  * lpOrder;
+    int   * lpDx;
+    int   * lpCaretPos;
+    LPSTR   lpClass;
+    LPWSTR  lpGlyphs;
+    UINT    nGlyphs;
+    int     nMaxFit;
+}
+
+struct GCP_RESULTSW
+{
+    DWORD   lStructSize;
+    LPWSTR  lpOutString;
+    UINT  * lpOrder;
+    int   * lpDx;
+    int   * lpCaretPos;
+    LPSTR   lpClass;
+    LPWSTR  lpGlyphs;
+    UINT    nGlyphs;
+    int     nMaxFit;
+}
+version(Win32SansUnicode)
+{
+    alias GCP_RESULTSA GCP_RESULTS;
+}
+else
+{
+    alias GCP_RESULTSW GCP_RESULTS;
+}
+alias GCP_RESULTS* LPGCP_RESULTS;
+alias GCP_RESULTS TAGGCP_RESULTS;
+alias GCP_RESULTS TGCPRESULTS;
+alias GCP_RESULTS* PGCPRESULTS;
 
 struct GENERIC_MAPPING
 {
@@ -9674,20 +9716,20 @@
 alias HD_NOTIFY THDNOTIFY;
 alias HD_NOTIFY* PHDNOTIFY;
 
-// struct HELPINFO
-// {
-//     UINT cbSize;
-//     int iContextType;
-//     int iCtrlId;
-//     HANDLE hItemHandle;
-//     DWORD dwContextId;
-//     POINT MousePos;
-// }
-//
-// alias HELPINFO* LPHELPINFO;
-// alias HELPINFO TAGHELPINFO;
-// alias HELPINFO THELPINFO;
-// alias HELPINFO* PHELPINFO;
+struct HELPINFO
+{
+    UINT cbSize;
+    int iContextType;
+    int iCtrlId;
+    HANDLE hItemHandle;
+    DWORD dwContextId;
+    POINT MousePos;
+}
+
+alias HELPINFO* LPHELPINFO;
+alias HELPINFO TAGHELPINFO;
+alias HELPINFO THELPINFO;
+alias HELPINFO* PHELPINFO;
 
 struct HELPWININFO
 {
@@ -9703,17 +9745,30 @@
 alias HELPWININFO THELPWININFO;
 alias HELPWININFO* PHELPWININFO;
 
-// struct HIGHCONTRAST
-// {
-//     UINT cbSize;
-//     DWORD dwFlags;
-//     LPTSTR lpszDefaultScheme;
-// }
-//
-// alias HIGHCONTRAST* LPHIGHCONTRAST;
-// alias HIGHCONTRAST TAGHIGHCONTRAST;
-// alias HIGHCONTRAST THIGHCONTRAST;
-// alias HIGHCONTRAST* PHIGHCONTRAST;
+struct HIGHCONTRASTA
+{
+    UINT             cbSize;
+    DWORD            dwFlags;
+    LPSTR            lpszDefaultScheme;
+}
+struct HIGHCONTRASTW
+{
+    UINT             cbSize;
+    DWORD            dwFlags;
+    LPWSTR           lpszDefaultScheme;
+}
+version(Win32SansUnicode)
+{
+    alias HIGHCONTRASTA HIGHCONTRAST;
+}
+else
+{
+    alias HIGHCONTRASTW HIGHCONTRAST;
+}
+alias HIGHCONTRAST* LPHIGHCONTRAST;
+alias HIGHCONTRAST TAGHIGHCONTRAST;
+alias HIGHCONTRAST THIGHCONTRAST;
+alias HIGHCONTRAST* PHIGHCONTRAST;
 
 struct HSZPAIR
 {
@@ -10194,20 +10249,20 @@
 alias MDICREATESTRUCT TMDICREATESTRUCT;
 alias MDICREATESTRUCT* PMDICREATESTRUCT;
 
-// struct MEASUREITEMSTRUCT
-// {
-//     UINT CtlType;
-//     UINT CtlID;
-//     UINT itemID;
-//     UINT itemWidth;
-//     UINT itemHeight;
-//     DWORD itemData;
-// }
-//
-// alias MEASUREITEMSTRUCT* LPMEASUREITEMSTRUCT;
-// alias MEASUREITEMSTRUCT TAGMEASUREITEMSTRUCT;
-// alias MEASUREITEMSTRUCT TMEASUREITEMSTRUCT;
-// alias MEASUREITEMSTRUCT* PMEASUREITEMSTRUCT;
+struct MEASUREITEMSTRUCT
+{
+    UINT CtlType;
+    UINT CtlID;
+    UINT itemID;
+    UINT itemWidth;
+    UINT itemHeight;
+    DWORD itemData;
+}
+
+alias MEASUREITEMSTRUCT* LPMEASUREITEMSTRUCT;
+alias MEASUREITEMSTRUCT TAGMEASUREITEMSTRUCT;
+alias MEASUREITEMSTRUCT TMEASUREITEMSTRUCT;
+alias MEASUREITEMSTRUCT* PMEASUREITEMSTRUCT;
 
 struct MEMORY_BASIC_INFORMATION
 {
@@ -10303,35 +10358,20 @@
     UINT    cch;            // used if MIIM_TYPE
     HBITMAP hbmpItem;
 }   alias MENUITEMINFOW* PMENUITEMINFOW, LPMENUITEMINFOW;
-version(ANSI){
+version(Win32SansUnicode)
+{
     alias MENUITEMINFOA MENUITEMINFO;
-}else{
+}
+else
+{
     alias MENUITEMINFOW MENUITEMINFO;
 }
 alias MENUITEMINFO * LPMENUITEMINFO;
 alias MENUITEMINFO * LPCMENUITEMINFO;
-
-// struct MENUITEMINFO
-// {
-//  UINT cbSize;
-//  UINT fMask;
-//  UINT fType;
-//  UINT fState;
-//  UINT wID;
-//  HMENU hSubMenu;
-//  HBITMAP hbmpChecked;
-//  HBITMAP hbmpUnchecked;
-//  DWORD dwItemData;
-//  LPTSTR dwTypeData;
-//  UINT cch;
-// }
-//
-// alias MENUITEMINFO* LPMENUITEMINFO;
-// alias MENUITEMINFO* LPCMENUITEMINFO;
-// alias MENUITEMINFO TAGMENUITEMINFO;
-// alias MENUITEMINFO TMENUITEMINFO;
-// alias MENUITEMINFO TMENUITEMINFOA;
-// alias MENUITEMINFO* PMENUITEMINFO;
+alias MENUITEMINFO TAGMENUITEMINFO;
+alias MENUITEMINFO TMENUITEMINFO;
+alias MENUITEMINFO TMENUITEMINFOA;
+alias MENUITEMINFO* PMENUITEMINFO;
 
 struct MENUITEMTEMPLATE
 {
@@ -10414,18 +10454,18 @@
 alias MINIMIZEDMETRICS TMINIMIZEDMETRICS;
 alias MINIMIZEDMETRICS* PMINIMIZEDMETRICS;
 
-// struct MINMAXINFO
-// {
-//     POINT ptReserved;
-//     POINT ptMaxSize;
-//     POINT ptMaxPosition;
-//     POINT ptMinTrackSize;
-//     POINT ptMaxTrackSize;
-// }
-//
-// alias MINMAXINFO TAGMINMAXINFO;
-// alias MINMAXINFO TMINMAXINFO;
-// alias MINMAXINFO* PMINMAXINFO;
+struct MINMAXINFO
+{
+    POINT ptReserved;
+    POINT ptMaxSize;
+    POINT ptMaxPosition;
+    POINT ptMinTrackSize;
+    POINT ptMaxTrackSize;
+}
+
+alias MINMAXINFO TAGMINMAXINFO;
+alias MINMAXINFO TMINMAXINFO;
+alias MINMAXINFO* PMINMAXINFO;
 
 struct MODEMDEVCAPS
 {
@@ -10785,8 +10825,6 @@
 alias NEWCPLINFO TNEWCPLINFO;
 alias NEWCPLINFO* PNEWCPLINFO;
 
-// ----------------------------------------------------------------------------
-
 struct NEWTEXTMETRICA {
     LONG   tmHeight;
     LONG   tmAscent;
@@ -10840,71 +10878,36 @@
     UINT   ntmAvgWidth;
 }
 
-struct NEWTEXTMETRICEXA {
+struct NEWTEXTMETRICEXA
+{
     NEWTEXTMETRICA  ntmentm;
     FONTSIGNATURE  ntmeFontSignature;
 }
-struct NEWTEXTMETRICEXW {
+struct NEWTEXTMETRICEXW
+{
     NEWTEXTMETRICW  ntmentm;
     FONTSIGNATURE  ntmeFontSignature;
 }
 
+
+version(Win32SansUnicode)
+{
+    alias NEWTEXTMETRICA NEWTEXTMETRIC;
+    alias NEWTEXTMETRICEXA NEWTEXTMETRICEX;
+}
+else
+{
+    alias NEWTEXTMETRICW NEWTEXTMETRIC;
+    alias NEWTEXTMETRICEXW NEWTEXTMETRICEX;
+}
+
 alias NEWTEXTMETRIC TNEWTEXTMETRIC;
 alias NEWTEXTMETRIC* PNEWTEXTMETRIC;
 alias NEWTEXTMETRIC* LPNEWTEXTMETRIC;
-
-version(ANSI){
-    alias NEWTEXTMETRICA NEWTEXTMETRIC;
-    alias NEWTEXTMETRICEXA NEWTEXTMETRICEX;
-}else{
-    alias NEWTEXTMETRICW NEWTEXTMETRIC;
-    alias NEWTEXTMETRICEXW NEWTEXTMETRICEX;
-}
-
-/+
-struct NEWTEXTMETRIC
-{
-    LONG tmHeight;
-    LONG tmAscent;
-    LONG tmDescent;
-    LONG tmInternalLeading;
-    LONG tmExternalLeading;
-    LONG tmAveCharWidth;
-    LONG tmMaxCharWidth;
-    LONG tmWeight;
-    LONG tmOverhang;
-    LONG tmDigitizedAspectX;
-    LONG tmDigitizedAspectY;
-    BCHAR tmFirstChar;
-    BCHAR tmLastChar;
-    BCHAR tmDefaultChar;
-    BCHAR tmBreakChar;
-    ubyte tmItalic;
-    ubyte tmUnderlined;
-    ubyte tmStruckOut;
-    ubyte tmPitchAndFamily;
-    ubyte tmCharSet;
-    DWORD ntmFlags;
-    UINT ntmSizeEM;
-    UINT ntmCellHeight;
-    UINT ntmAvgWidth;
-}
-
 alias NEWTEXTMETRIC TAGNEWTEXTMETRIC;
-alias NEWTEXTMETRIC TNEWTEXTMETRIC;
-alias NEWTEXTMETRIC* PNEWTEXTMETRIC;
-
-struct NEWTEXTMETRICEX
-{
-    NEWTEXTMETRIC ntmentm;
-    FONTSIGNATURE ntmeFontSignature;
-}
-
 alias NEWTEXTMETRICEX TAGNEWTEXTMETRICEX;
 alias NEWTEXTMETRICEX TNEWTEXTMETRICEX;
 alias NEWTEXTMETRICEX* PNEWTEXTMETRICEX;
-+/
-// ----------------------------------------------------------------------------
 
 struct NM_LISTVIEW
 {
@@ -10922,38 +10925,61 @@
 alias NM_LISTVIEW TNMLISTVIEW;
 alias NM_LISTVIEW* PNMLISTVIEW;
 
-// struct TV_ITEM
-// {
-//  UINT mask;
-//  HTREEITEM hItem;
-//  UINT state;
-//  UINT stateMask;
-//  LPTSTR pszText;
-//  int cchTextMax;
-//  int iImage;
-//  int iSelectedImage;
-//  int cChildren;
-//  LPARAM lParam;
-// }
-//
-// alias TV_ITEM* LPTV_ITEM;
-// alias TV_ITEM _TV_ITEM;
-// alias TV_ITEM TTVITEM;
-// alias TV_ITEM* PTVITEM;
-
-// struct NM_TREEVIEW
-// {
-//  NMHDR hdr;
-//  UINT action;
-//  TV_ITEM itemOld;
-//  TV_ITEM itemNew;
-//  POINT ptDrag;
-// }
-//
-// alias NM_TREEVIEW* LPNM_TREEVIEW;
-// alias NM_TREEVIEW _NM_TREEVIEW;
-// alias NM_TREEVIEW TNMTREEVIEW;
-// alias NM_TREEVIEW* PNMTREEVIEW;
+struct TVITEMA
+{
+    UINT      mask;
+    HTREEITEM hItem;
+    UINT      state;
+    UINT      stateMask;
+    LPSTR     pszText;
+    int       cchTextMax;
+    int       iImage;
+    int       iSelectedImage;
+    int       cChildren;
+    LPARAM    lParam;
+}
+struct TVITEMW
+{
+    UINT      mask;
+    HTREEITEM hItem;
+    UINT      state;
+    UINT      stateMask;
+    LPWSTR    pszText;
+    int       cchTextMax;
+    int       iImage;
+    int       iSelectedImage;
+    int       cChildren;
+    LPARAM    lParam;
+}
+version(Win32SansUnicode)
+{
+    alias TVITEMA TVITEM;
+}
+else
+{
+    alias TVITEMW TVITEM;
+}
+alias TVITEM* LPTVITEM;
+alias TVITEM* LPTV_ITEM;
+alias TVITEM _TV_ITEM;
+alias TVITEM TTVITEM;
+alias TVITEM TV_ITEM;
+alias TVITEM* PTVITEM;
+
+struct NMTREEVIEW
+{
+    NMHDR hdr;
+    UINT action;
+    TVITEM itemOld;
+    TVITEM itemNew;
+    POINT ptDrag;
+}
+alias NMTREEVIEW* PNMTREEVIEW;
+alias NMTREEVIEW* LPNMTREEVIEW;
+alias NMTREEVIEW  NM_TREEVIEW;
+alias NM_TREEVIEW* LPNM_TREEVIEW;
+alias NM_TREEVIEW _NM_TREEVIEW;
+alias NM_TREEVIEW TNMTREEVIEW;
 
 struct NM_UPDOWNW
 {
@@ -10967,29 +10993,52 @@
 alias NM_UPDOWNW* PNMUPDOWN;
 alias NM_UPDOWNW NMUPDOWN;
 
-// struct NONCLIENTMETRICS
-// {
-//     UINT cbSize;
-//     int iBorderWidth;
-//     int iScrollWidth;
-//     int iScrollHeight;
-//     int iCaptionWidth;
-//     int iCaptionHeight;
-//     LOGFONT lfCaptionFont;
-//     int iSmCaptionWidth;
-//     int iSmCaptionHeight;
-//     LOGFONT lfSmCaptionFont;
-//     int iMenuWidth;
-//     int iMenuHeight;
-//     LOGFONT lfMenuFont;
-//     LOGFONT lfStatusFont;
-//     LOGFONT lfMessageFont;
-// }
-//
-// alias NONCLIENTMETRICS* LPNONCLIENTMETRICS;
-// alias NONCLIENTMETRICS TAGNONCLIENTMETRICS;
-// alias NONCLIENTMETRICS TNONCLIENTMETRICS;
-// alias NONCLIENTMETRICS* PNONCLIENTMETRICS;
+struct NONCLIENTMETRICSA {
+    int cbSize;
+    int iBorderWidth;
+    int iScrollWidth;
+    int iScrollHeight;
+    int iCaptionWidth;
+    int iCaptionHeight;
+    LOGFONTA lfCaptionFont;
+    int iSmCaptionWidth;
+    int iSmCaptionHeight;
+    LOGFONTA lfSmCaptionFont;
+    int iMenuWidth;
+    int iMenuHeight;
+    LOGFONTA lfMenuFont;
+    LOGFONTA lfStatusFont;
+    LOGFONTA lfMessageFont;
+}
+struct NONCLIENTMETRICSW {
+    int cbSize;
+    int iBorderWidth;
+    int iScrollWidth;
+    int iScrollHeight;
+    int iCaptionWidth;
+    int iCaptionHeight;
+    LOGFONTW lfCaptionFont;
+    int iSmCaptionWidth;
+    int iSmCaptionHeight;
+    LOGFONTW lfSmCaptionFont;
+    int iMenuWidth;
+    int iMenuHeight;
+    LOGFONTW lfMenuFont;
+    LOGFONTW lfStatusFont;
+    LOGFONTW lfMessageFont;
+}
+version(Win32SansUnicode)
+{
+    alias NONCLIENTMETRICSA NONCLIENTMETRICS;
+}
+else
+{
+    alias NONCLIENTMETRICSW NONCLIENTMETRICS;
+}
+alias NONCLIENTMETRICS* LPNONCLIENTMETRICS;
+alias NONCLIENTMETRICS TAGNONCLIENTMETRICS;
+alias NONCLIENTMETRICS TNONCLIENTMETRICS;
+alias NONCLIENTMETRICS* PNONCLIENTMETRICS;
 
 struct SERVICE_ADDRESS
 {
@@ -11148,93 +11197,185 @@
 alias OFNOTIFY TOFNOTIFY;
 alias OFNOTIFY* POFNOTIFY;
 
-// struct OSVERSIONINFO
-// {
-//     DWORD dwOSVersionInfoSize;
-//     DWORD dwMajorVersion;
-//     DWORD dwMinorVersion;
-//     DWORD dwBuildNumber;
-//     DWORD dwPlatformId;
-//     TCHAR[1 + 127] szCSDVersion;
-// }
-//
-// alias OSVERSIONINFO* LPOSVERSIONINFO;
-// alias OSVERSIONINFO _OSVERSIONINFO;
-// alias OSVERSIONINFO TOSVERSIONINFO;
-// alias OSVERSIONINFO* POSVERSIONINFO;
-
-// struct TEXTMETRIC
-// {
-//     LONG tmHeight;
-//     LONG tmAscent;
-//     LONG tmDescent;
-//     LONG tmInternalLeading;
-//     LONG tmExternalLeading;
-//     LONG tmAveCharWidth;
-//     LONG tmMaxCharWidth;
-//     LONG tmWeight;
-//     LONG tmOverhang;
-//     LONG tmDigitizedAspectX;
-//     LONG tmDigitizedAspectY;
-//     BCHAR tmFirstChar;
-//     BCHAR tmLastChar;
-//     BCHAR tmDefaultChar;
-//     BCHAR tmBreakChar;
-//     ubyte tmItalic;
-//     ubyte tmUnderlined;
-//     ubyte tmStruckOut;
-//     ubyte tmPitchAndFamily;
-//     ubyte tmCharSet;
-// }
-//
-// alias TEXTMETRIC* LPTEXTMETRIC;
-// alias TEXTMETRIC TAGTEXTMETRIC;
-// alias TEXTMETRIC TTEXTMETRIC;
-// alias TEXTMETRIC* PTEXTMETRIC;
-
-struct OUTLINETEXTMETRICW {
-  UINT       otmSize;
-  TEXTMETRIC otmTextMetrics;
-  BYTE       otmFiller;
-  PANOSE     otmPanoseNumber;
-  UINT       otmfsSelection;
-  UINT       otmfsType;
-  int        otmsCharSlopeRise;
-  int        otmsCharSlopeRun;
-  int        otmItalicAngle;
-  UINT       otmEMSquare;
-  int        otmAscent;
-  int        otmDescent;
-  UINT       otmLineGap;
-  UINT       otmsCapEmHeight;
-  UINT       otmsXHeight;
-  RECT       otmrcFontBox;
-  int        otmMacAscent;
-  int        otmMacDescent;
-  UINT       otmMacLineGap;
-  UINT       otmusMinimumPPEM;
-  POINT      otmptSubscriptSize;
-  POINT      otmptSubscriptOffset;
-  POINT      otmptSuperscriptSize;
-  POINT      otmptSuperscriptOffset;
-  UINT       otmsStrikeoutSize;
-  int        otmsStrikeoutPosition;
-  int        otmsUnderscoreSize;
-  int        otmsUnderscorePosition;
-  PSTR       otmpFamilyName;
-  PSTR       otmpFaceName;
-  PSTR       otmpStyleName;
-  PSTR       otmpFullName;
+struct OSVERSIONINFOA
+{
+    DWORD dwOSVersionInfoSize;
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+    DWORD dwBuildNumber;
+    DWORD dwPlatformId;
+    CHAR szCSDVersion[ 128 ];
+}
+alias OSVERSIONINFOA* POSVERSIONINFOA, LPOSVERSIONINFOA;
+
+struct OSVERSIONINFOW
+{
+    DWORD dwOSVersionInfoSize;
+    DWORD dwMajorVersion;
+    DWORD dwMinorVersion;
+    DWORD dwBuildNumber;
+    DWORD dwPlatformId;
+    WCHAR szCSDVersion[ 128 ];
+}
+alias OSVERSIONINFOW* POSVERSIONINFOW, LPOSVERSIONINFOW;
+version(Win32SansUnicode)
+{
+    alias OSVERSIONINFOA OSVERSIONINFO;
+}
+else
+{
+    alias OSVERSIONINFOW OSVERSIONINFO;
+}
+alias OSVERSIONINFO* LPOSVERSIONINFO;
+alias OSVERSIONINFO _OSVERSIONINFO;
+alias OSVERSIONINFO TOSVERSIONINFO;
+alias OSVERSIONINFO* POSVERSIONINFO;
+
+struct TEXTMETRICA {
+    align(1):
+    LONG tmHeight;
+    LONG tmAscent;
+    LONG tmDescent;
+    LONG tmInternalLeading;
+    LONG tmExternalLeading;
+    LONG tmAveCharWidth;
+    LONG tmMaxCharWidth;
+    LONG tmWeight;
+    LONG tmOverhang;
+    LONG tmDigitizedAspectX;
+    LONG tmDigitizedAspectY;
+
+    BYTE tmFirstChar;
+    BYTE tmLastChar;
+    BYTE tmDefaultChar;
+    BYTE tmBreakChar;
+
+    BYTE tmItalic;
+    BYTE tmUnderlined;
+    BYTE tmStruckOut;
+    BYTE tmPitchAndFamily;
+    BYTE tmCharSet;
+}
+struct TEXTMETRICW {
+    align(1):
+    LONG tmHeight;
+    LONG tmAscent;
+    LONG tmDescent;
+    LONG tmInternalLeading;
+    LONG tmExternalLeading;
+    LONG tmAveCharWidth;
+    LONG tmMaxCharWidth;
+    LONG tmWeight;
+    LONG tmOverhang;
+    LONG tmDigitizedAspectX;
+    LONG tmDigitizedAspectY;
+
+    WCHAR tmFirstChar;
+    WCHAR tmLastChar;
+    WCHAR tmDefaultChar;
+    WCHAR tmBreakChar;
+
+    BYTE tmItalic;
+    BYTE tmUnderlined;
+    BYTE tmStruckOut;
+    BYTE tmPitchAndFamily;
+    BYTE tmCharSet;
+}
+version(Win32SansUnicode)
+{
+    alias TEXTMETRICA TEXTMETRIC;
+}
+else
+{
+    alias TEXTMETRICW TEXTMETRIC;
+}
+alias TEXTMETRIC* LPTEXTMETRIC;
+alias TEXTMETRIC TAGTEXTMETRIC;
+alias TEXTMETRIC TTEXTMETRIC;
+alias TEXTMETRIC* PTEXTMETRIC;
+
+struct OUTLINETEXTMETRICA
+{
+    UINT       otmSize;
+    TEXTMETRICA otmTextMetrics;
+    BYTE       otmFiller;
+    PANOSE     otmPanoseNumber;
+    UINT       otmfsSelection;
+    UINT       otmfsType;
+    int        otmsCharSlopeRise;
+    int        otmsCharSlopeRun;
+    int        otmItalicAngle;
+    UINT       otmEMSquare;
+    int        otmAscent;
+    int        otmDescent;
+    UINT       otmLineGap;
+    UINT       otmsCapEmHeight;
+    UINT       otmsXHeight;
+    RECT       otmrcFontBox;
+    int        otmMacAscent;
+    int        otmMacDescent;
+    UINT       otmMacLineGap;
+    UINT       otmusMinimumPPEM;
+    POINT      otmptSubscriptSize;
+    POINT      otmptSubscriptOffset;
+    POINT      otmptSuperscriptSize;
+    POINT      otmptSuperscriptOffset;
+    UINT       otmsStrikeoutSize;
+    int        otmsStrikeoutPosition;
+    int        otmsUnderscoreSize;
+    int        otmsUnderscorePosition;
+    PSTR       otmpFamilyName;
+    PSTR       otmpFaceName;
+    PSTR       otmpStyleName;
+    PSTR       otmpFullName;
+}
+struct OUTLINETEXTMETRICW
+{
+    UINT       otmSize;
+    TEXTMETRICW otmTextMetrics;
+    BYTE       otmFiller;
+    PANOSE     otmPanoseNumber;
+    UINT       otmfsSelection;
+    UINT       otmfsType;
+    int        otmsCharSlopeRise;
+    int        otmsCharSlopeRun;
+    int        otmItalicAngle;
+    UINT       otmEMSquare;
+    int        otmAscent;
+    int        otmDescent;
+    UINT       otmLineGap;
+    UINT       otmsCapEmHeight;
+    UINT       otmsXHeight;
+    RECT       otmrcFontBox;
+    int        otmMacAscent;
+    int        otmMacDescent;
+    UINT       otmMacLineGap;
+    UINT       otmusMinimumPPEM;
+    POINT      otmptSubscriptSize;
+    POINT      otmptSubscriptOffset;
+    POINT      otmptSuperscriptSize;
+    POINT      otmptSuperscriptOffset;
+    UINT       otmsStrikeoutSize;
+    int        otmsStrikeoutPosition;
+    int        otmsUnderscoreSize;
+    int        otmsUnderscorePosition;
+    PSTR       otmpFamilyName;
+    PSTR       otmpFaceName;
+    PSTR       otmpStyleName;
+    PSTR       otmpFullName;
 }
 
 alias OUTLINETEXTMETRIC* LPOUTLINETEXTMETRIC;
 alias OUTLINETEXTMETRIC _OUTLINETEXTMETRIC;
 alias OUTLINETEXTMETRIC TOUTLINETEXTMETRIC;
 alias OUTLINETEXTMETRIC* POUTLINETEXTMETRIC;
-version(ANSI){
+version(Win32SansUnicode)
+{
     alias OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
     alias OUTLINETEXTMETRICA* LPOUTLINETEXTMETRICA;
-}else {
+}
+else
+{
     alias OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
     alias OUTLINETEXTMETRICW* LPOUTLINETEXTMETRICW;
 }
@@ -12057,18 +12198,19 @@
 alias REQRESIZE TREQRESIZE;
 alias REQRESIZE* PREQRESIZE;
 
-// struct RGNDATAHEADER
-// {
-//     DWORD dwSize;
-//     DWORD iType;
-//     DWORD nCount;
-//     DWORD nRgnSize;
-//     RECT rcBound;
-// }
-//
-// alias RGNDATAHEADER _RGNDATAHEADER;
-// alias RGNDATAHEADER TRGNDATAHEADER;
-// alias RGNDATAHEADER* PRGNDATAHEADER;
+struct RGNDATAHEADER
+{
+    DWORD dwSize;
+    DWORD iType;
+    DWORD nCount;
+    DWORD nRgnSize;
+    RECT rcBound;
+}
+
+alias RGNDATAHEADER _RGNDATAHEADER;
+alias RGNDATAHEADER TRGNDATAHEADER;
+alias RGNDATAHEADER* PRGNDATAHEADER;
+alias RGNDATAHEADER* LPRGNDATAHEADER;
 
 struct RGNDATA
 {
@@ -12214,19 +12356,35 @@
 alias SHCONTF TAGSHCONTF;
 alias SHCONTF TSHCONTF;
 
-struct SHFILEINFO
+struct SHFILEINFOA
+{
+    HICON hIcon;
+    int iIcon;
+    DWORD dwAttributes;
+    CHAR[MAX_PATH] szDisplayName;
+    CHAR[80] szTypeName;
+}
+struct SHFILEINFOW
 {
     HICON hIcon;
     int iIcon;
     DWORD dwAttributes;
-    TCHAR[MAX_PATH] szDisplayName;
-    TCHAR[80]       szTypeName;
-}
-
-alias SHFILEINFO SHFILEINFOW;
+    WCHAR[MAX_PATH] szDisplayName;
+    WCHAR[80] szTypeName;
+}
+version(Win32SansUnicode)
+{
+    alias SHFILEINFOA SHFILEINFO;
+}
+else
+{
+    alias SHFILEINFOW SHFILEINFO;
+}
+
 alias SHFILEINFO _SHFILEINFO;
 alias SHFILEINFO TSHFILEINFO;
 alias SHFILEINFO* PSHFILEINFO;
+
 alias ushort FILEOP_FLAGS;
 alias FILEOP_FLAGS TFILEOPFLAGS;
 alias FILEOP_FLAGS* PFILEOPFLAGS;
@@ -12574,21 +12732,26 @@
 alias TBADDBITMAP TTBADDBITMAP;
 alias TBADDBITMAP* PTBADDBITMAP;
 
-// struct TBBUTTON
-// {
-//     int iBitmap;
-//     int idCommand;
-//     ubyte fsState;
-//     ubyte fsStyle;
-//     DWORD dwData;
-//     int iString;
-// }
-//
-// alias TBBUTTON* LPTBBUTTON;
-// alias TBBUTTON* LPCTBBUTTON;
-// alias TBBUTTON _TBBUTTON;
-// alias TBBUTTON TTBBUTTON;
-// alias TBBUTTON* PTBBUTTON;
+struct TBBUTTON {
+    align(2):
+    int     iBitmap;
+    int     idCommand;
+    BYTE    fsState;
+    BYTE    fsStyle;
+//#ifdef _WIN64
+//    BYTE     bReserved[6]     // padding for alignment
+//#elif defined(_WIN32)
+//    BYTE     bReserved[2]     // padding for alignment
+//#endif
+    DWORD_PTR   dwData;
+    INT_PTR     iString;
+}
+
+alias TBBUTTON* LPTBBUTTON;
+alias TBBUTTON* LPCTBBUTTON;
+alias TBBUTTON _TBBUTTON;
+alias TBBUTTON TTBBUTTON;
+alias TBBUTTON* PTBBUTTON;
 
 struct TBNOTIFY
 {
@@ -12800,7 +12963,17 @@
 alias TOKEN_USER TTOKENUSER;
 alias TOKEN_USER* PTOKENUSER;
 
-struct TOOLINFO
+struct TOOLINFOA
+{
+    UINT cbSize;
+    UINT uFlags;
+    HWND hwnd;
+    UINT uId;
+    RECT rect;
+    HINST hinst;
+    LPSTR lpszText;
+}
+struct TOOLINFOW
 {
     UINT cbSize;
     UINT uFlags;
@@ -12809,22 +12982,43 @@
     RECT rect;
     HINST hinst;
     LPWSTR lpszText;
-    LPARAM lParam;
-}
-
+}
+version(Win32SansUnicode)
+{
+    alias TOOLINFOA TOOLINFO;
+}
+else
+{
+    alias TOOLINFOW TOOLINFO;
+}
 alias TOOLINFO* LPTOOLINFO;
 alias TOOLINFO TTOOLINFO;
 alias TOOLINFO* PTOOLINFO;
 
-struct TOOLTIPTEXT
+struct TOOLTIPTEXTA
+{
+    NMHDR hdr;
+    LPSTR lpszText;
+    CHAR[80] szText;
+    HINST hinst;
+    UINT uFlags;
+}
+struct TOOLTIPTEXTW
 {
     NMHDR hdr;
-    LPTSTR lpszText;
-    char[1 + 79] szText;
+    LPWSTR lpszText;
+    WCHAR[80] szText;
     HINST hinst;
     UINT uFlags;
 }
-
+version(Win32SansUnicode)
+{
+    alias TOOLTIPTEXTA TOOLTIPTEXT;
+}
+else
+{
+    alias TOOLTIPTEXTW TOOLTIPTEXT;
+}
 alias TOOLTIPTEXT* LPTOOLTIPTEXT;
 alias TOOLTIPTEXT TTOOLTIPTEXT;
 alias TOOLTIPTEXT* PTOOLTIPTEXT;
@@ -12888,63 +13082,77 @@
 alias TTPOLYGONHEADER TTTPOLYGONHEADER;
 alias TTPOLYGONHEADER* PTTPOLYGONHEADER;
 
-// struct TV_DISPINFO
-// {
-//  NMHDR hdr;
-//  TV_ITEM item;
-// }
-//
-// alias TV_DISPINFO _TV_DISPINFO;
-// alias TV_DISPINFO TTVDISPINFO;
-// alias TV_DISPINFO* PTVDISPINFO;
-//
-// struct TV_HITTESTINFO
-// {
-//  POINT pt;
-//  UINT flags;
-//  HTREEITEM hItem;
-// }
-//
-// alias TV_HITTESTINFO* LPTV_HITTESTINFO;
-// alias TV_HITTESTINFO _TVHITTESTINFO;
-// alias TV_HITTESTINFO TTVHITTESTINFO;
-// alias TV_HITTESTINFO* PTVHITTESTINFO;
-//
-// struct TV_INSERTSTRUCT
-// {
-//  HTREEITEM hParent;
-//  HTREEITEM hInsertAfter;
-//  TV_ITEM item;
-// }
-//
-// alias TV_INSERTSTRUCT* LPTV_INSERTSTRUCT;
-// alias TV_INSERTSTRUCT _TV_INSERTSTRUCT;
-// alias TV_INSERTSTRUCT TTVINSERTSTRUCT;
-// alias TV_INSERTSTRUCT  TVINSERTSTRUCT;
-// alias TV_INSERTSTRUCT* PTVINSERTSTRUCT;
-//
-// struct TV_KEYDOWN
-// {
-//  NMHDR hdr;
-//  ushort wVKey;
-//  UINT flags;
-// }
-//
-// alias TV_KEYDOWN _TV_KEYDOWN;
-// alias TV_KEYDOWN TTVKEYDOWN;
-// alias TV_KEYDOWN* PTVKEYDOWN;
-//
-// struct TV_SORTCB
-// {
-//  HTREEITEM hParent;
-//  PFNTVCOMPARE lpfnCompare;
-//  LPARAM lParam;
-// }
-//
-// alias TV_SORTCB* LPTV_SORTCB;
-// alias TV_SORTCB _TV_SORTCB;
-// alias TV_SORTCB TTVSORTCB;
-// alias TV_SORTCB* PTVSORTCB;
+struct TV_DISPINFO
+{
+    NMHDR hdr;
+    TV_ITEM item;
+}
+
+alias TV_DISPINFO _TV_DISPINFO;
+alias TV_DISPINFO TTVDISPINFO;
+alias TV_DISPINFO* PTVDISPINFO;
+
+struct TV_HITTESTINFO
+{
+    POINT pt;
+    UINT flags;
+    HTREEITEM hItem;
+}
+
+alias TV_HITTESTINFO* LPTV_HITTESTINFO;
+alias TV_HITTESTINFO _TVHITTESTINFO;
+alias TV_HITTESTINFO TTVHITTESTINFO;
+alias TV_HITTESTINFO* PTVHITTESTINFO;
+
+struct TVINSERTSTRUCTA
+{
+    HTREEITEM hParent;
+    HTREEITEM hInsertAfter;
+    TVITEMA item;
+}
+struct TVINSERTSTRUCTW
+{
+    HTREEITEM hParent;
+    HTREEITEM hInsertAfter;
+    TVITEMW item;
+}
+version(Win32SansUnicode)
+{
+    alias TVINSERTSTRUCTA TVINSERTSTRUCT;
+}
+else
+{
+    alias TVINSERTSTRUCTW TVINSERTSTRUCT;
+}
+
+alias TVINSERTSTRUCT  TV_INSERTSTRUCT;
+alias TVINSERTSTRUCT* LPTV_INSERTSTRUCT;
+alias TVINSERTSTRUCT _TV_INSERTSTRUCT;
+alias TVINSERTSTRUCT TTVINSERTSTRUCT;
+alias TVINSERTSTRUCT* PTVINSERTSTRUCT;
+
+struct TV_KEYDOWN
+{
+    NMHDR hdr;
+    ushort wVKey;
+    UINT flags;
+}
+
+alias TV_KEYDOWN _TV_KEYDOWN;
+alias TV_KEYDOWN TTVKEYDOWN;
+alias TV_KEYDOWN* PTVKEYDOWN;
+
+struct TV_SORTCB
+{
+    HTREEITEM hParent;
+    PFNTVCOMPARE lpfnCompare;
+    LPARAM lParam;
+}
+
+alias TV_SORTCB* LPTV_SORTCB;
+alias TV_SORTCB _TV_SORTCB;
+alias TV_SORTCB TTVSORTCB;
+alias TV_SORTCB* PTVSORTCB;
 
 struct UDACCEL
 {
@@ -12955,16 +13163,24 @@
 alias UDACCEL TUDACCEL;
 alias UDACCEL* PUDACCEL;
 
-// struct ULARGE_INTEGER
-// {
-//     DWORD LowPart;
-//     DWORD HighPart;
-// }
-//
-// alias ULARGE_INTEGER* PULARGE_INTEGER;
-// alias ULARGE_INTEGER _ULARGE_INTEGER;
-// alias ULARGE_INTEGER TULARGEINTEGER;
-// alias ULARGE_INTEGER* PULARGEINTEGER;
+union ULARGE_INTEGER
+{
+    struct
+    {
+        DWORD LowPart;
+        DWORD HighPart;
+    };
+    struct u
+    {
+        DWORD LowPart;
+        DWORD HighPart;
+    };
+    DWORDLONG QuadPart;
+}
+alias ULARGE_INTEGER* PULARGE_INTEGER;
+alias ULARGE_INTEGER _ULARGE_INTEGER;
+alias ULARGE_INTEGER TULARGEINTEGER;
+alias ULARGE_INTEGER* PULARGEINTEGER;
 
 struct UNIVERSAL_NAME_INFO
 {
@@ -13109,7 +13325,8 @@
 alias WINDOWPLACEMENT TWINDOWPLACEMENT;
 alias WINDOWPLACEMENT* PWINDOWPLACEMENT;
 
-struct WNDCLASSA {
+struct WNDCLASSA
+{
     UINT style;
     WNDPROC lpfnWndProc;
     int cbClsExtra;
@@ -13124,7 +13341,8 @@
 
 alias WNDCLASSA* PWNDCLASSA, LPWNDCLASSA;
 
-struct WNDCLASSW {
+struct WNDCLASSW
+{
     UINT        style;
     WNDPROC     lpfnWndProc;
     int         cbClsExtra;
@@ -13135,21 +13353,23 @@
     HBRUSH      hbrBackground;
     LPCWSTR     lpszMenuName;
     LPCWSTR     lpszClassName;
-};
+}
 
 alias WNDCLASSW* PWNDCLASSW, LPWNDCLASSW;
 
-// since phobos has alias WNDCLASSA to WNDCLASS, we have to alias it another name
-version(ANSI){
+version(Win32SansUnicode)
+{
     alias WNDCLASSA WNDCLASS;
-}else{
+}
+else
+{
     alias WNDCLASSW WNDCLASS;
 }
-
 alias WNDCLASS* LPWNDCLASS;
 alias WNDCLASS _WNDCLASS;
 alias WNDCLASS TWNDCLASS;
 alias WNDCLASS WNDCLASS_T;
+alias WNDCLASS* PWNDCLASS;
 
 struct WNDCLASSEX
 {
@@ -13628,21 +13848,24 @@
 alias WINDOWINFO* PWINDOWINFO;
 alias WINDOWINFO* LPWINDOWINFO;
 
+enum : HRESULT
+{
+    S_OK            = 0x00000000,
+    S_FALSE         = 0x00000001,
+    E_UNEXPECTED    = 0x8000FFFF,
+    E_NOTIMPL       = 0x80004001,
+    E_OUTOFMEMORY   = 0x8007000E,
+    E_INVALIDARG    = 0x80070057,
+    E_NOINTERFACE   = 0x80004002,
+    E_POINTER       = 0x80004003,
+    E_HANDLE        = 0x80070006,
+    E_ABORT         = 0x80004004,
+    E_FAIL          = 0x80004005,
+    E_ACCESSDENIED  = 0x80070005,
+    E_PENDING       = 0x8000000A,
+}
+
 /*
-int S_OK = (0x00000000);
-int S_FALSE = (0x00000001);
-int NOERROR = (0);
-int E_UNEXPECTED = (DWORD)((0x8000FFFF));
-int E_NOTIMPL = (DWORD)((0x80004001));
-int E_OUTOFMEMORY = (DWORD)((0x8007000E));
-int E_INVALIDARG = (DWORD)((0x80070057));
-int E_NOINTERFACE = (DWORD)((0x80004002));
-int E_POINTER = (DWORD)((0x80004003));
-int E_HANDLE = (DWORD)((0x80070006));
-int E_ABORT = (DWORD)((0x80004004));
-int E_FAIL = (DWORD)((0x80004005));
-int E_ACCESSDENIED = (DWORD)((0x80070005));
-int E_PENDING = (DWORD)((0x8000000A));
 int CO_E_INIT_TLS = (DWORD)((0x80004006));
 int CO_E_INIT_MEMORY_ALLOCATOR = (DWORD)((0x80004008));
 int CO_E_INIT_CLASS_CACHE = (DWORD)((0x80004009));
@@ -13797,11 +14020,12 @@
   LPCTSTR lpApplicationName;
   HMODULE hModule;
 }
-version(ANSI) alias ACTCTXA ACTCTX;
+version(Win32SansUnicode) alias ACTCTXA ACTCTX;
 else          alias ACTCTXW ACTCTX;
 alias HANDLE HACTCTX;
 
-struct OSVERSIONINFOEX {
+struct OSVERSIONINFOEX
+{
   DWORD dwOSVersionInfoSize;
   DWORD dwMajorVersion;
   DWORD dwMinorVersion;
@@ -13974,33 +14198,6 @@
 //}
 
 
-struct BROWSEINFOA {
-    HWND hwndOwner;
-    LPCITEMIDLIST pidlRoot;
-    LPSTR pszDisplayName;
-    LPCSTR lpszTitle;
-    UINT ulFlags;
-    BFFCALLBACK lpfn;
-    LPARAM lParam;
-    int iImage;
-}
-
-struct BROWSEINFOW {
-    HWND hwndOwner;
-    LPCITEMIDLIST pidlRoot;
-    LPWSTR pszDisplayName;
-    LPCWSTR lpszTitle;
-    UINT ulFlags;
-    BFFCALLBACK lpfn;
-    LPARAM lParam;
-    int iImage;
-}
-version(ANSI){
-    alias BROWSEINFOA BROWSEINFO;
-} else {
-    alias BROWSEINFOW BROWSEINFO;
-}
-alias BROWSEINFO* PBROWSEINFO, LPBROWSEINFO;
 
 //struct CHARSETINFO {
 //    UINT ciCharset;
@@ -14009,36 +14206,6 @@
 //}alias CHARSETINFO* PCHARSETINFO, LPCHARSETINFO;
 
 
-struct CHOOSECOLORA {
-    DWORD        lStructSize;
-    HWND         hwndOwner;
-    HWND         hInstance;
-    COLORREF     rgbResult;
-    COLORREF*    lpCustColors;
-    DWORD        Flags;
-    LPARAM       lCustData;
-    LPCCHOOKPROC lpfnHook;
-    LPCSTR      lpTemplateName;
-}
-alias CHOOSECOLORA* PCHOOSECOLORA, LPCHOOSECOLORA;
-struct CHOOSECOLORW {
-    DWORD        lStructSize;
-    HWND         hwndOwner;
-    HWND         hInstance;
-    COLORREF     rgbResult;
-    COLORREF*    lpCustColors;
-    DWORD        Flags;
-    LPARAM       lCustData;
-    LPCCHOOKPROC lpfnHook;
-    LPCWSTR      lpTemplateName;
-}
-alias CHOOSECOLORW* PCHOOSECOLORW, LPCHOOSECOLORW;
-version(ANSI){
-    alias CHOOSECOLORA CHOOSECOLOR;
-}else{
-    alias CHOOSECOLORW CHOOSECOLOR;
-}
-alias CHOOSECOLOR* PCHOOSECOLOR, LPCHOOSECOLOR;
 
 
 struct CHOOSEFONTA {
@@ -14082,7 +14249,7 @@
     INT          nSizeMin;
     INT          nSizeMax;
 }alias CHOOSEFONTW* PCHOOSEFONTW, LPCHOOSEFONTW;
-version(ANSI){
+version(Win32SansUnicode){
     alias CHOOSEFONTA CHOOSEFONT;
 }else{
     alias CHOOSEFONTW CHOOSEFONT;
@@ -14105,21 +14272,6 @@
 //}
 //alias COMPOSITIONFORM* LPCOMPOSITIONFORM;
 
-struct CREATESTRUCT {
-    int lpCreateParams;
-    HINSTANCE hInstance;
-    HMENU hMenu;
-    HWND hwndParent;
-    int cy;
-    int cx;
-    int y;
-    int x;
-    int style;
-    int lpszName;
-    int lpszClass;
-    int dwExStyle;
-}
-
 // const uint CCHDEVICENAME = 32;
 // const uint CCHFORMNAME = 32;
 
@@ -14217,45 +14369,39 @@
 }
 
 //PORTING_TODO: defined in tango
-//version(ANSI){
+//version(Win32SansUnicode){
 //    alias DEVMODEA DEVMODE;
 //}else{
 //    alias DEVMODEW DEVMODE;
 //}
-struct DEVNAMES {
-    WORD wDriverOffset;
-    WORD wDeviceOffset;
-    WORD wOutputOffset;
-    WORD wDefault;
-}
-
-struct DIBSECTION {
-    // BITMAP
-    int bmType;
-    int bmWidth;
-    int bmHeight;
-    int bmWidthBytes;
-    short bmPlanes;
-    short bmBitsPixel;
-    void* bmBits;
-    // end BITMAP
-    int biSize;
-    int biWidth;
-    int biHeight;
-    short biPlanes;
-    short biBitCount;
-    int biCompression;
-    int biSizeImage;
-    int biXPelsPerMeter;
-    int biYPelsPerMeter;
-    int biClrUsed;
-    int biClrImportant;
-    int dsBitfields0;
-    int dsBitfields1;
-    int dsBitfields2;
-    int dshSection;
-    int dsOffset;
-}
+
+//struct DIBSECTION {
+//    // BITMAP
+//    int bmType;
+//    int bmWidth;
+//    int bmHeight;
+//    int bmWidthBytes;
+//    short bmPlanes;
+//    short bmBitsPixel;
+//    void* bmBits;
+//    // end BITMAP
+//    int biSize;
+//    int biWidth;
+//    int biHeight;
+//    short biPlanes;
+//    short biBitCount;
+//    int biCompression;
+//    int biSizeImage;
+//    int biXPelsPerMeter;
+//    int biYPelsPerMeter;
+//    int biClrUsed;
+//    int biClrImportant;
+//    int dsBitfields0;
+//    int dsBitfields1;
+//    int dsBitfields2;
+//    int dshSection;
+//    int dsOffset;
+//}
 
 struct DLLVERSIONINFO {
     DWORD cbSize;
@@ -14265,40 +14411,7 @@
     DWORD dwPlatformID;
 }
 
-struct DOCINFOA {
-    int     cbSize;
-    LPCSTR   lpszDocName;
-    LPCSTR   lpszOutput;
-    LPCSTR   lpszDatatype;
-    DWORD    fwType;
-}
-
-struct DOCINFOW {
-    int     cbSize;
-    LPCWSTR  lpszDocName;
-    LPCWSTR  lpszOutput;
-    LPCWSTR  lpszDatatype;
-    DWORD    fwType;
-}
-version(ANSI){
-    alias DOCINFOA DOCINFO;
-}else{
-    alias DOCINFOW DOCINFO;
-}
-alias DOCINFO* LPDOCINFO;
-
-
-struct DRAWITEMSTRUCT {
-    UINT  CtlType;
-    UINT  CtlID;
-    UINT  itemID;
-    UINT  itemAction;
-    UINT  itemState;
-    HWND  hwndItem;
-    HDC   hDC;
-    RECT  rcItem;
-    DWORD itemData;
-}
+
 
 struct DROPFILES {
     DWORD  pFiles; // Offset of the file list from the beginning of this structure, in bytes.
@@ -14335,7 +14448,7 @@
 //     WCHAR  elfStyle[LF_FACESIZE];
 //     WCHAR  elfScript[LF_FACESIZE];
 // }
-// version(ANSI){
+// version(Win32SansUnicode){
 //     alias ENUMLOGFONTA ENUMLOGFONT;
 //     alias ENUMLOGFONTEXA ENUMLOGFONTEX;
 // }else {
@@ -14349,40 +14462,6 @@
 //    DWORD dwHighDateTime;
 //}
 
-struct FONTSIGNATURE {
-    DWORD  fsUsb[4];
-    DWORD  fsCsb[2];
-}
-
-struct GCP_RESULTSA {
-    DWORD   lStructSize;
-    LPSTR     lpOutString;
-    UINT  *lpOrder;
-    int   *lpDx;
-    int   *lpCaretPos;
-    LPSTR   lpClass;
-    LPWSTR  lpGlyphs;
-    UINT    nGlyphs;
-    int     nMaxFit;
-}
-
-struct GCP_RESULTSW {
-    DWORD   lStructSize;
-    LPWSTR    lpOutString;
-    UINT  *lpOrder;
-    int   *lpDx;
-    int   *lpCaretPos;
-    LPSTR   lpClass;
-    LPWSTR  lpGlyphs;
-    UINT    nGlyphs;
-    int     nMaxFit;
-}
-version(ANSI){
-    alias GCP_RESULTSA GCP_RESULTS;
-}else{
-    alias GCP_RESULTSW GCP_RESULTS;
-}
-alias GCP_RESULTS* LPGCP_RESULTS;
 
 
 struct GOFFSET {
@@ -14429,39 +14508,13 @@
     int     iImage;
     int     iOrder;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias HDITEMA HDITEM;
 }else{
     alias HDITEMW HDITEM;
 }
 alias HDITEM* LPHDITEM;
 
-struct HELPINFO {
-    UINT     cbSize;
-    int      iContextType;
-    int      iCtrlId;
-    HANDLE   hItemHandle;
-    DWORD    dwContextId;
-    POINT    MousePos;
-}
-alias HELPINFO* LPHELPINFO;
-
-struct HIGHCONTRASTA {
-    UINT             cbSize;
-    DWORD            dwFlags;
-    LPSTR           lpszDefaultScheme;
-}
-struct HIGHCONTRASTW {
-    UINT             cbSize;
-    DWORD            dwFlags;
-    LPWSTR           lpszDefaultScheme;
-}
-version(ANSI){
-    alias HIGHCONTRASTA HIGHCONTRAST;
-}else{
-    alias HIGHCONTRASTW HIGHCONTRAST;
-}
-
 
 //struct ICONINFO {
 //   BOOL    fIcon;
@@ -14507,55 +14560,6 @@
 //   LONG     lbHatch;
 // }
 
-struct LOGFONTA {
-  int lfHeight;
-  int lfWidth;
-  int lfEscapement;
-  int lfOrientation;
-  int lfWeight;
-  byte lfItalic;
-  byte lfUnderline;
-  byte lfStrikeOut;
-  byte lfCharSet;
-  byte lfOutPrecision;
-  byte lfClipPrecision;
-  byte lfQuality;
-  byte lfPitchAndFamily;
-  char lfFaceName[LF_FACESIZE];
-}
-alias LOGFONTA* LPLOGFONTA;
-
-struct LOGFONTW {
-   LONG lfHeight;
-   LONG lfWidth;
-   LONG lfEscapement;
-   LONG lfOrientation;
-   LONG lfWeight;
-   BYTE lfItalic;
-   BYTE lfUnderline;
-   BYTE lfStrikeOut;
-   BYTE lfCharSet;
-   BYTE lfOutPrecision;
-   BYTE lfClipPrecision;
-   BYTE lfQuality;
-   BYTE lfPitchAndFamily;
-   WCHAR lfFaceName[LF_FACESIZE];
-}
-alias LOGFONTW* PLOGFONTW, LPLOGFONTW;
-version(ANSI){
-    alias LOGFONTA LOGFONT;
-} else {
-    alias LOGFONTW LOGFONT;
-}
-alias LOGFONT* PLOGFONT;
-alias LOGFONT* LPLOGFONT;
-
-
-struct LOGPEN {
-    UINT     lopnStyle;
-    POINT    lopnWidth;
-    COLORREF lopnColor;
-}
 
 struct LVCOLUMNA {
     UINT mask;
@@ -14577,7 +14581,7 @@
     int iImage;
     int iOrder;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias LVCOLUMNA LVCOLUMN;
 }else{
     alias LVCOLUMNW LVCOLUMN;
@@ -14601,13 +14605,14 @@
 }
 alias LVFINDINFOW* LPFINDINFOW;
 
-version(ANSI){
+version(Win32SansUnicode){
     alias LVFINDINFOA LVFINDINFO;
 }else{
     alias LVFINDINFOW LVFINDINFO;
 }
 
-struct LVHITTESTINFO {
+struct LVHITTESTINFO
+{
     POINT pt;
     UINT flags;
     int iItem;
@@ -14639,7 +14644,7 @@
     LPARAM lParam;
     int iIndent;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias LVITEMA LVITEM;
 }else{
     alias LVITEMW LVITEM;
@@ -14653,15 +14658,6 @@
     int cyBottomHeight;
 }
 
-struct MEASUREITEMSTRUCT {
-    UINT   CtlType;
-    UINT   CtlID;
-    UINT   itemID;
-    UINT   itemWidth;
-    UINT   itemHeight;
-    DWORD  itemData;
-}
-
 struct MENUBARINFO {
   DWORD cbSize;
   RECT  rcBar;
@@ -14720,7 +14716,7 @@
 //     UINT    cch;            // used if MIIM_TYPE
 //     HBITMAP hbmpItem;
 // }   alias MENUITEMINFOW* PMENUITEMINFOW, LPMENUITEMINFOW;
-//version(ANSI){
+//version(Win32SansUnicode){
 //    alias MENUITEMINFOA MENUITEMINFO;
 //}else{
 //    alias MENUITEMINFOW MENUITEMINFO;
@@ -14728,14 +14724,6 @@
 //alias MENUITEMINFO * LPMENUITEMINFO;
 
 
-struct MINMAXINFO {
-    POINT ptReserved;
-    POINT ptMaxSize;
-    POINT ptMaxPosition;
-    POINT ptMinTrackSize;
-    POINT ptMaxTrackSize;
-}
-
 //struct MONITORINFO {
 //    DWORD  cbSize;
 //    RECT   rcMonitor;
@@ -14822,7 +14810,7 @@
     NEWTEXTMETRICW  ntmentm;
     FONTSIGNATURE  ntmeFontSignature;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias NEWTEXTMETRICA NEWTEXTMETRIC;
     alias NEWTEXTMETRICEXA NEWTEXTMETRICEX;
 }else{
@@ -14841,12 +14829,6 @@
     LPARAM lItemlParam;
 }
 
-struct NMHDR {
-    HWND  hwndFrom;
-    UINT  idFrom;
-    UINT  code;
-}
-
 struct NMHEADER {
     NMHDR    hdr;
     int      iItem;
@@ -14882,7 +14864,7 @@
     NMHDR hdr;
     LVITEMW item;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias NMLVDISPINFOA NMLVDISPINFO;
 }else{
     alias NMLVDISPINFOW NMLVDISPINFO;
@@ -14899,7 +14881,7 @@
     int iStart;
     LVFINDINFOW lvfi;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias NMLVFINDITEMA NMLVFINDITEM;
 }else{
     alias NMLVFINDITEMW NMLVFINDITEM;
@@ -14941,7 +14923,7 @@
     int      cchText;
     LPWSTR   pszText;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias NMTOOLBARA NMTOOLBAR;
 }else{
     alias NMTOOLBARW NMTOOLBAR;
@@ -14966,7 +14948,7 @@
     UINT uFlags;
     LPARAM lParam;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias NMTTDISPINFOA NMTTDISPINFO;
 } else {
     alias NMTTDISPINFOW NMTTDISPINFO;
@@ -14981,45 +14963,6 @@
 //#endif
 }
 
-version(ANSI){
-    alias NONCLIENTMETRICSA NONCLIENTMETRICS;
-} else {
-    alias NONCLIENTMETRICSW NONCLIENTMETRICS;
-}
-struct NONCLIENTMETRICSA {
-    int cbSize;
-    int iBorderWidth;
-    int iScrollWidth;
-    int iScrollHeight;
-    int iCaptionWidth;
-    int iCaptionHeight;
-    LOGFONTA lfCaptionFont;
-    int iSmCaptionWidth;
-    int iSmCaptionHeight;
-    LOGFONTA lfSmCaptionFont;
-    int iMenuWidth;
-    int iMenuHeight;
-    LOGFONTA lfMenuFont;
-    LOGFONTA lfStatusFont;
-    LOGFONTA lfMessageFont;
-}
-struct NONCLIENTMETRICSW {
-    int cbSize;
-    int iBorderWidth;
-    int iScrollWidth;
-    int iScrollHeight;
-    int iCaptionWidth;
-    int iCaptionHeight;
-    LOGFONTW lfCaptionFont;
-    int iSmCaptionWidth;
-    int iSmCaptionHeight;
-    LOGFONTW lfSmCaptionFont;
-    int iMenuWidth;
-    int iMenuHeight;
-    LOGFONTW lfMenuFont;
-    LOGFONTW lfStatusFont;
-    LOGFONTW lfMessageFont;
-}
 
 struct NOTIFYICONDATAA {
     DWORD cbSize;
@@ -15064,7 +15007,7 @@
 }
 
 alias NOTIFYICONDATAW* PNOTIFYICONDATAW, LPNOTIFYICONDATAW;
-version(ANSI){
+version(Win32SansUnicode){
     alias NOTIFYICONDATAA NOTIFYICONDATA;
 }else{
     alias NOTIFYICONDATAW NOTIFYICONDATA;
@@ -15120,35 +15063,13 @@
 */
 
 //PORTING_TODO: is needed?
-//version(ANSI){
+//version(Win32SansUnicode){
 //    alias OPENFILENAMEA OPENFILENAME;
 //}else{
 //    alias OPENFILENAMEW OPENFILENAME;
 //}
 
 
-struct OSVERSIONINFOA {
-    DWORD dwOSVersionInfoSize;
-    DWORD dwMajorVersion;
-    DWORD dwMinorVersion;
-    DWORD dwBuildNumber;
-    DWORD dwPlatformId;
-    CHAR szCSDVersion[ 128 ];
-}alias OSVERSIONINFOA* POSVERSIONINFOA, LPOSVERSIONINFOA;
-
-struct OSVERSIONINFOW {
-    DWORD dwOSVersionInfoSize;
-    DWORD dwMajorVersion;
-    DWORD dwMinorVersion;
-    DWORD dwBuildNumber;
-    DWORD dwPlatformId;
-    WCHAR szCSDVersion[ 128 ];
-}alias OSVERSIONINFOW* POSVERSIONINFOW, LPOSVERSIONINFOW;
-version(ANSI){
-    alias OSVERSIONINFOA OSVERSIONINFO;
-}else{
-    alias OSVERSIONINFOW OSVERSIONINFO;
-}
 //struct PAINTSTRUCT {
 //  int hdc;
 //  int fErase;
@@ -15211,7 +15132,7 @@
     HANDLE    hSetupTemplate;
 }
 alias PRINTDLGW* PPRINTDLGW, LPPRINTDLGW;
-version(ANSI){
+version(Win32SansUnicode){
     alias PRINTDLGA PRINTDLG;
 }else{
     alias PRINTDLGW PRINTDLG;
@@ -15263,7 +15184,7 @@
     UINT        cxHeader;
     /* Note in WinCE.  The field cxHeader is not defined. */
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias REBARBANDINFOA REBARBANDINFO;
 }else{
     alias REBARBANDINFOW REBARBANDINFO;
@@ -15281,13 +15202,6 @@
 //    char          Buffer[1];
 //} alias RGNDATA* PRGNDATA, LPRGNDATA;
 
-struct RGNDATAHEADER {
-    DWORD dwSize;
-    DWORD iType;
-    DWORD nCount;
-    DWORD nRgnSize;
-    RECT  rcBound;
-} alias RGNDATAHEADER* PRGNDATAHEADER, LPRGNDATAHEADER;
 
 
 template BITWISE(T)
@@ -15543,18 +15457,13 @@
     HANDLE hIcon;
     HANDLE hProcess;
 } alias SHELLEXECUTEINFOW* PSHELLEXECUTEINFOW, LPSHELLEXECUTEINFOW;
-version(ANSI){
+version(Win32SansUnicode){
     alias SHELLEXECUTEINFOA SHELLEXECUTEINFO;
 }else{
     alias SHELLEXECUTEINFOW SHELLEXECUTEINFO;
 }
 alias SHELLEXECUTEINFO* LPSHELLEXECUTEINFO;
 
-struct SHITEMID {
-    USHORT cb;
-    BYTE   abID[1];
-}
-alias SHITEMID* LPCSHITEMID;
 
 //version(WinCE)
 //{
@@ -15594,22 +15503,6 @@
 //alias SIZE SIZEL;
 
 
-struct TBBUTTON {
-    align(2):
-    int     iBitmap;
-    int     idCommand;
-    BYTE    fsState;
-    BYTE    fsStyle;
-//#ifdef _WIN64
-//    BYTE     bReserved[6]     // padding for alignment
-//#elif defined(_WIN32)
-//    BYTE     bReserved[2]     // padding for alignment
-//#endif
-    DWORD_PTR   dwData;
-    INT_PTR     iString;
-}
-alias TBBUTTON* PTBBUTTON, LPTBBUTTON;
-
 struct TBBUTTONINFOA{
     align(2):
     UINT cbSize;
@@ -15636,7 +15529,7 @@
     LPWSTR pszText;
     int cchText;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias TBBUTTONINFOA TBBUTTONINFO;
 }else{
     alias TBBUTTONINFOW TBBUTTONINFO;
@@ -15661,46 +15554,12 @@
     int iImage;
     LPARAM lParam;
 }
-version(ANSI){
+version(Win32SansUnicode){
     alias TCITEMA TCITEM;
 }else{
     alias TCITEMW TCITEM;
 }
 
-// declared in phobos alread
-//struct TEXTMETRICA {
-//}
-struct TEXTMETRICW {
-    align(1):
-    LONG tmHeight;
-    LONG tmAscent;
-    LONG tmDescent;
-    LONG tmInternalLeading;
-    LONG tmExternalLeading;
-    LONG tmAveCharWidth;
-    LONG tmMaxCharWidth;
-    LONG tmWeight;
-    LONG tmOverhang;
-    LONG tmDigitizedAspectX;
-    LONG tmDigitizedAspectY;
-
-    wchar tmFirstChar;
-    wchar tmLastChar;
-    wchar tmDefaultChar;
-    wchar tmBreakChar;
-
-    BYTE tmItalic;
-    BYTE tmUnderlined;
-    BYTE tmStruckOut;
-    BYTE tmPitchAndFamily;
-    BYTE tmCharSet;
-}
-version(ANSI){
-    alias TEXTMETRICA TEXTMETRIC;
-} else {
-    alias TEXTMETRICW TEXTMETRIC;
-}
-alias TEXTMETRIC* LPTEXTMETRIC;
 
 // struct TOOLINFOA {
 //     UINT cbSize;
@@ -15722,7 +15581,7 @@
 //     LPWSTR lpszText;
 //     LPARAM lParam;
 // }
-// version(ANSI){
+// version(Win32SansUnicode){
 //     alias TOOLINFOA TOOLINFO;
 // }else{
 //     alias TOOLINFOW TOOLINFO;
@@ -15754,66 +15613,9 @@
 }
 
 
-struct TVINSERTSTRUCTA {
-    HTREEITEM hParent;
-    HTREEITEM hInsertAfter;
-    TVITEMA item;
-}
-struct TVINSERTSTRUCTW {
-    HTREEITEM hParent;
-    HTREEITEM hInsertAfter;
-    TVITEMW item;
-}
-version(ANSI){
-    alias TVINSERTSTRUCTA TVINSERTSTRUCT;
-}else{
-    alias TVINSERTSTRUCTW TVINSERTSTRUCT;
-}
-
-
-struct TVITEMA {
-    UINT      mask;
-    HTREEITEM hItem;
-    UINT      state;
-    UINT      stateMask;
-    LPSTR    pszText;
-    int       cchTextMax;
-    int       iImage;
-    int       iSelectedImage;
-    int       cChildren;
-    LPARAM    lParam;
-}
-struct TVITEMW {
-    UINT      mask;
-    HTREEITEM hItem;
-    UINT      state;
-    UINT      stateMask;
-    LPWSTR    pszText;
-    int       cchTextMax;
-    int       iImage;
-    int       iSelectedImage;
-    int       cChildren;
-    LPARAM    lParam;
-}
-version(ANSI){
-    alias TVITEMA TVITEM;
-}else{
-    alias TVITEMW TVITEM;
-}
-alias TVITEM* LPTVITEM;
-
-union ULARGE_INTEGER {
-    struct {
-        DWORD LowPart;
-        DWORD HighPart;
-    };
-    struct u {
-        DWORD LowPart;
-        DWORD HighPart;
-    };
-    DWORDLONG QuadPart;
-}
-alias ULARGE_INTEGER * PULARGE_INTEGER;
+
+
+
 
 //alias extern(Windows) int (*PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM);
 struct TVSORTCB {
@@ -15859,7 +15661,7 @@
 // }alias WNDCLASSW* PWNDCLASSW, LPWNDCLASSW;
 //
 // // since phobos has alias WNDCLASSA to WNDCLASS, we have to alias it another name
-// version(ANSI){
+// version(Win32SansUnicode){
 //     alias WNDCLASSA WNDCLASS_T;
 // }else{
 //     alias WNDCLASSW WNDCLASS_T;
@@ -15931,20 +15733,23 @@
 }
 alias SCROLLBARINFO* PSCROLLBARINFO;
 
-struct NMTREEVIEW {
-    NMHDR hdr;
-    UINT action;
-    TVITEM itemOld;
-    TVITEM itemNew;
-    POINT ptDrag;
-}
-alias NMTREEVIEW* PNMTREEVIEW;
-alias NMTREEVIEW* LPNMTREEVIEW;
-
 }   // end of extern(Windows)
 
 
 
 
 
-
+// shlwapi.h
+enum {ASSOCF_INIT_BYEXENAME,
+    ASSOCF_OPEN_BYEXENAME,
+    ASSOCF_INIT_DEFAULTTOSTAR,
+    ASSOCF_INIT_DEFAULTTOFOLDER,
+    ASSOCF_NOUSERSETTINGS,
+    ASSOCF_NOTRUNCATE,
+    ASSOCF_VERIFY,
+    ASSOCF_REMAPRUNDLL,
+    ASSOCF_NOFIXUPS,
+    ASSOCF_IGNOREBASECLASS
+};
+
+alias DWORD ASSOCF;
--- a/dwt/widgets/Combo.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Combo.d	Thu Jun 19 03:25:36 2008 +0200
@@ -1048,7 +1048,7 @@
     int mbcsSize = OS.GetWindowTextLengthA (hwndText);
     if (mbcsSize is 0) return 0;
     if (mbcsPos >= mbcsSize) return mbcsSize;
-    char [] buffer = new char [mbcsSize + 1];
+    CHAR [] buffer = new CHAR [mbcsSize + 1];
     buffer[] = 0;
     OS.GetWindowTextA (hwndText, buffer.ptr, mbcsSize + 1);
     return OS.MultiByteToWideChar (getCodePage (), OS.MB_PRECOMPOSED, buffer.ptr, mbcsPos, null, 0);
@@ -1993,7 +1993,7 @@
     if (hwndText is null) return wcsPos;
     int mbcsSize = OS.GetWindowTextLengthA (hwndText);
     if (mbcsSize is 0) return 0;
-    char [] buffer = new char [mbcsSize + 1];
+    CHAR [] buffer = new CHAR [mbcsSize + 1];
     OS.GetWindowTextA (hwndText, buffer.ptr, mbcsSize + 1);
     int mbcsPos = 0, wcsCount = 0;
     while (mbcsPos < mbcsSize) {
--- a/dwt/widgets/Composite.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Composite.d	Thu Jun 19 03:25:36 2008 +0200
@@ -1764,7 +1764,7 @@
                     }
 
                     if (hdr.code is OS.TTN_GETDISPINFOA) {
-                        auto bytes = MBCSsToStr( chars, getCodePage () );
+                        auto bytes = MBCSsToStr( cast(CHAR[])chars, getCodePage () );
                         //byte [] bytes = new byte [chars.length * 2];
                         //OS.WideCharToMultiByte (getCodePage (), 0, chars.ptr, chars.length, bytes, bytes.length, null, null);
                         shell.setToolTipText (lpnmtdi, bytes);
--- a/dwt/widgets/Display.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Display.d	Thu Jun 19 03:25:36 2008 +0200
@@ -2906,14 +2906,14 @@
     if (OS.IsUnicode) return cast(wchar) ch;
     int key = ch & 0xFFFF;
     if (key <= 0x7F) return cast(wchar) ch;
-    char [] buffer;
+    CHAR[] buffer;
     if (key <= 0xFF) {
-        buffer = new char [1];
-        buffer [0] = cast(char) key;
+        buffer = new CHAR [1];
+        buffer [0] = cast(CHAR) key;
     } else {
-        buffer = new char [2];
-        buffer [0] = cast(char) ((key >> 8) & 0xFF);
-        buffer [1] = cast(char) (key & 0xFF);
+        buffer = new CHAR [2];
+        buffer [0] = cast(CHAR) ((key >> 8) & 0xFF);
+        buffer [1] = cast(CHAR) (key & 0xFF);
     }
     wchar [] unicode = new wchar [1];
     int cp = codePage !is 0 ? codePage : OS.CP_ACP;
--- a/dwt/widgets/Shell.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Shell.d	Thu Jun 19 03:25:36 2008 +0200
@@ -1687,7 +1687,7 @@
     }
 }
 
-void setToolTipText (NMTTDISPINFO* lpnmtdi, byte [] buffer) {
+void setToolTipText (NMTTDISPINFO* lpnmtdi, CHAR [] buffer) {
     /*
     * Ensure that the current position of the mouse
     * is inside the client area of the shell.  This
@@ -1703,7 +1703,7 @@
     lpnmtdi.lpszText = lpstrTip;
 }
 
-void setToolTipText (NMTTDISPINFO* lpnmtdi, wchar [] buffer) {
+void setToolTipText (NMTTDISPINFO* lpnmtdi, WCHAR [] buffer) {
     /*
     * Ensure that the current position of the mouse
     * is inside the client area of the shell.  This
--- a/dwt/widgets/Spinner.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Spinner.d	Thu Jun 19 03:25:36 2008 +0200
@@ -654,7 +654,7 @@
     int mbcsSize = OS.GetWindowTextLengthA (hwndText);
     if (mbcsSize is 0) return 0;
     if (mbcsPos >= mbcsSize) return mbcsSize;
-    char [] buffer = new char [mbcsSize + 1];
+    CHAR [] buffer = new CHAR [mbcsSize + 1];
     OS.GetWindowTextA (hwndText, buffer.ptr, mbcsSize + 1);
     return OS.MultiByteToWideChar (getCodePage (), OS.MB_PRECOMPOSED, buffer.ptr, mbcsPos, null, 0);
 }
--- a/dwt/widgets/Table.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Table.d	Thu Jun 19 03:25:36 2008 +0200
@@ -6749,7 +6749,7 @@
                                     Shell shell = getShell ();
                                     wchar [] chars = StrToTCHARs(string, true );
                                     if (hdr.code is OS.TTN_GETDISPINFOA) {
-                                        char [] bytes = new char [chars.length * 2];
+                                        CHAR [] bytes = new CHAR [chars.length * 2];
                                         OS.WideCharToMultiByte (getCodePage (), 0, chars.ptr, chars.length, bytes.ptr, bytes.length, null, null);
                                         shell.setToolTipText (lpnmtdi, bytes);
                                         OS.MoveMemory (lParam, cast(NMTTDISPINFOA*)lpnmtdi, NMTTDISPINFOA.sizeof);
--- a/dwt/widgets/Text.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Text.d	Thu Jun 19 03:25:36 2008 +0200
@@ -1249,7 +1249,7 @@
     if (OS.IsUnicode) return mbcsPos;
     int cp = getCodePage ();
     int wcsTotal = 0, mbcsTotal = 0;
-    char [] buffer = new char [128];
+    CHAR [] buffer = new CHAR [128];
     String delimiter = getLineDelimiter();
     int delimiterSize = delimiter.length;
     int count = OS.SendMessageA (handle, OS.EM_GETLINECOUNT, 0, 0);
@@ -1259,7 +1259,7 @@
         int mbcsSize = OS.SendMessageA (handle, OS.EM_LINELENGTH, linePos, 0);
         if (mbcsSize !is 0) {
             if (mbcsSize + delimiterSize > buffer.length) {
-                buffer = new char [mbcsSize + delimiterSize];
+                buffer = new CHAR [mbcsSize + delimiterSize];
             }
             //ENDIAN
             buffer [0] = cast(char) (mbcsSize & 0xFF);
@@ -1269,7 +1269,7 @@
         }
         if (line - 1 !is count) {
             for (int i=0; i<delimiterSize; i++) {
-                buffer [mbcsSize++] = cast(byte) delimiter.charAt (i);
+                buffer [mbcsSize++] = cast(CHAR) delimiter.charAt (i);
             }
             wcsSize += delimiterSize;
         }
@@ -2012,7 +2012,7 @@
     if (OS.IsUnicode) return wcsPos;
     int cp = getCodePage ();
     int wcsTotal = 0, mbcsTotal = 0;
-    char [] buffer = new char [128];
+    CHAR [] buffer = new CHAR [128];
     String delimiter = getLineDelimiter ();
     int delimiterSize = delimiter.length;
     int count = OS.SendMessageA (handle, OS.EM_GETLINECOUNT, 0, 0);
@@ -2022,7 +2022,7 @@
         int mbcsSize = OS.SendMessageA (handle, OS.EM_LINELENGTH, linePos, 0);
         if (mbcsSize !is 0) {
             if (mbcsSize + delimiterSize > buffer.length) {
-                buffer = new char [mbcsSize + delimiterSize];
+                buffer = new CHAR [mbcsSize + delimiterSize];
             }
             //ENDIAN
             buffer [0] = cast(char) (mbcsSize & 0xFF);
--- a/dwt/widgets/Tree.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/Tree.d	Thu Jun 19 03:25:36 2008 +0200
@@ -276,7 +276,7 @@
 TreeItem _getItem (HANDLE hItem) {
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-    tvItem.hItem = hItem;
+    tvItem.hItem = cast(HTREEITEM)hItem;
     if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem) !is 0) {
         return _getItem (tvItem.hItem, tvItem.lParam);
     }
@@ -1248,7 +1248,7 @@
                         OS.SetRect (&rect, nmcd.nmcd.rc.left, nmcd.nmcd.rc.top, nmcd.nmcd.rc.left + hdItem.cxy, nmcd.nmcd.rc.bottom);
                         if (OS.COMCTL32_MAJOR < 6 || !OS.IsAppThemed ()) {
                             RECT itemRect;
-                            if (OS.TreeView_GetItemRect (handle, item.handle, &itemRect, true)) {
+                            if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)item.handle, &itemRect, true)) {
                                 rect.left = Math.min (itemRect.left, rect.right);
                             }
                         }
@@ -1385,7 +1385,7 @@
                         }
                         if (hItem !is null) {
                             RECT rect;
-                            if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) {
+                            if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) {
                                 top = rect.bottom;
                             }
                         }
@@ -1440,7 +1440,7 @@
                 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_LASTVISIBLE, 0);
             }
             if (hItem !is null) {
-                if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) {
+                if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) {
                     height = rect.bottom - rect.top;
                 }
             }
@@ -1496,7 +1496,7 @@
                 if (hItem !is null) {
                     TVITEM tvItem;
                     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
-                    tvItem.hItem = hItem;
+                    tvItem.hItem = cast(HTREEITEM)hItem;
                     OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
                     hSelect = hItem;
                     ignoreDeselect = ignoreSelect = lockSelection = true;
@@ -1743,7 +1743,7 @@
 }
 
 void clear (HANDLE hItem, TVITEM* tvItem) {
-    tvItem.hItem = hItem;
+    tvItem.hItem = cast(HTREEITEM)hItem;
     TreeItem item = null;
     if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem) !is 0) {
         item = tvItem.lParam !is -1 ? items [tvItem.lParam] : null;
@@ -1835,13 +1835,13 @@
         if ((style & DWT.VIRTUAL) is 0 && !painted) {
             TVITEM tvItem;
             tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT;
-            tvItem.hItem = hItem;
+            tvItem.hItem = cast(HTREEITEM)hItem;
             tvItem.pszText = OS.LPSTR_TEXTCALLBACK;
             ignoreCustomDraw = true;
             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
             ignoreCustomDraw = false;
         }
-        if (OS.TreeView_GetItemRect (handle, hItem, &rect, true)) {
+        if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, true)) {
             width = Math.max (width, rect.right);
             height += rect.bottom - rect.top;
         }
@@ -2113,8 +2113,8 @@
     bool fixParent = hFirstItem is null;
     if (hItem is null) {
         TVINSERTSTRUCT tvInsert;
-        tvInsert.hParent = hParent;
-        tvInsert.hInsertAfter = hInsertAfter;
+        tvInsert.hParent = cast(HTREEITEM)hParent;
+        tvInsert.hInsertAfter = cast(HTREEITEM)hInsertAfter;
         tvInsert.item.lParam = id;
         tvInsert.item.pszText = OS.LPSTR_TEXTCALLBACK;
         tvInsert.item.iImage = tvInsert.item.iSelectedImage = cast(HBITMAP) OS.I_IMAGECALLBACK;
@@ -2139,7 +2139,7 @@
     } else {
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-        tvItem.hItem = hNewItem = hItem;
+        tvItem.hItem = cast(HTREEITEM)( hNewItem = hItem );
         tvItem.lParam = id;
         OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
     }
@@ -2165,7 +2165,7 @@
         if (fixParent) {
             if (drawCount is 0 && OS.IsWindowVisible (handle)) {
                 RECT rect;
-                if (OS.TreeView_GetItemRect (handle, hParent, &rect, false)) {
+                if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hParent, &rect, false)) {
                     OS.InvalidateRect (handle, &rect, true);
                 }
             }
@@ -2180,7 +2180,7 @@
         if ((style & DWT.VIRTUAL) !is 0) {
             if (currentItem !is null) {
                 RECT rect;
-                if (OS.TreeView_GetItemRect (handle, hNewItem, &rect, false)) {
+                if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect, false)) {
                     RECT damageRect;
                     bool damaged = cast(bool) OS.GetUpdateRect (handle, &damageRect, true);
                     if (damaged && damageRect.top < rect.bottom) {
@@ -2348,7 +2348,7 @@
 void deselect (HANDLE hItem, TVITEM* tvItem, HANDLE hIgnoreItem) {
     while (hItem !is null) {
         if (hItem !is hIgnoreItem) {
-            tvItem.hItem = hItem;
+            tvItem.hItem = cast(HTREEITEM)hItem;
             OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
         }
         auto hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem);
@@ -2381,7 +2381,7 @@
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
     tvItem.stateMask = OS.TVIS_SELECTED;
-    tvItem.hItem = item.handle;
+    tvItem.hItem = cast(HTREEITEM)item.handle;
     OS.SendMessage (handle, OS.TVM_SETITEM, 0, cast(int)&tvItem);
 }
 
@@ -2401,7 +2401,7 @@
     if ((style & DWT.SINGLE) !is 0) {
         HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0);
         if (hItem !is null) {
-            tvItem.hItem = hItem;
+            tvItem.hItem = cast(HTREEITEM)hItem;
             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
         }
     } else {
@@ -2414,7 +2414,7 @@
             for (int i=0; i<items.length; i++) {
                 TreeItem item = items [i];
                 if (item !is null) {
-                    tvItem.hItem = item.handle;
+                    tvItem.hItem = cast(HTREEITEM)item.handle;
                     OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                 }
             }
@@ -2584,7 +2584,7 @@
     if ((style & DWT.DOUBLE_BUFFERED) is 0) {
         if (drawCount is 0 && OS.IsWindowVisible (handle)) {
             RECT rect;
-            fixRedraw = !OS.TreeView_GetItemRect (handle, hItem, &rect, false);
+            fixRedraw = !OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false);
         }
     }
     if (fixRedraw) {
@@ -2630,7 +2630,7 @@
         */
         if (OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hParent) is 0) {
             RECT rect;
-            if (OS.TreeView_GetItemRect (handle, hParent, &rect, false)) {
+            if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hParent, &rect, false)) {
                 OS.InvalidateRect (handle, &rect, true);
             }
         }
@@ -3146,7 +3146,7 @@
         if (id is -1) {
             TVITEM tvItem;
             tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-            tvItem.hItem = cast(HANDLE) nmcd.nmcd.dwItemSpec;
+            tvItem.hItem = cast(HTREEITEM) nmcd.nmcd.dwItemSpec;
             OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
             id = tvItem.lParam;
         }
@@ -3288,7 +3288,7 @@
     TreeItem [] result = new TreeItem [count];
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-    tvItem.hItem = hTreeItem;
+    tvItem.hItem = cast(HTREEITEM)hTreeItem;
     /*
     * Feature in Windows.  In some cases an expand or collapse message
     * can occur from within TVM_DELETEITEM.  When this happens, the item
@@ -3300,7 +3300,7 @@
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
         TreeItem item = _getItem (tvItem.hItem, tvItem.lParam);
         if (item !is null) result [index++] = item;
-        tvItem.hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, tvItem.hItem);
+        tvItem.hItem = cast(HTREEITEM) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, tvItem.hItem);
     }
     if (index !is count) {
         TreeItem [] newResult = new TreeItem [index];
@@ -3373,7 +3373,7 @@
 int getSelection (HANDLE hItem, TVITEM* tvItem, TreeItem [] selection, int index, int count, bool bigSelection, bool all) {
     while (hItem !is null) {
         if (OS.IsWinCE || bigSelection) {
-            tvItem.hItem = hItem;
+            tvItem.hItem = cast(HTREEITEM)hItem;
             OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem);
             if ((tvItem.state & OS.TVIS_SELECTED) !is 0) {
                 if (selection !is null && index < selection.length) {
@@ -3385,7 +3385,7 @@
             int state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED);
             if ((state & OS.TVIS_SELECTED) !is 0) {
                 if (tvItem !is null && selection !is null && index < selection.length) {
-                    tvItem.hItem = hItem;
+                    tvItem.hItem = cast(HTREEITEM)hItem;
                     OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem);
                     selection [index] = _getItem (hItem, tvItem.lParam);
                 }
@@ -3429,7 +3429,7 @@
         if (hItem is null) return new TreeItem [0];
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM | OS.TVIF_STATE;
-        tvItem.hItem = hItem;
+        tvItem.hItem = cast(HTREEITEM)hItem;
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
         if ((tvItem.state & OS.TVIS_SELECTED) is 0) return new TreeItem [0];
         return [_getItem (tvItem.hItem, tvItem.lParam)];
@@ -3761,7 +3761,7 @@
     if (OS.IsWindowEnabled (handle)) {
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
-        tvItem.hItem = cast(HANDLE) nmcd.nmcd.dwItemSpec;
+        tvItem.hItem = cast(HTREEITEM)nmcd.nmcd.dwItemSpec;
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
         if ((tvItem.state & (OS.TVIS_SELECTED | OS.TVIS_DROPHILITED)) !is 0) {
             selected = true;
@@ -3825,7 +3825,7 @@
         HANDLE hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0);
         if (hItem !is null) {
             RECT rect;
-            if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) {
+            if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) {
                 OS.InvalidateRect (handle, &rect, true);
             }
         }
@@ -3849,7 +3849,7 @@
                     state = OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED);
                 }
                 if ((state & OS.TVIS_SELECTED) !is 0) {
-                    if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) {
+                    if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) {
                         OS.InvalidateRect (handle, &rect, true);
                     }
                 }
@@ -3869,7 +3869,7 @@
 void releaseItem (HANDLE hItem, TVITEM* tvItem, bool release) {
     if (hItem is hAnchor) hAnchor = null;
     if (hItem is hInsert) hInsert = null;
-    tvItem.hItem = hItem;
+    tvItem.hItem = cast(HTREEITEM)hItem;
     if (OS.SendMessage (handle, OS.TVM_GETITEM, 0, tvItem) !is 0) {
         if (tvItem.lParam !is -1) {
             if (tvItem.lParam < lastID) lastID = tvItem.lParam;
@@ -4110,7 +4110,7 @@
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
     if (!redraw && (style & DWT.VIRTUAL) !is 0) {
         if (OS.IsWinCE) {
-            tvItem.hItem = hParent;
+            tvItem.hItem = cast(HTREEITEM)hParent;
             tvItem.mask = OS.TVIF_STATE;
             OS.SendMessage (handle, OS.TVM_GETITEM, 0, cast(int)&tvItem);
             expanded = (tvItem.state & OS.TVIS_EXPANDED) !is 0;
@@ -4126,7 +4126,7 @@
         }
     }
     while (hItem !is null) {
-        tvItem.hItem = hItem;
+        tvItem.hItem = cast(HTREEITEM)hItem;
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
         hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXT, hItem);
         TreeItem item = tvItem.lParam !is -1 ? items [tvItem.lParam] : null;
@@ -4140,7 +4140,7 @@
     if ((style & DWT.VIRTUAL) !is 0) {
         for (int i=itemCount; i<count; i++) {
             if (expanded) ignoreShrink = true;
-            createItem (null, hParent, cast(HANDLE) OS.TVI_LAST, null);
+            createItem (null, hParent, cast(HTREEITEM) OS.TVI_LAST, null);
             if (expanded) ignoreShrink = false;
         }
     } else {
@@ -4150,7 +4150,7 @@
         System.arraycopy (items, 0, newItems, 0, items.length);
         items = newItems;
         for (int i=itemCount; i<count; i++) {
-            new TreeItem (this, DWT.NONE, hParent, cast(HANDLE) OS.TVI_LAST, null);
+            new TreeItem (this, DWT.NONE, hParent, cast(HTREEITEM) OS.TVI_LAST, null);
         }
     }
     if (redraw) {
@@ -4211,7 +4211,7 @@
 
 void select (HANDLE hItem, TVITEM* tvItem) {
     while (hItem !is null) {
-        tvItem.hItem = hItem;
+        tvItem.hItem = cast(HTREEITEM)hItem;
         OS.SendMessage (handle, OS.TVM_SETITEM, 0, tvItem);
         auto hFirstItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, hItem);
         select (hFirstItem, tvItem);
@@ -4303,7 +4303,7 @@
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
     tvItem.stateMask = OS.TVIS_SELECTED;
     tvItem.state = OS.TVIS_SELECTED;
-    tvItem.hItem = item.handle;
+    tvItem.hItem = cast(HTREEITEM)item.handle;
     OS.SendMessage (handle, OS.TVM_SETITEM, 0, cast(int)&tvItem);
 }
 
@@ -4334,7 +4334,7 @@
         for (int i=0; i<items.length; i++) {
             TreeItem item = items [i];
             if (item !is null) {
-                tvItem.hItem = item.handle;
+                tvItem.hItem = cast(HTREEITEM)item.handle;
                 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
             }
         }
@@ -4755,7 +4755,7 @@
             int count = OS.SendMessage (handle, OS.TVM_GETCOUNT, 0, 0);
             if (count is 0) {
                 TVINSERTSTRUCT tvInsert;
-                tvInsert.hInsertAfter = cast(HANDLE) OS.TVI_FIRST;
+                tvInsert.hInsertAfter = cast(HTREEITEM) OS.TVI_FIRST;
                 hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_INSERTITEM, 0, &tvInsert);
             }
             OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0);
@@ -4843,7 +4843,7 @@
             if (item !is null && item.handle is hItem) break;
             index++;
         }
-        tvItem.hItem = hItem;
+        tvItem.hItem = cast(HTREEITEM)hItem;
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
         if ((tvItem.state & OS.TVIS_SELECTED) !is 0) {
             if (index is selection.length) {
@@ -4968,7 +4968,7 @@
             tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
             tvItem.state = OS.TVIS_SELECTED;
             tvItem.stateMask = OS.TVIS_SELECTED;
-            tvItem.hItem = hNewItem;
+            tvItem.hItem = cast(HTREEITEM)hNewItem;
             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
             showItem (hNewItem);
         }
@@ -4993,7 +4993,7 @@
                     if (items [index] is item) break;
                     index++;
                 }
-                tvItem.hItem = item.handle;
+                tvItem.hItem = cast(HTREEITEM)item.handle;
                 OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
                 if ((tvItem.state & OS.TVIS_SELECTED) !is 0) {
                     if (index is length) {
@@ -5141,7 +5141,7 @@
     } else {
         bool scroll = true;
         RECT itemRect;
-        if (OS.TreeView_GetItemRect (handle, hItem, &itemRect, true)) {
+        if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &itemRect, true)) {
             forceResize ();
             RECT rect;
             OS.GetClientRect (handle, &rect);
@@ -5168,7 +5168,7 @@
     }
     if (hwndParent !is null) {
         RECT itemRect;
-        if (OS.TreeView_GetItemRect (handle, hItem, &itemRect, true)) {
+        if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &itemRect, true)) {
             forceResize ();
             RECT rect;
             OS.GetClientRect (hwndParent, &rect);
@@ -5336,7 +5336,7 @@
 /*public*/ void sort () {
     checkWidget ();
     if ((style & DWT.VIRTUAL) !is 0) return;
-    sort ( cast(HANDLE) OS.TVI_ROOT, false);
+    sort ( cast(HTREEITEM) OS.TVI_ROOT, false);
 }
 
 void sort (HANDLE hParent, bool all) {
@@ -5351,7 +5351,7 @@
         //int lpfnCompare = compareCallback.getAddress ();
         sThis = this;
         TVSORTCB psort;
-        psort.hParent = hParent;
+        psort.hParent = cast(HTREEITEM)hParent;
         psort.lpfnCompare = &CompareFunc;
         psort.lParam = sortColumn is null ? 0 : indexOf (sortColumn);
         OS.SendMessage (handle, OS.TVM_SORTCHILDRENCB, all ? 1 : 0, &psort);
@@ -5781,7 +5781,7 @@
                 OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hItem);
                 TVITEM tvItem;
                 tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE | OS.TVIF_PARAM;
-                tvItem.hItem = hItem;
+                tvItem.hItem = cast(HTREEITEM)hItem;
                 if ((style & DWT.CHECK) !is 0) {
                     tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
                     OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
@@ -5937,32 +5937,32 @@
                     tvItem.stateMask = OS.TVIS_SELECTED;
                     auto hDeselectItem = hItem;
                     RECT rect1;
-                    if (!OS.TreeView_GetItemRect (handle, hAnchor, &rect1, false)) {
+                    if (!OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hAnchor, &rect1, false)) {
                         hAnchor = hItem;
-                        OS.TreeView_GetItemRect (handle, hAnchor, &rect1, false);
+                        OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hAnchor, &rect1, false);
                     }
                     RECT rect2;
-                    OS.TreeView_GetItemRect (handle, hDeselectItem, &rect2, false);
+                    OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hDeselectItem, &rect2, false);
                     int flags = rect1.top < rect2.top ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE;
                     while (hDeselectItem !is hAnchor) {
-                        tvItem.hItem = hDeselectItem;
+                        tvItem.hItem = cast(HTREEITEM)hDeselectItem;
                         OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                         hDeselectItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hDeselectItem);
                     }
                     auto hSelectItem = hAnchor;
-                    OS.TreeView_GetItemRect (handle, hNewItem, &rect1, false);
-                    OS.TreeView_GetItemRect (handle, hSelectItem, &rect2, false);
+                    OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect1, false);
+                    OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hSelectItem, &rect2, false);
                     tvItem.state = OS.TVIS_SELECTED;
                     flags = rect1.top < rect2.top ? OS.TVGN_PREVIOUSVISIBLE : OS.TVGN_NEXTVISIBLE;
                     while (hSelectItem !is hNewItem) {
-                        tvItem.hItem = hSelectItem;
+                        tvItem.hItem = cast(HTREEITEM)hSelectItem;
                         OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                         hSelectItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hSelectItem);
                     }
-                    tvItem.hItem = hNewItem;
+                    tvItem.hItem = cast(HTREEITEM)hNewItem;
                     OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-                    tvItem.hItem = hNewItem;
+                    tvItem.hItem = cast(HTREEITEM)hNewItem;
                     OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
                     Event event = new Event ();
                     event.item = _getItem (hNewItem, tvItem.lParam);
@@ -5976,7 +5976,7 @@
                     TVITEM tvItem;
                     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
                     tvItem.stateMask = OS.TVIS_SELECTED;
-                    tvItem.hItem = hItem;
+                    tvItem.hItem = cast(HTREEITEM)hItem;
                     OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
                     bool oldSelected = (tvItem.state & OS.TVIS_SELECTED) !is 0;
                     HANDLE hNewItem;
@@ -6004,7 +6004,7 @@
                             do {
                                 auto hVisible = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, hNewItem);
                                 if (hVisible is null) break;
-                                if (!OS.TreeView_GetItemRect (handle, hVisible, &rect, false)) break;
+                                if (!OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hVisible, &rect, false)) break;
                                 if (rect.bottom > clientRect.bottom) break;
                                 if ((hNewItem = hVisible) is hItem) {
                                     OS.SendMessage (handle, OS.WM_VSCROLL, OS.SB_PAGEDOWN, 0);
@@ -6018,7 +6018,7 @@
                     }
                     if (hNewItem !is null) {
                         OS.SendMessage (handle, OS.TVM_ENSUREVISIBLE, 0, hNewItem);
-                        tvItem.hItem = hNewItem;
+                        tvItem.hItem = cast(HTREEITEM)hNewItem;
                         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
                         bool newSelected = (tvItem.state & OS.TVIS_SELECTED) !is 0;
                         bool redraw = !newSelected && drawCount is 0 && OS.IsWindowVisible (handle);
@@ -6033,12 +6033,12 @@
                         hSelect = null;
                         if (oldSelected) {
                             tvItem.state = OS.TVIS_SELECTED;
-                            tvItem.hItem = hItem;
+                            tvItem.hItem = cast(HTREEITEM)hItem;
                             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                         }
                         if (!newSelected) {
                             tvItem.state = 0;
-                            tvItem.hItem = hNewItem;
+                            tvItem.hItem = cast(HTREEITEM)hNewItem;
                             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                         }
                         if (redraw) {
@@ -6046,8 +6046,8 @@
                             bool fItemRect = (style & DWT.FULL_SELECTION) is 0;
                             if (hooks (DWT.EraseItem) || hooks (DWT.PaintItem)) fItemRect = false;
                             if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) fItemRect = false;
-                            OS.TreeView_GetItemRect (handle, hItem, &rect1, fItemRect);
-                            OS.TreeView_GetItemRect (handle, hNewItem, &rect2, fItemRect);
+                            OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect1, fItemRect);
+                            OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect2, fItemRect);
                             OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0);
                             OS.InvalidateRect (handle, &rect1, true);
                             OS.InvalidateRect (handle, &rect2, true);
@@ -6203,7 +6203,7 @@
                     auto hNext = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, lpht.hItem);
                     while (hNext !is null) {
                         if (hNext is hAnchor) hAnchor = null;
-                        tvItem.hItem = hNext;
+                        tvItem.hItem = cast(HTREEITEM)hNext;
                         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
                         if ((tvItem.state & OS.TVIS_SELECTED) !is 0) deselected = true;
                         tvItem.state = 0;
@@ -6245,7 +6245,7 @@
                     auto hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0);
                     if (hItem !is null) {
                         RECT rect;
-                        if (OS.TreeView_GetItemRect (handle, hItem, &rect, false)) {
+                        if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hItem, &rect, false)) {
                             OS.InvalidateRect (handle, &rect, true);
                         }
                     }
@@ -6359,7 +6359,7 @@
     /* Get the selected state of the last selected item */
     auto hOldItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, OS.TVGN_CARET, 0);
     if ((style & DWT.MULTI) !is 0) {
-        tvItem.hItem = hOldItem;
+        tvItem.hItem = cast(HTREEITEM)hOldItem;
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
 
         /* Check for CONTROL or drag selection */
@@ -6442,7 +6442,7 @@
             tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
             tvItem.state = OS.TVIS_SELECTED;
             tvItem.stateMask = OS.TVIS_SELECTED;
-            tvItem.hItem = hNewItem;
+            tvItem.hItem = cast(HTREEITEM)hNewItem;
             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
         }
     }
@@ -6475,8 +6475,8 @@
             bool fItemRect = (style & DWT.FULL_SELECTION) is 0;
             if (hooks (DWT.EraseItem) || hooks (DWT.PaintItem)) fItemRect = false;
             if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) fItemRect = false;
-            OS.TreeView_GetItemRect (handle, hOldItem, &rect1, fItemRect);
-            OS.TreeView_GetItemRect (handle, hNewItem, &rect2, fItemRect);
+            OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hOldItem, &rect1, fItemRect);
+            OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect2, fItemRect);
             OS.DefWindowProc (handle, OS.WM_SETREDRAW, 1, 0);
             OS.InvalidateRect (handle, &rect1, true);
             OS.InvalidateRect (handle, &rect2, true);
@@ -6496,29 +6496,29 @@
                     for (int i=0; i<items.length; i++) {
                         TreeItem item = items [i];
                         if (item !is null && item.handle !is hNewItem) {
-                            tvItem.hItem = item.handle;
+                            tvItem.hItem = cast(HTREEITEM)item.handle;
                             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                         }
                     }
                 }
-                tvItem.hItem = hNewItem;
+                tvItem.hItem = cast(HTREEITEM)hNewItem;
                 tvItem.state = OS.TVIS_SELECTED;
                 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                 OS.SetWindowLongPtr (handle, OS.GWLP_WNDPROC, oldProc);
                 if ((wParam & OS.MK_SHIFT) !is 0) {
                     RECT rect1;
                     if (hAnchor is null) hAnchor = hNewItem;
-                    if (OS.TreeView_GetItemRect (handle, hAnchor, &rect1, false)) {
+                    if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hAnchor, &rect1, false)) {
                         RECT rect2;
-                        if (OS.TreeView_GetItemRect (handle, hNewItem, &rect2, false)) {
+                        if (OS.TreeView_GetItemRect (handle, cast(HTREEITEM)hNewItem, &rect2, false)) {
                             int flags = rect1.top < rect2.top ? OS.TVGN_NEXTVISIBLE : OS.TVGN_PREVIOUSVISIBLE;
                             tvItem.state = OS.TVIS_SELECTED;
-                            auto hItem = tvItem.hItem = hAnchor;
+                            auto hItem = tvItem.hItem = cast(HTREEITEM)hAnchor;
                             OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
                             while (hItem !is hNewItem) {
                                 tvItem.hItem = hItem;
                                 OS.SendMessage (handle, OS.TVM_SETITEM, 0, &tvItem);
-                                hItem = cast(HANDLE) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hItem);
+                                hItem = cast(HTREEITEM) OS.SendMessage (handle, OS.TVM_GETNEXTITEM, flags, hItem);
                             }
                         }
                     }
@@ -6530,7 +6530,7 @@
 
     /* Issue notification */
     if (!gestureCompleted) {
-        tvItem.hItem = hNewItem;
+        tvItem.hItem = cast(HTREEITEM)hNewItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
         OS.SendMessage (handle, OS.TVM_GETITEM, 0, &tvItem);
         Event event = new Event ();
@@ -6683,6 +6683,7 @@
 }
 
 override LRESULT WM_PAINT (int wParam, int lParam) {
+
     if (shrink && !ignoreShrink) {
         /* Resize the item array to fit the last item */
         int count = items.length - 1;
--- a/dwt/widgets/TreeColumn.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/TreeColumn.d	Thu Jun 19 03:25:36 2008 +0200
@@ -353,7 +353,7 @@
     if (newFont !is null) oldFont = OS.SelectObject (hDC, newFont);
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-    tvItem.hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
+    tvItem.hItem = cast(HTREEITEM) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_ROOT, 0);
     while (tvItem.hItem !is null) {
         OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, cast(int) &tvItem);
         TreeItem item = tvItem.lParam !is -1 ? parent.items [tvItem.lParam] : null;
@@ -372,7 +372,7 @@
             }
             columnWidth = Math.max (columnWidth, itemRight - headerRect.left);
         }
-        tvItem.hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, tvItem.hItem);
+        tvItem.hItem = cast(HTREEITEM) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, tvItem.hItem);
     }
     RECT rect;
     int flags = OS.DT_CALCRECT | OS.DT_NOPREFIX;
--- a/dwt/widgets/TreeItem.d	Sun Jun 08 15:12:40 2008 +0200
+++ b/dwt/widgets/TreeItem.d	Thu Jun 19 03:25:36 2008 +0200
@@ -254,7 +254,7 @@
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
         tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
         tvItem.state = 1 << 12;
-        tvItem.hItem = handle;
+        tvItem.hItem = cast(HTREEITEM)handle;
         OS.SendMessage (hwnd, OS.TVM_SETITEM, 0, &tvItem);
     }
     background = foreground = -1;
@@ -440,7 +440,7 @@
     if ((parent.style & DWT.VIRTUAL) is 0 && !cached && !parent.painted) {
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT;
-        tvItem.hItem = handle;
+        tvItem.hItem = cast(HTREEITEM)handle;
         tvItem.pszText = OS.LPSTR_TEXTCALLBACK;
         parent.ignoreCustomDraw = true;
         OS.SendMessage (hwnd, OS.TVM_SETITEM, 0, &tvItem);
@@ -456,7 +456,7 @@
     RECT* rect = new RECT();
     if (firstColumn) {
         bool full = columnCount is 0 && getText && getImage && fullText && fullImage;
-        if (!OS.TreeView_GetItemRect (hwnd, handle, rect, !full)) {
+        if (!OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)handle, rect, !full)) {
             return new RECT();
         }
         if (getImage && !fullImage) {
@@ -492,7 +492,7 @@
         if (OS.SendMessage (hwndHeader, OS.HDM_GETITEMRECT, index, cast(int) headerRect) is 0) {
             return new RECT();
         }
-        if (!OS.TreeView_GetItemRect (hwnd, handle, rect, false)) {
+        if (!OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)handle, rect, false)) {
             return new RECT();
         }
         rect.left = headerRect.left;
@@ -576,7 +576,7 @@
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
     tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
-    tvItem.hItem = handle;
+    tvItem.hItem = cast(HTREEITEM)handle;
     int result = OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, &tvItem);
     return (result !is 0) && (((tvItem.state >> 12) & 1) is 0);
 }
@@ -720,7 +720,7 @@
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
     tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
-    tvItem.hItem = handle;
+    tvItem.hItem = cast(HTREEITEM)handle;
     int result = OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, &tvItem);
     return (result !is 0) && ((tvItem.state >> 12) > 2);
 }
@@ -994,7 +994,7 @@
         }
     }
     RECT rect;
-    if (OS.TreeView_GetItemRect (hwnd, handle, &rect, !full)) {
+    if (OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)handle, &rect, !full)) {
         OS.InvalidateRect (hwnd, &rect, true);
     }
 }
@@ -1046,7 +1046,7 @@
     auto hwnd = parent.handle;
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_PARAM;
-    tvItem.hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, cast(int)handle);
+    tvItem.hItem = cast(HTREEITEM) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, cast(int)handle);
     while (tvItem.hItem !is null) {
         OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, cast(int)&tvItem);
         TreeItem item = tvItem.lParam !is -1 ? parent.items [tvItem.lParam] : null;
@@ -1056,7 +1056,7 @@
             parent.releaseItem (tvItem.hItem, &tvItem, false);
             parent.destroyItem (null, tvItem.hItem);
         }
-        tvItem.hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, cast(int)handle);
+        tvItem.hItem = cast(HTREEITEM) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_CHILD, cast(int)handle);
     }
 }
 
@@ -1155,7 +1155,7 @@
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
     tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
-    tvItem.hItem = handle;
+    tvItem.hItem = cast(HTREEITEM)handle;
     OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, &tvItem);
     int state = tvItem.state >> 12;
     if (checked) {
@@ -1177,7 +1177,7 @@
     if ((parent.style & DWT.VIRTUAL) !is 0) {
         if (parent.currentItem is this && OS.IsWindowVisible (hwnd)) {
             RECT rect;
-            if (OS.TreeView_GetItemRect (hwnd, handle, &rect, false)) {
+            if (OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)handle, &rect, false)) {
                 OS.InvalidateRect (hwnd, &rect, true);
             }
         }
@@ -1256,7 +1256,7 @@
             int index = 0;
             while (hItem !is null && (noAnimate || hItem !is handle) && index < count) {
                 RECT rect;
-                if (OS.TreeView_GetItemRect (hwnd, hItem, &rect, true)) {
+                if (OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)hItem, &rect, true)) {
                     rects [index++] = rect;
                 }
                 hItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_NEXTVISIBLE, cast(int) &hItem);
@@ -1306,7 +1306,7 @@
         bool collapsed = false;
         if (!expanded) {
             RECT rect;
-            while (hTopItem !is null && !OS.TreeView_GetItemRect (hwnd, hTopItem, &rect, false)) {
+            while (hTopItem !is null && !OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)hTopItem, &rect, false)) {
                 hTopItem = cast(HANDLE) OS.SendMessage (hwnd, OS.TVM_GETNEXTITEM, OS.TVGN_PARENT, hTopItem);
                 collapsed = true;
             }
@@ -1337,7 +1337,7 @@
                     int index = 0;
                     while (hItem !is null && index < count) {
                         RECT rect;
-                        if (OS.TreeView_GetItemRect (hwnd, hItem, &rect, true)) {
+                        if (OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)hItem, &rect, true)) {
                             if (!OS.EqualRect (&rect, & rects [index])) {
                                 break;
                             }
@@ -1367,7 +1367,7 @@
                 }
                 if (handle is hBottomItem) {
                     RECT rect;
-                    if (OS.TreeView_GetItemRect (hwnd, hBottomItem, &rect, false)) {
+                    if (OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)hBottomItem, &rect, false)) {
                         OS.InvalidateRect (hwnd, &rect, true);
                     }
                 }
@@ -1435,7 +1435,7 @@
     auto hwnd = parent.handle;
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT;
-    tvItem.hItem = handle;
+    tvItem.hItem = cast(HTREEITEM)handle;
     tvItem.pszText = OS.LPSTR_TEXTCALLBACK;
     OS.SendMessage (hwnd, OS.TVM_SETITEM, 0, &tvItem);
 }
@@ -1490,7 +1490,7 @@
         auto hwnd = parent.handle;
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT;
-        tvItem.hItem = handle;
+        tvItem.hItem = cast(HTREEITEM)handle;
         tvItem.pszText = OS.LPSTR_TEXTCALLBACK;
         OS.SendMessage (hwnd, OS.TVM_SETITEM, 0, &tvItem);
     } else {
@@ -1595,7 +1595,7 @@
     TVITEM tvItem;
     tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_STATE;
     tvItem.stateMask = OS.TVIS_STATEIMAGEMASK;
-    tvItem.hItem = handle;
+    tvItem.hItem = cast(HTREEITEM)handle;
     OS.SendMessage (hwnd, OS.TVM_GETITEM, 0, &tvItem);
     int state = tvItem.state >> 12;
     if (grayed) {
@@ -1617,7 +1617,7 @@
     if ((parent.style & DWT.VIRTUAL) !is 0) {
         if (parent.currentItem is this && OS.IsWindowVisible (hwnd)) {
             RECT rect;
-            if (OS.TreeView_GetItemRect (hwnd, handle, &rect, false)) {
+            if (OS.TreeView_GetItemRect (hwnd, cast(HTREEITEM)handle, &rect, false)) {
                 OS.InvalidateRect (hwnd, &rect, true);
             }
         }
@@ -1703,7 +1703,7 @@
         auto hwnd = parent.handle;
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_IMAGE | OS.TVIF_SELECTEDIMAGE;
-        tvItem.hItem = handle;
+        tvItem.hItem = cast(HTREEITEM)handle;
         tvItem.iImage = tvItem.iSelectedImage = OS.I_IMAGECALLBACK;
         /*
         * Bug in Windows.  When I_IMAGECALLBACK is used with TVM_SETITEM
@@ -1810,7 +1810,7 @@
         auto hwnd = parent.handle;
         TVITEM tvItem;
         tvItem.mask = OS.TVIF_HANDLE | OS.TVIF_TEXT;
-        tvItem.hItem = handle;
+        tvItem.hItem = cast(HTREEITEM)handle;
         tvItem.pszText = OS.LPSTR_TEXTCALLBACK;
         OS.SendMessage (hwnd, OS.TVM_SETITEM, 0, &tvItem);
     } else {