Made all the RegisterClass and GetClassInfo variants call the
corresponding Ex function.

diff --git a/windows/class.c b/windows/class.c
index 9272acf..6c9c8ad 100644
--- a/windows/class.c
+++ b/windows/class.c
@@ -532,40 +532,21 @@
  */
 ATOM WINAPI RegisterClass16( const WNDCLASS16 *wc )
 {
-    ATOM atom;
-    CLASS *classPtr;
-    int iSmIconWidth, iSmIconHeight;
-    HINSTANCE hInstance = HINSTANCE_32(GetExePtr(wc->hInstance));
+    WNDCLASSEX16 wcex;
 
-    if (!(atom = GlobalAddAtomA( MapSL(wc->lpszClassName) ))) return 0;
-    if (!(classPtr = CLASS_RegisterClass( atom, hInstance, wc->style,
-                                          wc->cbClsExtra, wc->cbWndExtra )))
-    {
-        GlobalDeleteAtom( atom );
-        return 0;
-    }
-
-    TRACE("atom=%04x wndproc=%08lx hinst=%p bg=%04x style=%08x clsExt=%d winExt=%d class=%p name='%s'\n",
-          atom, (DWORD)wc->lpfnWndProc, hInstance,
-          wc->hbrBackground, wc->style, wc->cbClsExtra,
-          wc->cbWndExtra, classPtr,
-          HIWORD(wc->lpszClassName) ? (char *)MapSL(wc->lpszClassName) : "" );
-
-    iSmIconWidth  = GetSystemMetrics(SM_CXSMICON);
-    iSmIconHeight = GetSystemMetrics(SM_CYSMICON);
-
-    classPtr->hIcon         = HICON_32(wc->hIcon);
-    classPtr->hIconSm       = CopyImage(classPtr->hIcon, IMAGE_ICON,
-					iSmIconWidth, iSmIconHeight,
-					LR_COPYFROMRESOURCE);
-    classPtr->hCursor       = HCURSOR_32(wc->hCursor);
-    classPtr->hbrBackground = HBRUSH_32(wc->hbrBackground);
-
-    WINPROC_SetProc( &classPtr->winprocA, (WNDPROC)wc->lpfnWndProc,
-                     WIN_PROC_16, WIN_PROC_CLASS );
-    CLASS_SetMenuNameA( classPtr, MapSL(wc->lpszMenuName) );
-
-    return atom;
+    wcex.cbSize        = sizeof(wcex);
+    wcex.style         = wc->style;
+    wcex.lpfnWndProc   = wc->lpfnWndProc;
+    wcex.cbClsExtra    = wc->cbClsExtra;
+    wcex.cbWndExtra    = wc->cbWndExtra;
+    wcex.hInstance     = wc->hInstance;
+    wcex.hIcon         = wc->hIcon;
+    wcex.hCursor       = wc->hCursor;
+    wcex.hbrBackground = wc->hbrBackground;
+    wcex.lpszMenuName  = wc->lpszMenuName;
+    wcex.lpszClassName = wc->lpszClassName;
+    wcex.hIconSm       = 0;
+    return RegisterClassEx16( &wcex );
 }
 
 
