diff --git a/reactos/dll/win32/user32/windows/class.c b/reactos/dll/win32/user32/windows/class.c index f4a3007d293..0b7686e14a1 100644 --- a/reactos/dll/win32/user32/windows/class.c +++ b/reactos/dll/win32/user32/windows/class.c @@ -553,18 +553,22 @@ RegisterClassExA(CONST WNDCLASSEXA *lpwcx) WndClass.hIconSm = CreateSmallIcon(WndClass.hIcon); } - if (lpwcx->lpszMenuName != NULL) + if (WndClass.lpszMenuName != NULL) { - if (HIWORD(lpwcx->lpszMenuName)) + if (!IS_INTRESOURCE(WndClass.lpszMenuName)) { - RtlCreateUnicodeStringFromAsciiz(&MenuName, WndClass.lpszMenuName); + if (WndClass.lpszMenuName[0]) + { + RtlCreateUnicodeStringFromAsciiz(&MenuName, WndClass.lpszMenuName); + } } else { MenuName.Buffer = (LPWSTR)WndClass.lpszMenuName; } - hMenu = LoadMenuA(WndClass.hInstance, lpwcx->lpszMenuName); + if (MenuName.Buffer != NULL) + hMenu = LoadMenuA(WndClass.hInstance, WndClass.lpszMenuName); } if (IS_ATOM(WndClass.lpszClassName)) @@ -585,7 +589,7 @@ RegisterClassExA(CONST WNDCLASSEXA *lpwcx) REGISTERCLASS_ANSI, hMenu); - if (!IS_ATOM(WndClass.lpszMenuName)) + if (!IS_INTRESOURCE(WndClass.lpszMenuName)) RtlFreeUnicodeString(&MenuName); if (!IS_ATOM(WndClass.lpszClassName)) RtlFreeUnicodeString(&ClassName); @@ -637,17 +641,22 @@ RegisterClassExW(CONST WNDCLASSEXW *lpwcx) WndClass.hIconSm = CreateSmallIcon(WndClass.hIcon); } - if (lpwcx->lpszMenuName != NULL) + if (WndClass.lpszMenuName != NULL) { - if (HIWORD(lpwcx->lpszMenuName)) + if (!IS_INTRESOURCE(WndClass.lpszMenuName)) { - RtlInitUnicodeString(&MenuName, WndClass.lpszMenuName); + if (WndClass.lpszMenuName[0]) + { + RtlInitUnicodeString(&MenuName, WndClass.lpszMenuName); + } } else { MenuName.Buffer = (LPWSTR)WndClass.lpszMenuName; } - hMenu = LoadMenuW(WndClass.hInstance, lpwcx->lpszMenuName); + + if (MenuName.Buffer != NULL) + hMenu = LoadMenuW(WndClass.hInstance, WndClass.lpszMenuName); } if (IS_ATOM(WndClass.lpszClassName)) diff --git a/reactos/subsystems/win32/win32k/ntuser/class.c b/reactos/subsystems/win32/win32k/ntuser/class.c index afa9d2e8144..92bc410dcf4 100644 --- a/reactos/subsystems/win32/win32k/ntuser/class.c +++ b/reactos/subsystems/win32/win32k/ntuser/class.c @@ -1432,6 +1432,8 @@ UserUnregisterClass(IN PUNICODE_STRING ClassName, /* unlink the class */ *Link = Class->Next; + IntDeregisterClassAtom(Class->Atom); + /* finally free the resources */ IntDestroyClass(Class); return TRUE; diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 2fec86b9a83..9d736749b5c 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -1491,7 +1491,7 @@ co_IntCreateWindowEx(DWORD dwExStyle, } else { - DPRINT1("Class %wZ not found\n", ClassName); + DPRINT1("Class \"%wZ\" not found\n", ClassName); } SetLastWin32Error(ERROR_CANNOT_FIND_WND_CLASS); @@ -2073,7 +2073,7 @@ NtUserCreateWindowEx(DWORD dwExStyle, RETURN( NULL); } } - else if (! IS_INTRESOURCE(ClassName.Buffer)) + else if (! IS_ATOM(ClassName.Buffer)) { SetLastWin32Error(ERROR_INVALID_PARAMETER); return NULL;