Added unicode window proc for the static control.
Replaced ansi calls by their unicode equivalents.

diff --git a/controls/static.c b/controls/static.c
index 951e4ad..a5b1ca1 100644
--- a/controls/static.c
+++ b/controls/static.c
@@ -24,6 +24,7 @@
 static void STATIC_PaintBitmapfn( WND *wndPtr, HDC hdc );
 static void STATIC_PaintEtchedfn( WND *wndPtr, HDC hdc );
 static LRESULT WINAPI StaticWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
+static LRESULT WINAPI StaticWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
 
 static COLORREF color_windowframe, color_background, color_window;
 
@@ -68,7 +69,7 @@
     "Static",            /* name */
     CS_GLOBALCLASS | CS_DBLCLKS | CS_PARENTDC, /* style  */
     StaticWndProcA,      /* procA */
-    NULL,                /* procW (FIXME) */
+    StaticWndProcW,      /* procW */
     sizeof(STATICINFO),  /* extra */
     IDC_ARROWA,          /* cursor */
     0                    /* brush */
@@ -122,20 +123,19 @@
     if (hBitmap)
     {
         BITMAP bm;
-        GetObjectA(hBitmap, sizeof(bm), &bm);
+        GetObjectW(hBitmap, sizeof(bm), &bm);
         SetWindowPos( wndPtr->hwndSelf, 0, 0, 0, bm.bmWidth, bm.bmHeight,
 		      SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER );
     }
     return hOldBitmap;
 }
 
-
 /***********************************************************************
- *           STATIC_LoadIcon
+ *           STATIC_LoadIconA
  *
  * Load the icon for an SS_ICON control.
  */
-static HICON STATIC_LoadIcon( WND *wndPtr, LPCSTR name )
+static HICON STATIC_LoadIconA( WND *wndPtr, LPCSTR name )
 {
     HICON hicon = LoadIconA( wndPtr->hInstance, name );
     if (!hicon) hicon = LoadIconA( 0, name );
@@ -143,11 +143,23 @@
 }
 
 /***********************************************************************
- *           STATIC_LoadBitmap
+ *           STATIC_LoadIconW
+ *
+ * Load the icon for an SS_ICON control.
+ */
+static HICON STATIC_LoadIconW( WND *wndPtr, LPCWSTR name )
+{
+    HICON hicon = LoadIconW( wndPtr->hInstance, name );
+    if (!hicon) hicon = LoadIconW( 0, name );
+    return hicon;
+}
+
+/***********************************************************************
+ *           STATIC_LoadBitmapA
  *
  * Load the bitmap for an SS_BITMAP control.
  */
-static HBITMAP STATIC_LoadBitmap( WND *wndPtr, LPCSTR name )
+static HBITMAP STATIC_LoadBitmapA( WND *wndPtr, LPCSTR name )
 {
     HBITMAP hbitmap = LoadBitmapA( wndPtr->hInstance, name );
     if (!hbitmap)  /* Try OEM icon (FIXME: is this right?) */
@@ -155,56 +167,31 @@
     return hbitmap;
 }
 
+/***********************************************************************
+ *           STATIC_LoadBitmapW
+ *
+ * Load the bitmap for an SS_BITMAP control.
+ */
+static HBITMAP STATIC_LoadBitmapW( WND *wndPtr, LPCWSTR name )
+{
+    HBITMAP hbitmap = LoadBitmapW( wndPtr->hInstance, name );
+    if (!hbitmap)  /* Try OEM icon (FIXME: is this right?) */
+        hbitmap = LoadBitmapW( 0, name );
+    return hbitmap;
+}
 
 /***********************************************************************
- *           StaticWndProcA
+ *           StaticWndProc_locked
  */
