Implemented TREEVIEW_InsertItemW.

diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 8aacb30..3f3c05a 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -1870,7 +1870,55 @@
 
    return (LRESULT) iItem;
 }
+static LRESULT
+TREEVIEW_InsertItemW(HWND hwnd, WPARAM wParam, LPARAM lParam)
+{
+    TVINSERTSTRUCTW *tvisW;
+    TVINSERTSTRUCTA tvisA;
+    LRESULT lRes;
 
+    tvisW = (LPTVINSERTSTRUCTW)lParam;
+
+    tvisA.hParent = tvisW->hParent;
+    tvisA.hInsertAfter = tvisW->hInsertAfter;
+
+    tvisA.DUMMYUNIONNAME.item.mask           = tvisW->DUMMYUNIONNAME.item.mask;
+    tvisA.DUMMYUNIONNAME.item.hItem          = tvisW->DUMMYUNIONNAME.item.hItem;
+    tvisA.DUMMYUNIONNAME.item.state          = tvisW->DUMMYUNIONNAME.item.state;
+    tvisA.DUMMYUNIONNAME.item.stateMask      = tvisW->DUMMYUNIONNAME.item.stateMask;
+    tvisA.DUMMYUNIONNAME.item.cchTextMax     = tvisW->DUMMYUNIONNAME.item.cchTextMax;
+
+    if(tvisW->DUMMYUNIONNAME.item.pszText)
+    {
+	if (tvisW->DUMMYUNIONNAME.item.pszText!=LPSTR_TEXTCALLBACKW) 
+	{ 
+	    int len = lstrlenW (tvisW->DUMMYUNIONNAME.item.pszText)+1;
+	    tvisA.DUMMYUNIONNAME.item.pszText = COMCTL32_Alloc (len);
+	    lstrcpyWtoA (tvisA.DUMMYUNIONNAME.item.pszText,
+			 tvisW->DUMMYUNIONNAME.item.pszText );
+	}
+	else 
+	{
+	    tvisA.DUMMYUNIONNAME.item.pszText = LPSTR_TEXTCALLBACKA;
+	    tvisA.DUMMYUNIONNAME.item.cchTextMax = 0;
+	}
+    }
+
+    tvisA.DUMMYUNIONNAME.item.iImage         = tvisW->DUMMYUNIONNAME.item.iImage;
+    tvisA.DUMMYUNIONNAME.item.iSelectedImage = tvisW->DUMMYUNIONNAME.item.iSelectedImage;
+    tvisA.DUMMYUNIONNAME.item.cChildren      = tvisW->DUMMYUNIONNAME.item.cChildren;
+    tvisA.DUMMYUNIONNAME.item.lParam         = tvisW->DUMMYUNIONNAME.item.lParam;
+
+    lRes = TREEVIEW_InsertItemA(hwnd,wParam,(LPARAM)&tvisA);
+
+    if (tvisA.DUMMYUNIONNAME.item.pszText!=LPSTR_TEXTCALLBACKA) 
+    {
+	COMCTL32_Free(tvisA.DUMMYUNIONNAME.item.pszText);
+    }
+
+    return lRes;
+
+}
 
 
 
@@ -3458,8 +3506,7 @@
           return TREEVIEW_InsertItemA (hwnd, wParam, lParam);
 
     	case TVM_INSERTITEMW:
-      		FIXME("Unimplemented msg TVM_INSERTITEM32W\n");
-      		return 0;
+      		return TREEVIEW_InsertItemW(hwnd,wParam,lParam);;
 
     	case TVM_DELETEITEM:
       		return TREEVIEW_DeleteItem (hwnd, wParam, lParam);
@@ -3716,3 +3763,5 @@
 	UnregisterClassA (WC_TREEVIEWA, (HINSTANCE)NULL);
 }
 
+
+
diff --git a/dlls/shell32/brsfolder.c b/dlls/shell32/brsfolder.c
index 3a069d8..19b2bbc 100644
--- a/dlls/shell32/brsfolder.c
+++ b/dlls/shell32/brsfolder.c
@@ -150,7 +150,7 @@
 	        tvins.hInsertAfter = hPrev;
 	        tvins.hParent      = hParent;
 
-	        hPrev = (HTREEITEM)TreeView_InsertItemA (hwndTreeView, &tvins);
+	        hPrev = (HTREEITEM)TreeView_InsertItemW (hwndTreeView, &tvins);
 
 	      }
 	    }
diff --git a/include/commctrl.h b/include/commctrl.h
index a7cccc2..3ddeb9a 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -1994,13 +1994,12 @@
 
 
 
-
-
-
-
 #define TreeView_InsertItemA(hwnd, phdi) \
   (INT)SendMessageA((hwnd), TVM_INSERTITEMA, 0, \
                             (LPARAM)(LPTVINSERTSTRUCTA)(phdi))
+#define TreeView_InsertItemW(hwnd,phdi) \
+  (INT)SendMessageW((hwnd), TVM_INSERTITEMW, 0, \
+                            (LPARAM)(LPTVINSERTSTRUCTW)(phdi))  
 #define TreeView_DeleteItem(hwnd, hItem) \
   (BOOL)SendMessageA((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hItem))
 #define TreeView_DeleteAllItems(hwnd) \