Do not use GlobalFindAtom with atom handles in CreateWindow* functions.

diff --git a/windows/win.c b/windows/win.c
index 516bb80..52d47cc 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -690,9 +690,7 @@
     /* Find the window class */
     if (!(classPtr = CLASS_FindClassByAtom( classAtom, win32?cs->hInstance:GetExePtr(cs->hInstance) )))
     {
-        char buffer[256];
-        GlobalGetAtomNameA( classAtom, buffer, sizeof(buffer) );
-        WARN("Bad class '%s'\n", buffer );
+        WARN("Bad class '%s'\n", cs->lpszClass );
         return 0;
     }
 
@@ -1040,10 +1038,23 @@
 
     /* Find the class atom */
 
-    if (!(classAtom = GlobalFindAtomA( className )))
+    if (HIWORD(className))
     {
-        ERR( "bad class name %s\n", debugres_a(className) );
-        return 0;
+        if (!(classAtom = GlobalFindAtomA( className )))
+        {
+            ERR( "bad class name %s\n", debugres_a(className) );
+            return 0;
+        }
+    }
+    else
+    {
+        classAtom = LOWORD(className);
+        if (!GlobalGetAtomNameA( classAtom, buffer, sizeof(buffer) ))
+        {
+            ERR( "bad atom %x\n", classAtom);
+            return 0;
+        }
+        className = buffer;
     }
 
     /* Fix the coordinates */
@@ -1064,12 +1075,6 @@
     cs.lpszClass      = className;
     cs.dwExStyle      = exStyle;
 
-    /* make sure lpszClass is a string */
-    if (!HIWORD(cs.lpszClass))
-    {
-        GlobalGetAtomNameA( classAtom, buffer, sizeof(buffer) );
-        cs.lpszClass = buffer;
-    }
     return WIN_CreateWindowEx( &cs, classAtom, FALSE, FALSE );
 }
 
@@ -1092,12 +1097,26 @@
 
     if(exStyle & WS_EX_MDICHILD)
         return MDI_CreateMDIWindowA(className, windowName, style, x, y, width, height, parent, instance, (LPARAM)data);
+
     /* Find the class atom */
 
-    if (!(classAtom = GlobalFindAtomA( className )))
+    if (HIWORD(className))
     {
-        ERR( "bad class name %s\n", debugres_a(className) );
-        return 0;
+        if (!(classAtom = GlobalFindAtomA( className )))
+        {
+            ERR( "bad class name %s\n", debugres_a(className) );
+            return 0;
+        }
+    }
+    else
+    {
+        classAtom = LOWORD(className);
+        if (!GlobalGetAtomNameA( classAtom, buffer, sizeof(buffer) ))
+        {
+            ERR( "bad atom %x\n", classAtom);
+            return 0;
+        }
+        className = buffer;
     }
 
     /* Create the window */
@@ -1115,12 +1134,6 @@
     cs.lpszClass      = className;
     cs.dwExStyle      = exStyle;
 
-    /* make sure lpszClass is a string */
-    if (!HIWORD(cs.lpszClass))
-    {
-        GlobalGetAtomNameA( classAtom, buffer, sizeof(buffer) );
-        cs.lpszClass = buffer;
-    }
     return WIN_CreateWindowEx( &cs, classAtom, TRUE, FALSE );
 }
 
@@ -1146,10 +1159,23 @@
 
     /* Find the class atom */
 
-    if (!(classAtom = GlobalFindAtomW( className )))
+    if (HIWORD(className))
     {
-        ERR( "bad class name %s\n", debugres_w(className) );
-        return 0;
+        if (!(classAtom = GlobalFindAtomW( className )))
+        {
+            ERR( "bad class name %s\n", debugres_w(className) );
+            return 0;
+        }
+    }
+    else
+    {
+        classAtom = LOWORD(className);
+        if (!GlobalGetAtomNameW( classAtom, buffer, sizeof(buffer)/sizeof(WCHAR) ))
+        {
+            ERR( "bad atom %x\n", classAtom);
+            return 0;
+        }
+        className = buffer;
     }
 
     /* Create the window */
@@ -1167,13 +1193,6 @@
     cs.lpszClass      = className;
     cs.dwExStyle      = exStyle;
 
-    /* make sure lpszClass is a string */
-    if (!HIWORD(cs.lpszClass))
-    {
-        GlobalGetAtomNameW( classAtom, buffer, sizeof(buffer)/sizeof(WCHAR) );
-        cs.lpszClass = buffer;
-    }
-
     /* Note: we rely on the fact that CREATESTRUCT32A and */
     /* CREATESTRUCT32W have the same layout. */
     return WIN_CreateWindowEx( (CREATESTRUCTA *)&cs, classAtom, TRUE, TRUE );