-static LRESULT WINAPI StaticWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+static LRESULT StaticWndProc_locked( WND *wndPtr, UINT uMsg, WPARAM wParam,
+                                     LPARAM lParam, BOOL unicode )
 {
     LRESULT lResult = 0;
-    WND *wndPtr = WIN_FindWndPtr(hWnd);
     LONG style = wndPtr->dwStyle & SS_TYPEMASK;
     STATICINFO *infoPtr = (STATICINFO *)wndPtr->wExtra;
 
     switch (uMsg)
     {
-    case WM_NCCREATE: {
-        CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam;
-
-	if ((TWEAK_WineLook > WIN31_LOOK) && (wndPtr->dwStyle & SS_SUNKEN))
-	    wndPtr->dwExStyle |= WS_EX_STATICEDGE;
-
-        if (style == SS_ICON)
-        {
-            if (cs->lpszName)
-            {
-	    	if (!HIWORD(cs->lpszName) || cs->lpszName[0])
-		    STATIC_SetIcon( wndPtr,
-                                STATIC_LoadIcon( wndPtr, cs->lpszName ));
-	    }
-            lResult = 1;
-            goto END;
-        }
-	if (style == SS_BITMAP)
-	{
-            if (cs->lpszName)
-                STATIC_SetBitmap( wndPtr,
-                                STATIC_LoadBitmap( wndPtr, cs->lpszName ));
-	    WARN("style SS_BITMAP, dwStyle is 0x%08lx\n",
-			wndPtr->dwStyle);
-            lResult = 1;
-            goto END;
-	}
-        if (!HIWORD(cs->lpszName) && (cs->lpszName))
-        {
-		FIXME("windowName is 0x%04x, not doing DefWindowProc\n",
-		    LOWORD(cs->lpszName));
-                lResult = 1;
-                goto END;
-	}
-        lResult = DefWindowProcA( hWnd, uMsg, wParam, lParam );
-        goto END;
-    }
     case WM_CREATE:
         if (style < 0L || style > SS_TYPEMASK)
         {
@@ -229,40 +216,70 @@
  * GlobalFree16 the handle.
  */
         } else {
-            lResult = DefWindowProcA( hWnd, uMsg, wParam, lParam );
+            lResult = unicode ? DefWindowProcW(wndPtr->hwndSelf, uMsg, wParam, lParam) :
+				DefWindowProcA(wndPtr->hwndSelf, uMsg, wParam, lParam);
 	}
         break;
 
     case WM_PAINT:
         {
             PAINTSTRUCT ps;
-            BeginPaint( hWnd, &ps );
+            BeginPaint(wndPtr->hwndSelf, &ps);
             if (staticPaintFunc[style])
                 (staticPaintFunc[style])( wndPtr, ps.hdc );
-            EndPaint( hWnd, &ps );
+            EndPaint(wndPtr->hwndSelf, &ps);
         }
         break;
 
     case WM_ENABLE:
-        InvalidateRect( hWnd, NULL, FALSE );
+        InvalidateRect(wndPtr->hwndSelf, NULL, FALSE);
         break;
 
     case WM_SYSCOLORCHANGE:
         color_windowframe  = GetSysColor(COLOR_WINDOWFRAME);
         color_background   = GetSysColor(COLOR_BACKGROUND);
         color_window       = GetSysColor(COLOR_WINDOW);
-        InvalidateRect( hWnd, NULL, TRUE );
+        InvalidateRect(wndPtr->hwndSelf, NULL, TRUE);
         break;
 
+    case WM_NCCREATE:
+	if ((TWEAK_WineLook > WIN31_LOOK) && (wndPtr->dwStyle & SS_SUNKEN))
+	    wndPtr->dwExStyle |= WS_EX_STATICEDGE;
+
+	if(unicode)
+	    lParam = (LPARAM)(((LPCREATESTRUCTW)lParam)->lpszName);
+	else
+	    lParam = (LPARAM)(((LPCREATESTRUCTA)lParam)->lpszName);
+	/* fall through */
     case WM_SETTEXT:
         if (style == SS_ICON)
+	{
+	    HICON hIcon;
+	    if(unicode)
+		hIcon = STATIC_LoadIconW(wndPtr, (LPCWSTR)lParam);
+	    else
+		hIcon = STATIC_LoadIconA(wndPtr, (LPCSTR)lParam);
             /* FIXME : should we also return the previous hIcon here ??? */
-            STATIC_SetIcon( wndPtr, STATIC_LoadIcon( wndPtr, (LPCSTR)lParam ));
+            STATIC_SetIcon(wndPtr, hIcon);
+	}
         else if (style == SS_BITMAP) 
-            STATIC_SetBitmap(wndPtr,STATIC_LoadBitmap(wndPtr,(LPCSTR)lParam ));
-	else
-            DEFWND_SetTextA( wndPtr, (LPCSTR)lParam );
-        InvalidateRect( hWnd, NULL, FALSE );
+	{
+	    HBITMAP hBitmap;
+	    if(unicode)
+		hBitmap = STATIC_LoadBitmapW(wndPtr, (LPCWSTR)lParam);
+	    else
+		hBitmap = STATIC_LoadBitmapA(wndPtr, (LPCSTR)lParam);
+            STATIC_SetBitmap(wndPtr, hBitmap);
+	}
+	else if(lParam && HIWORD(lParam))
+	{
+	    if(unicode)
+		DEFWND_SetTextW(wndPtr, (LPCWSTR)lParam);
+	    else
+		DEFWND_SetTextA(wndPtr, (LPCSTR)lParam);
+	}
+	if(uMsg == WM_SETTEXT)
+	    InvalidateRect(wndPtr->hwndSelf, NULL, FALSE);
 	lResult = 1; /* success. FIXME: check text length */
         break;
 
@@ -279,10 +296,7 @@
         }
         infoPtr->hFont = (HFONT16)wParam;
         if (LOWORD(lParam))
-        {
-            InvalidateRect( hWnd, NULL, FALSE );
-            UpdateWindow( hWnd );
-        }
+            InvalidateRect( wndPtr->hwndSelf, NULL, FALSE );
         break;
 
     case WM_GETFONT:
@@ -318,23 +332,49 @@
 	    FIXME("STM_SETIMAGE: Unhandled type %x\n", wParam);
 	    break;
 	}
