-/* $Id: regcontrol.c,v 1.8 2003/08/15 02:51:53 silverblade Exp $
+/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS User32
* NOTES: Adapted from Wine
*/
-#include "windows.h"
-#include "user32/regcontrol.h"
+#include <user32.h>
static void RegisterBuiltinClass(const struct builtin_class_descr *Descr)
{
- WNDCLASSA wca;
-
- wca.lpszClassName = Descr->name;
- wca.lpfnWndProc = Descr->procA;
- wca.style = Descr->style;
- wca.hInstance = NULL;
- wca.hIcon = NULL;
- wca.hCursor = LoadCursorA(NULL, Descr->cursor);
- wca.hbrBackground = Descr->brush;
- wca.lpszMenuName = NULL;
- wca.cbClsExtra = 0;
- wca.cbWndExtra = Descr->extra;
-
- DbgPrint("Registering built-in class %s\n", wca.lpszClassName);
- DbgPrint("RegisterClassA = %d\n", RegisterClassA(&wca));
+ 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,
+ 0);
}
/***********************************************************************
*
* Register the classes for the builtin controls
*/
-void ControlsInit(void)
+BOOL FASTCALL
+ControlsInit(LPCWSTR ClassName)
{
- DbgPrint("ControlsInit()\n");
-
- RegisterBuiltinClass(&BUTTON_builtin_class);
-// RegisterBuiltinClass(&DIALOG_builtin_class);
+ static const struct builtin_class_descr *ClassDescriptions[] =
+ {
+ &DIALOG_builtin_class,
+ &POPUPMENU_builtin_class,
+ &COMBO_builtin_class,
+ &COMBOLBOX_builtin_class,
#if 0
- RegisterBuiltinClass(&COMBO_builtin_class);
- RegisterBuiltinClass(&COMBOLBOX_builtin_class);
- RegisterBuiltinClass(&DESKTOP_builtin_class);
- RegisterBuiltinClass(&LISTBOX_builtin_class);
- RegisterBuiltinClass(&MDICLIENT_builtin_class);
- RegisterBuiltinClass(&MENU_builtin_class);
- RegisterBuiltinClass(&SCROLL_builtin_class);
+ &DESKTOP_builtin_class,
#endif
- RegisterBuiltinClass(&EDIT_builtin_class);
- RegisterBuiltinClass(&COMBO_builtin_class);
- RegisterBuiltinClass(&ICONTITLE_builtin_class);
- RegisterBuiltinClass(&STATIC_builtin_class);
+ &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;
}