@@ -577,39 +558,21 @@
  */
 ATOM WINAPI RegisterClassA( const WNDCLASSA* wc ) /* [in] Address of structure with class data */
 {
-    ATOM atom;
-    int iSmIconWidth, iSmIconHeight;
-    CLASS *classPtr;
+    WNDCLASSEXA wcex;
 
-    if (!(atom = GlobalAddAtomA( wc->lpszClassName ))) return 0;
-
-    if (!(classPtr = CLASS_RegisterClass( atom, wc->hInstance, wc->style,
-                                          wc->cbClsExtra, wc->cbWndExtra )))
-    {
-        GlobalDeleteAtom( atom );
-        return 0;
-    }
-
-    TRACE("atom=%04x wndproc=%p hinst=%p bg=%p style=%08x clsExt=%d winExt=%d class=%p name='%s'\n",
-          atom, wc->lpfnWndProc, wc->hInstance,
-          wc->hbrBackground, wc->style, wc->cbClsExtra,
-          wc->cbWndExtra, classPtr,
-          HIWORD(wc->lpszClassName) ? wc->lpszClassName : "" );
-
-    iSmIconWidth  = GetSystemMetrics(SM_CXSMICON);
-    iSmIconHeight = GetSystemMetrics(SM_CYSMICON);
-
-    classPtr->hIcon         = wc->hIcon;
-    classPtr->hIconSm       = CopyImage(wc->hIcon, IMAGE_ICON,
-					iSmIconWidth, iSmIconHeight,
-					LR_COPYFROMRESOURCE);
-    classPtr->hCursor       = wc->hCursor;
-    classPtr->hbrBackground = wc->hbrBackground;
-
-    WINPROC_SetProc( &classPtr->winprocA, wc->lpfnWndProc,
-                     WIN_PROC_32A, WIN_PROC_CLASS );
-    CLASS_SetMenuNameA( classPtr, wc->lpszMenuName );
-    return atom;
+    wcex.cbSize        = sizeof(wcex);
+    wcex.style         = wc->style;
+    wcex.lpfnWndProc   = wc->lpfnWndProc;
+    wcex.cbClsExtra    = wc->cbClsExtra;
+    wcex.cbWndExtra    = wc->cbWndExtra;
+    wcex.hInstance     = wc->hInstance;
+    wcex.hIcon         = wc->hIcon;
+    wcex.hCursor       = wc->hCursor;
+    wcex.hbrBackground = wc->hbrBackground;
+    wcex.lpszMenuName  = wc->lpszMenuName;
+    wcex.lpszClassName = wc->lpszClassName;
+    wcex.hIconSm       = 0;
+    return RegisterClassExA( &wcex );
 }
 
 
@@ -618,38 +581,21 @@
  */
 ATOM WINAPI RegisterClassW( const WNDCLASSW* wc )
 {
-    ATOM atom;
-    int iSmIconWidth, iSmIconHeight;
-    CLASS *classPtr;
+    WNDCLASSEXW wcex;
 
-    if (!(atom = GlobalAddAtomW( wc->lpszClassName ))) return 0;
-
-    if (!(classPtr = CLASS_RegisterClass( atom, wc->hInstance, wc->style,
-                                          wc->cbClsExtra, wc->cbWndExtra )))
-    {
-        GlobalDeleteAtom( atom );
-        return 0;
-    }
-
-    TRACE("atom=%04x wndproc=%p hinst=%p bg=%p style=%08x clsExt=%d winExt=%d class=%p\n",
-          atom, wc->lpfnWndProc, wc->hInstance,
-          wc->hbrBackground, wc->style, wc->cbClsExtra,
-          wc->cbWndExtra, classPtr );
-
-    iSmIconWidth  = GetSystemMetrics(SM_CXSMICON);
-    iSmIconHeight = GetSystemMetrics(SM_CYSMICON);
-
-    classPtr->hIcon         = wc->hIcon;
-    classPtr->hIconSm       = CopyImage(wc->hIcon, IMAGE_ICON,
-					iSmIconWidth, iSmIconHeight,
-					LR_COPYFROMRESOURCE);
-    classPtr->hCursor       = wc->hCursor;
-    classPtr->hbrBackground = wc->hbrBackground;
-
-    WINPROC_SetProc( &classPtr->winprocW, wc->lpfnWndProc,
-                     WIN_PROC_32W, WIN_PROC_CLASS );
-    CLASS_SetMenuNameW( classPtr, wc->lpszMenuName );
-    return atom;
+    wcex.cbSize        = sizeof(wcex);
+    wcex.style         = wc->style;
+    wcex.lpfnWndProc   = wc->lpfnWndProc;
+    wcex.cbClsExtra    = wc->cbClsExtra;
+    wcex.cbWndExtra    = wc->cbWndExtra;
+    wcex.hInstance     = wc->hInstance;
+    wcex.hIcon         = wc->hIcon;
+    wcex.hCursor       = wc->hCursor;
+    wcex.hbrBackground = wc->hbrBackground;
+    wcex.lpszMenuName  = wc->lpszMenuName;
+    wcex.lpszClassName = wc->lpszClassName;
+    wcex.hIconSm       = 0;
+    return RegisterClassExW( &wcex );
 }
 
 