-        InvalidateRect( hWnd, NULL, FALSE );
-        UpdateWindow( hWnd );
+        InvalidateRect( wndPtr->hwndSelf, NULL, FALSE );
 	break;
 
     case STM_SETICON16:
     case STM_SETICON:
         lResult = STATIC_SetIcon( wndPtr, (HICON16)wParam );
-        InvalidateRect( hWnd, NULL, FALSE );
-        UpdateWindow( hWnd );
+        InvalidateRect( wndPtr->hwndSelf, NULL, FALSE );
         break;
 
     default:
-        lResult = DefWindowProcA(hWnd, uMsg, wParam, lParam);
+        lResult = unicode ? DefWindowProcW(wndPtr->hwndSelf, uMsg, wParam, lParam) :
+			    DefWindowProcA(wndPtr->hwndSelf, uMsg, wParam, lParam);
         break;
     }
     
 END:
+    return lResult;
+}
+
+/***********************************************************************
+ *           StaticWndProcA
+ */
+static LRESULT WINAPI StaticWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    LRESULT lResult;
+    WND *wndPtr = WIN_FindWndPtr(hWnd);
+
+    lResult = StaticWndProc_locked(wndPtr, uMsg, wParam, lParam, FALSE);
+
+    WIN_ReleaseWndPtr(wndPtr);
+    return lResult;
+}
+
+/***********************************************************************
+ *           StaticWndProcW
+ */
+static LRESULT WINAPI StaticWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
+{
+    LRESULT lResult;
+    WND *wndPtr = WIN_FindWndPtr(hWnd);
+
+    lResult = StaticWndProc_locked(wndPtr, uMsg, wParam, lParam, TRUE);
+
     WIN_ReleaseWndPtr(wndPtr);
     return lResult;
 }
@@ -353,9 +393,9 @@
   dis.itemData   = 0;
   GetClientRect( wndPtr->hwndSelf, &dis.rcItem );
 
-  SendMessageA( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC, 
+  SendMessageW( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC, 
 		hdc, wndPtr->hwndSelf );    
-  SendMessageA( GetParent(wndPtr->hwndSelf), WM_DRAWITEM,
+  SendMessageW( GetParent(wndPtr->hwndSelf), WM_DRAWITEM,
 		wndPtr->wIDmenu, (LPARAM)&dis );
 }
 
@@ -403,7 +443,7 @@
 
     if ((style & SS_NOPREFIX) || ((style & SS_TYPEMASK) != SS_SIMPLE))
     {
-        hBrush = SendMessageA( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC,
+        hBrush = SendMessageW( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC,
                              hdc, wndPtr->hwndSelf );
         if (!hBrush) hBrush = GetStockObject(WHITE_BRUSH);
         FillRect( hdc, &rc, hBrush );    
@@ -461,7 +501,7 @@
     STATICINFO *infoPtr = (STATICINFO *)wndPtr->wExtra;
 
     GetClientRect( wndPtr->hwndSelf, &rc );
-    hbrush = SendMessageA( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC,
+    hbrush = SendMessageW( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC,
                              hdc, wndPtr->hwndSelf );
     FillRect( hdc, &rc, hbrush );
     if (infoPtr->hIcon) DrawIcon( hdc, rc.left, rc.top, infoPtr->hIcon );
@@ -476,7 +516,7 @@
     HBITMAP oldbitmap;
 
     GetClientRect( wndPtr->hwndSelf, &rc );
-    hbrush = SendMessageA( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC,
+    hbrush = SendMessageW( GetParent(wndPtr->hwndSelf), WM_CTLCOLORSTATIC,
                              hdc, wndPtr->hwndSelf );
     FillRect( hdc, &rc, hbrush );
 
@@ -487,7 +527,7 @@
         if(GetObjectType(infoPtr->hIcon) != OBJ_BITMAP)
 	    return;
         if (!(hMemDC = CreateCompatibleDC( hdc ))) return;
-	GetObjectA(infoPtr->hIcon, sizeof(bm), &bm);
+	GetObjectW(infoPtr->hIcon, sizeof(bm), &bm);
 	GetBitmapDimensionEx(infoPtr->hIcon, &sz);
 	oldbitmap = SelectObject(hMemDC, infoPtr->hIcon);
 	BitBlt(hdc, sz.cx, sz.cy, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0,