GetClassInfo should return global classes even if the hInstance
parameter is different from the one passed to the RegisterClass
function.
diff --git a/windows/class.c b/windows/class.c
index 3464423..30fa05c 100644
--- a/windows/class.c
+++ b/windows/class.c
@@ -1159,11 +1159,12 @@
if (!(atom=GlobalFindAtomA(name)) || !(classPtr=CLASS_FindClassByAtom(atom,hInstance)))
return FALSE;
- if (classPtr->hInstance && (hInstance != classPtr->hInstance))
+ if (!(classPtr->style & CS_GLOBALCLASS) &&
+ classPtr->hInstance &&
+ (hInstance != classPtr->hInstance))
{
if (hInstance) return FALSE;
- else
- WARN("systemclass %s (hInst=0) demanded but only class with hInst!=0 found\n",name);
+ WARN("systemclass %s (hInst=0) demanded but only class with hInst!=0 found\n",name);
}
wc->style = classPtr->style;
@@ -1171,7 +1172,7 @@
WIN_PROC_32A );
wc->cbClsExtra = classPtr->cbClsExtra;
wc->cbWndExtra = classPtr->cbWndExtra;
- wc->hInstance = classPtr->hInstance;
+ wc->hInstance = hInstance;
wc->hIcon = (HICON)classPtr->hIcon;
wc->hCursor = (HCURSOR)classPtr->hCursor;
wc->hbrBackground = (HBRUSH)classPtr->hbrBackground;
@@ -1197,18 +1198,19 @@
)
return FALSE;
- if (classPtr->hInstance && (hInstance != classPtr->hInstance)) {
- if (hInstance)
- return FALSE;
- else
- WARN("systemclass %s (hInst=0) demanded but only class with hInst!=0 found\n",debugstr_w(name));
+ if (!(classPtr->style & CS_GLOBALCLASS) &&
+ classPtr->hInstance &&
+ (hInstance != classPtr->hInstance))
+ {
+ if (hInstance) return FALSE;
+ WARN("systemclass %s (hInst=0) demanded but only class with hInst!=0 found\n",debugstr_w(name));
}
wc->style = classPtr->style;
wc->lpfnWndProc = (WNDPROC)WINPROC_GetProc( classPtr->winproc,
WIN_PROC_32W );
wc->cbClsExtra = classPtr->cbClsExtra;
wc->cbWndExtra = classPtr->cbWndExtra;
- wc->hInstance = classPtr->hInstance;
+ wc->hInstance = hInstance;
wc->hIcon = (HICON)classPtr->hIcon;
wc->hCursor = (HCURSOR)classPtr->hCursor;
wc->hbrBackground = (HBRUSH)classPtr->hbrBackground;