reactos/reactos/lib/user32/controls/regcontrol.c
Casper Hornstrup e14ef8a1c4 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/user32/include/.cvsignore: New file.
	* lib/user32/Makefile (TARGET_PCH): Set to include/user32.h.
	* lib/user32/*/*.c: Use pre-compiled header.
	* include/wine/debug.h (FIXME): Override previous declaration is needed.

svn path=/trunk/; revision=10562
2004-08-15 21:36:30 +00:00

126 lines
3 KiB
C

/* $Id: regcontrol.c,v 1.20 2004/08/15 21:36:26 chorns Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS User32
* PURPOSE: Built-in control registration
* FILE: lib/user32/controls/regcontrol.c
* PROGRAMER: Ge van Geldorp (ge@gse.nl)
* REVISION HISTORY: 2003/06/16 GvG Created
* NOTES: Adapted from Wine
*/
#include "user32.h"
#include <wchar.h>
#include "user32/regcontrol.h"
#include "win32k/ntuser.h"
static void RegisterBuiltinClass(const struct builtin_class_descr *Descr)
{
WNDCLASSEXW wc;
UNICODE_STRING ClassName;
UNICODE_STRING MenuName;
wc.cbSize = sizeof(WNDCLASSEXW);
wc.lpszClassName = Descr->name;
wc.lpfnWndProc = Descr->procW;
wc.style = Descr->style;
wc.hInstance = User32Instance;
wc.hIcon = NULL;
wc.hIconSm = NULL;
wc.hCursor = LoadCursorW(NULL, Descr->cursor);
wc.hbrBackground = Descr->brush;
wc.lpszMenuName = NULL;
wc.cbClsExtra = 0;
wc.cbWndExtra = Descr->extra;
MenuName.Length =
MenuName.MaximumLength = 0;
MenuName.Buffer = NULL;
if (IS_ATOM(Descr->name))
{
ClassName.Length =
ClassName.MaximumLength = 0;
ClassName.Buffer = (LPWSTR)Descr->name;
} else
{
RtlInitUnicodeString(&ClassName, Descr->name);
}
NtUserRegisterClassExWOW(
&wc,
&ClassName,
&ClassName,
&MenuName,
Descr->procA,
REGISTERCLASS_SYSTEM,
0);
}
/***********************************************************************
* ControlsInit
*
* Register the classes for the builtin controls
*/
BOOL FASTCALL
ControlsInit(LPCWSTR ClassName)
{
static const struct builtin_class_descr *ClassDescriptions[] =
{
&DIALOG_builtin_class,
&POPUPMENU_builtin_class,
&COMBO_builtin_class,
&COMBOLBOX_builtin_class,
#if 0
&DESKTOP_builtin_class,
#endif
&MDICLIENT_builtin_class,
#if 0
&MENU_builtin_class,
#endif
&SCROLL_builtin_class,
&BUTTON_builtin_class,
&LISTBOX_builtin_class,
&EDIT_builtin_class,
&ICONTITLE_builtin_class,
&STATIC_builtin_class
};
unsigned i;
BOOL Register;
Register = FALSE;
if (IS_ATOM(ClassName))
{
for (i = 0;
! Register && i < sizeof(ClassDescriptions) / sizeof(ClassDescriptions[0]);
i++)
{
if (IS_ATOM(ClassDescriptions[i]->name))
{
Register = (ClassName == ClassDescriptions[i]->name);
}
}
}
else
{
for (i = 0;
! Register && i < sizeof(ClassDescriptions) / sizeof(ClassDescriptions[0]);
i++)
{
if (! IS_ATOM(ClassDescriptions[i]->name))
{
Register = (0 == _wcsicmp(ClassName, ClassDescriptions[i]->name));
}
}
}
if (Register)
{
for (i = 0; i < sizeof(ClassDescriptions) / sizeof(ClassDescriptions[0]); i++)
{
RegisterBuiltinClass(ClassDescriptions[i]);
}
}
return Register;
}