Implement scrollbar controls
[reactos.git] / reactos / lib / user32 / controls / regcontrol.c
1 /* $Id: regcontrol.c,v 1.18 2004/03/27 10:46:32 gvg Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS User32
5 * PURPOSE: Built-in control registration
6 * FILE: lib/user32/controls/regcontrol.c
7 * PROGRAMER: Ge van Geldorp (ge@gse.nl)
8 * REVISION HISTORY: 2003/06/16 GvG Created
9 * NOTES: Adapted from Wine
10 */
11
12 #include <windows.h>
13 #include <wchar.h>
14 #include "user32/regcontrol.h"
15 #include "win32k/ntuser.h"
16
17 static void RegisterBuiltinClass(const struct builtin_class_descr *Descr)
18 {
19 WNDCLASSEXW wc;
20 ATOM Class;
21
22 wc.cbSize = sizeof(WNDCLASSEXW);
23 wc.lpszClassName = Descr->name;
24 wc.lpfnWndProc = Descr->procW;
25 wc.style = Descr->style;
26 wc.hInstance = NULL;
27 wc.hIcon = NULL;
28 wc.hIconSm = NULL;
29 wc.hCursor = LoadCursorW(NULL, Descr->cursor);
30 wc.hbrBackground = Descr->brush;
31 wc.lpszMenuName = NULL;
32 wc.cbClsExtra = 0;
33 wc.cbWndExtra = Descr->extra;
34
35
36 #if 0
37 if(IS_ATOM(wc.lpszClassName))
38 DbgPrint("Registering built-in class atom=0x%x\n", wc.lpszClassName);
39 else
40 DbgPrint("Registering built-in class %wS\n", wc.lpszClassName);
41 #endif
42 Class = NtUserRegisterClassExWOW(&wc,TRUE,Descr->procA,0,0);
43 #if 0
44 DbgPrint("RegisterClassW = %d\n", Class);
45 #endif
46 }
47
48 /***********************************************************************
49 * ControlsInit
50 *
51 * Register the classes for the builtin controls
52 */
53 BOOL FASTCALL
54 ControlsInit(LPCWSTR ClassName)
55 {
56 static const struct builtin_class_descr *ClassDescriptions[] =
57 {
58 &DIALOG_builtin_class,
59 &POPUPMENU_builtin_class,
60 &COMBO_builtin_class,
61 &COMBOLBOX_builtin_class,
62 #if 0
63 &DESKTOP_builtin_class,
64 #endif
65 &MDICLIENT_builtin_class,
66 #if 0
67 &MENU_builtin_class,
68 #endif
69 &SCROLL_builtin_class,
70 &BUTTON_builtin_class,
71 &LISTBOX_builtin_class,
72 &EDIT_builtin_class,
73 &ICONTITLE_builtin_class,
74 &STATIC_builtin_class
75 };
76 unsigned i;
77 BOOL Register;
78
79 Register = FALSE;
80 if (IS_ATOM(ClassName))
81 {
82 for (i = 0;
83 ! Register && i < sizeof(ClassDescriptions) / sizeof(ClassDescriptions[0]);
84 i++)
85 {
86 if (IS_ATOM(ClassDescriptions[i]->name))
87 {
88 Register = (ClassName == ClassDescriptions[i]->name);
89 }
90 }
91 }
92 else
93 {
94 for (i = 0;
95 ! Register && i < sizeof(ClassDescriptions) / sizeof(ClassDescriptions[0]);
96 i++)
97 {
98 if (! IS_ATOM(ClassDescriptions[i]->name))
99 {
100 Register = (0 == _wcsicmp(ClassName, ClassDescriptions[i]->name));
101 }
102 }
103 }
104
105 if (Register)
106 {
107 for (i = 0; i < sizeof(ClassDescriptions) / sizeof(ClassDescriptions[0]); i++)
108 {
109 RegisterBuiltinClass(ClassDescriptions[i]);
110 }
111 }
112
113 return Register;
114 }