@@ -1125,113 +1071,73 @@
  */
 BOOL16 WINAPI GetClassInfo16( HINSTANCE16 hInst16, SEGPTR name, WNDCLASS16 *wc )
 {
-    ATOM atom;
-    CLASS *classPtr;
-    HINSTANCE hInstance = HINSTANCE_32(GetExePtr( hInst16 ));
+    WNDCLASSEX16 wcex;
+    UINT16 ret = GetClassInfoEx16( hInst16, name, &wcex );
 
-    TRACE("%p %s %p\n",hInstance, debugstr_a(MapSL(name)), wc);
-
-    if (!(atom = GlobalFindAtomA( MapSL(name) )) ||
-        !(classPtr = CLASS_FindClassByAtom( atom, hInstance )))
-        return FALSE;
-    if ((hInstance != classPtr->hInstance) &&
-        !(classPtr->style & CS_GLOBALCLASS)) /*BWCC likes to pass hInstance=0*/
-        return FALSE;
-    wc->style         = (UINT16)classPtr->style;
-    wc->lpfnWndProc   = CLASS_GetProc( classPtr, WIN_PROC_16 );
-    wc->cbClsExtra    = (INT16)classPtr->cbClsExtra;
-    wc->cbWndExtra    = (INT16)classPtr->cbWndExtra;
-    wc->hInstance     = classPtr->style & CS_GLOBALCLASS ? GetModuleHandle16("USER") : HINSTANCE_16(classPtr->hInstance);
-    wc->hIcon         = HICON_16(classPtr->hIcon);
-    wc->hCursor       = HCURSOR_16(classPtr->hCursor);
-    wc->hbrBackground = HBRUSH_16(classPtr->hbrBackground);
-    wc->lpszClassName = name;
-    wc->lpszMenuName  = CLASS_GetMenuName16( classPtr );
-
-    /* We must return the atom of the class here instead of just TRUE. */
-    return atom;
+    if (ret)
+    {
+        wc->style         = wcex.style;
+        wc->lpfnWndProc   = wcex.lpfnWndProc;
+        wc->cbClsExtra    = wcex.cbClsExtra;
+        wc->cbWndExtra    = wcex.cbWndExtra;
+        wc->hInstance     = wcex.hInstance;
+        wc->hIcon         = wcex.hIcon;
+        wc->hCursor       = wcex.hCursor;
+        wc->hbrBackground = wcex.hbrBackground;
+        wc->lpszMenuName  = wcex.lpszMenuName;
+        wc->lpszClassName = wcex.lpszClassName;
+    }
+    return ret;
 }
 
 
 /***********************************************************************
  *		GetClassInfoA (USER32.@)
  */
