mirror of
https://github.com/reactos/reactos.git
synced 2024-10-02 23:46:50 +00:00
implemented UnregisterClass()
svn path=/trunk/; revision=6905
This commit is contained in:
parent
7c98a98880
commit
24c9fab813
|
@ -1714,12 +1714,12 @@ STDCALL
|
|||
NtUserUnlockWindowStation(
|
||||
HWINSTA hWindowStation);
|
||||
|
||||
DWORD
|
||||
BOOL
|
||||
STDCALL
|
||||
NtUserUnregisterClass(
|
||||
DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2);
|
||||
LPCWSTR ClassNameOrAtom,
|
||||
HINSTANCE hInstance,
|
||||
DWORD Unknown);
|
||||
|
||||
BOOL
|
||||
STDCALL
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $Id: class.c,v 1.40 2003/12/07 10:31:21 navaraf Exp $
|
||||
/* $Id: class.c,v 1.41 2003/12/07 22:25:34 weiden Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS user32.dll
|
||||
|
@ -731,7 +731,7 @@ SetWindowLongW(
|
|||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
WINBOOL
|
||||
STDCALL
|
||||
|
@ -739,13 +739,33 @@ UnregisterClassA(
|
|||
LPCSTR lpClassName,
|
||||
HINSTANCE hInstance)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
LPWSTR ClassName;
|
||||
NTSTATUS Status;
|
||||
WINBOOL Result;
|
||||
|
||||
if(!IS_ATOM(lpClassName))
|
||||
{
|
||||
Status = HEAP_strdupAtoW(&ClassName, lpClassName, NULL);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastError(RtlNtStatusToDosError(Status));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
ClassName = (LPWSTR)lpClassName;
|
||||
|
||||
Result = (WINBOOL)NtUserUnregisterClass((LPCWSTR)ClassName, hInstance, 0);
|
||||
|
||||
if(ClassName && !IS_ATOM(lpClassName))
|
||||
HEAP_free(ClassName);
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
* @implemented
|
||||
*/
|
||||
WINBOOL
|
||||
STDCALL
|
||||
|
@ -753,8 +773,7 @@ UnregisterClassW(
|
|||
LPCWSTR lpClassName,
|
||||
HINSTANCE hInstance)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return FALSE;
|
||||
return (WINBOOL)NtUserUnregisterClass(lpClassName, hInstance, 0);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: class.c,v 1.42 2003/12/07 10:31:21 navaraf Exp $
|
||||
/* $Id: class.c,v 1.43 2003/12/07 22:25:34 weiden Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -157,6 +157,7 @@ NtUserGetClassInfo(HINSTANCE hInstance, LPCWSTR lpClassName,
|
|||
{
|
||||
PWNDCLASS_OBJECT Class;
|
||||
NTSTATUS Status;
|
||||
RTL_ATOM Atom;
|
||||
|
||||
Status = ClassReferenceClassByNameOrAtom(&Class, lpClassName);
|
||||
if (!NT_SUCCESS(Status))
|
||||
|
@ -187,8 +188,11 @@ NtUserGetClassInfo(HINSTANCE hInstance, LPCWSTR lpClassName,
|
|||
lpWndClassEx->lpszMenuName = (LPCWSTR)NULL;
|
||||
lpWndClassEx->lpszClassName = lpClassName;
|
||||
lpWndClassEx->hIconSm = Class->hIconSm;
|
||||
Atom = Class->Atom;
|
||||
|
||||
return Class->Atom;
|
||||
ObmDereferenceObject(Class);
|
||||
|
||||
return Atom;
|
||||
}
|
||||
|
||||
ULONG FASTCALL
|
||||
|
@ -606,13 +610,45 @@ NtUserSetClassWord(DWORD Unknown0,
|
|||
return(0);
|
||||
}
|
||||
|
||||
DWORD STDCALL
|
||||
NtUserUnregisterClass(DWORD Unknown0,
|
||||
DWORD Unknown1,
|
||||
DWORD Unknown2)
|
||||
BOOL STDCALL
|
||||
NtUserUnregisterClass(LPCWSTR ClassNameOrAtom,
|
||||
HINSTANCE hInstance,
|
||||
DWORD Unknown)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return(0);
|
||||
NTSTATUS Status;
|
||||
PWNDCLASS_OBJECT Class;
|
||||
|
||||
if(!ClassNameOrAtom)
|
||||
{
|
||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Status = ClassReferenceClassByNameOrAtom(&Class, ClassNameOrAtom);
|
||||
if(!NT_SUCCESS(Status))
|
||||
{
|
||||
SetLastWin32Error(ERROR_CLASS_DOES_NOT_EXIST);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(ObmGetReferenceCount(Class) > 2)
|
||||
{
|
||||
ObmDereferenceObject(Class);
|
||||
SetLastWin32Error(ERROR_CLASS_HAS_WINDOWS);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Dereference the ClassReferenceClassByNameOrAtom() call */
|
||||
ObmDereferenceObject(Class);
|
||||
|
||||
RemoveEntryList(&Class->ListEntry);
|
||||
|
||||
/* FIXME - delete the atom? */
|
||||
|
||||
/* Free the object */
|
||||
ObmDereferenceObject(Class);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
/* $Id: window.c,v 1.152 2003/12/07 19:29:33 weiden Exp $
|
||||
/* $Id: window.c,v 1.153 2003/12/07 22:25:34 weiden Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -369,6 +369,7 @@ static LRESULT IntDestroyWindow(PWINDOW_OBJECT Window,
|
|||
IntDestroyScrollBar(Window, SB_VERT);
|
||||
IntDestroyScrollBar(Window, SB_HORZ);
|
||||
|
||||
ObmDereferenceObject(Window->Class);
|
||||
Window->Class = NULL;
|
||||
ObmCloseHandle(ProcessData->WindowStation->HandleTable, Window->Self);
|
||||
|
||||
|
@ -559,6 +560,11 @@ IntCreateDesktopWindow(PWINSTATION_OBJECT WindowStation,
|
|||
HWND Handle;
|
||||
PWINDOW_OBJECT WindowObject;
|
||||
|
||||
if(!DesktopClass)
|
||||
{
|
||||
return (HWND)0;
|
||||
}
|
||||
|
||||
/* Create the window object. */
|
||||
WindowObject = (PWINDOW_OBJECT)ObmCreateObject(WindowStation->HandleTable,
|
||||
&Handle,
|
||||
|
@ -572,6 +578,7 @@ IntCreateDesktopWindow(PWINSTATION_OBJECT WindowStation,
|
|||
/*
|
||||
* Fill out the structure describing it.
|
||||
*/
|
||||
ObmReferenceObject(DesktopClass);
|
||||
WindowObject->Class = DesktopClass;
|
||||
WindowObject->ExStyle = 0;
|
||||
WindowObject->Style = WS_VISIBLE;
|
||||
|
|
Loading…
Reference in a new issue