-BOOL WINAPI GetClassInfoA( HINSTANCE hInstance, LPCSTR name,
-                               WNDCLASSA *wc )
+BOOL WINAPI GetClassInfoA( HINSTANCE hInstance, LPCSTR name, WNDCLASSA *wc )
 {
-    ATOM atom;
-    CLASS *classPtr;
+    WNDCLASSEXA wcex;
+    UINT ret = GetClassInfoExA( hInstance, name, &wcex );
 
-    TRACE("%p %p %p\n",hInstance, name, wc);
-
-    /* workaround: if hInstance=NULL you expect to get the system classes
-    but this classes (as example from comctl32.dll SysListView) won't be
-    registered with hInstance=NULL in WINE because of the late loading
-    of this dll. fixes file dialogs in WinWord95 (jsch)*/
-
-    if (!(atom=GlobalFindAtomA(name)) || !(classPtr=CLASS_FindClassByAtom(atom,hInstance)))
-        return FALSE;
-
-    if (!(classPtr->style & CS_GLOBALCLASS) &&
-        classPtr->hInstance &&
-        (hInstance != classPtr->hInstance))
+    if (ret)
     {
-        if (hInstance) return FALSE;
-        WARN("systemclass %s (hInst=0) demanded but only class with hInst!=0 found\n",name);
+        wc->style         = wcex.style;
+        wc->lpfnWndProc   = wcex.lpfnWndProc;
+        wc->cbClsExtra    = wcex.cbClsExtra;
+        wc->cbWndExtra    = wcex.cbWndExtra;
+        wc->hInstance     = wcex.hInstance;
+        wc->hIcon         = wcex.hIcon;
+        wc->hCursor       = wcex.hCursor;
+        wc->hbrBackground = wcex.hbrBackground;
+        wc->lpszMenuName  = wcex.lpszMenuName;
+        wc->lpszClassName = wcex.lpszClassName;
     }
-
-    wc->style         = classPtr->style;
-    wc->lpfnWndProc   = (WNDPROC)CLASS_GetProc( classPtr, WIN_PROC_32A );
-    wc->cbClsExtra    = classPtr->cbClsExtra;
-    wc->cbWndExtra    = classPtr->cbWndExtra;
-    wc->hInstance     = hInstance;
-    wc->hIcon         = (HICON)classPtr->hIcon;
-    wc->hCursor       = (HCURSOR)classPtr->hCursor;
-    wc->hbrBackground = (HBRUSH)classPtr->hbrBackground;
-    wc->lpszMenuName  = CLASS_GetMenuNameA( classPtr );
-    wc->lpszClassName = name;
-
-    /* We must return the atom of the class here instead of just TRUE. */
-    return atom;
+    return ret;
 }
 
 
 /***********************************************************************
  *		GetClassInfoW (USER32.@)
  */
-BOOL WINAPI GetClassInfoW( HINSTANCE hInstance, LPCWSTR name,
-                               WNDCLASSW *wc )
+BOOL WINAPI GetClassInfoW( HINSTANCE hInstance, LPCWSTR name, WNDCLASSW *wc )
 {
-    ATOM atom;
-    CLASS *classPtr;
+    WNDCLASSEXW wcex;
+    UINT ret = GetClassInfoExW( hInstance, name, &wcex );
 
-    TRACE("%p %p %p\n",hInstance, name, wc);
-
-    if (	!(atom=GlobalFindAtomW(name)) ||
-		!(classPtr=CLASS_FindClassByAtom(atom,hInstance))
-    )
-        return FALSE;
-
-    if (!(classPtr->style & CS_GLOBALCLASS) &&
-        classPtr->hInstance &&
-        (hInstance != classPtr->hInstance))
+    if (ret)
     {
-        if (hInstance) return FALSE;
-        WARN("systemclass %s (hInst=0) demanded but only class with hInst!=0 found\n",debugstr_w(name));
+        wc->style         = wcex.style;
+        wc->lpfnWndProc   = wcex.lpfnWndProc;
+        wc->cbClsExtra    = wcex.cbClsExtra;
+        wc->cbWndExtra    = wcex.cbWndExtra;
+        wc->hInstance     = wcex.hInstance;
+        wc->hIcon         = wcex.hIcon;
+        wc->hCursor       = wcex.hCursor;
+        wc->hbrBackground = wcex.hbrBackground;
+        wc->lpszMenuName  = wcex.lpszMenuName;
+        wc->lpszClassName = wcex.lpszClassName;
     }
-    wc->style         = classPtr->style;
-    wc->lpfnWndProc   = (WNDPROC)CLASS_GetProc( classPtr, WIN_PROC_32W );
-    wc->cbClsExtra    = classPtr->cbClsExtra;
-    wc->cbWndExtra    = classPtr->cbWndExtra;
-    wc->hInstance     = hInstance;
-    wc->hIcon         = (HICON)classPtr->hIcon;
-    wc->hCursor       = (HCURSOR)classPtr->hCursor;
-    wc->hbrBackground = (HBRUSH)classPtr->hbrBackground;
-    wc->lpszMenuName  = CLASS_GetMenuNameW( classPtr );
-    wc->lpszClassName = name;
-
-    /* We must return the atom of the class here instead of just TRUE. */
-    return atom;
+    return ret;
 }