- Implement support for HWND_MESSAGE. Need full testing!
[reactos.git] / reactos / dll / win32 / user32 / controls / regcontrol.c
1 /* $Id$
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 <user32.h>
13
14 #include <wine/debug.h>
15
16 static const struct
17 {
18 const struct builtin_class_descr *desc;
19 UINT ClsId;
20 } g_SysClasses[] =
21 {
22 { &DIALOG_builtin_class, FNID_DIALOG },
23 { &POPUPMENU_builtin_class, FNID_MENU },
24 { &COMBO_builtin_class, FNID_COMBOBOX },
25 { &COMBOLBOX_builtin_class, FNID_COMBOLBOX },
26 { &MDICLIENT_builtin_class, FNID_MDICLIENT },
27 #if 0
28 { &MENU_builtin_class, FNID_MENU },
29 #endif
30 { &SCROLL_builtin_class, FNID_SCROLLBAR },
31 { &BUTTON_builtin_class, FNID_BUTTON },
32 { &LISTBOX_builtin_class, FNID_LISTBOX },
33 { &EDIT_builtin_class, FNID_EDIT },
34 { &ICONTITLE_builtin_class, FNID_ICONTITLE },
35 { &STATIC_builtin_class, FNID_STATIC },
36 };
37
38 BOOL WINAPI RegisterSystemControls(VOID)
39 {
40 REGISTER_SYSCLASS cls[sizeof(g_SysClasses) / sizeof(g_SysClasses[0])];
41 UINT i;
42
43 ZeroMemory(cls, sizeof(cls));
44
45 for (i = 0; i != sizeof(cls) / sizeof(cls[0]); i++)
46 {
47 if (IS_ATOM(g_SysClasses[i].desc->name))
48 cls[i].ClassName.Buffer = (PWSTR)((ULONG_PTR)g_SysClasses[i].desc->name);
49 else
50 RtlInitUnicodeString(&cls[i].ClassName, g_SysClasses[i].desc->name);
51
52 cls[i].Style = g_SysClasses[i].desc->style;
53 cls[i].ProcW = g_SysClasses[i].desc->procW;
54 cls[i].ProcA = g_SysClasses[i].desc->procA;
55 cls[i].ExtraBytes = g_SysClasses[i].desc->extra;
56 cls[i].hCursor = LoadCursorW(NULL, g_SysClasses[i].desc->cursor);
57 cls[i].hBrush = g_SysClasses[i].desc->brush;
58 cls[i].ClassId = g_SysClasses[i].ClsId;
59 }
60
61 return NtUserRegisterSystemClasses(sizeof(cls) / sizeof(cls[0]), cls);
62 }
63
64
65
66 static PFNCLIENT pfnClientA;
67 static PFNCLIENT pfnClientW;
68 static PFNCLIENTWORKER pfnClientWorker;
69
70 BOOL WINAPI RegisterClientPFN(VOID)
71 {
72 NTSTATUS Status;
73
74 // pfnClientA.pfnScrollBarWndProc = ScrollBarWndProcA;
75 // pfnClientW.pfnScrollBarWndProc = ScrollBarWndProcW;
76 // pfnClientA.pfnTitleWndProc = IconTitleWndProc;
77 // pfnClientW.pfnTitleWndProc = IconTitleWndProc;
78 // pfnClientA.pfnMenuWndProc = PopupMenuWndProcA;
79 // pfnClientW.pfnMenuWndProc = PopupMenuWndProcW;
80 pfnClientA.pfnDesktopWndProc = DesktopWndProc; // Fixme!
81 pfnClientW.pfnDesktopWndProc = DesktopWndProc;
82 pfnClientA.pfnDefWindowProc = DefWindowProcA;
83 pfnClientW.pfnDefWindowProc = DefWindowProcW;
84 pfnClientA.pfnMessageWindowProc = DefWindowProcA;
85 pfnClientW.pfnMessageWindowProc = DefWindowProcW;
86 pfnClientA.pfnSwitchWindowProc = DefWindowProcA;
87 pfnClientW.pfnSwitchWindowProc = DefWindowProcW;
88 // pfnClientA.pfnButtonWndProc = ButtonWndProcA;
89 // pfnClientW.pfnButtonWndProc = ButtonWndProcW
90 // pfnClientA.pfnComboBoxWndProc = ComboWndProcA;
91 // pfnClientW.pfnComboBoxWndProc = ComboWndProcW;
92 // pfnClientA.pfnComboListBoxProc = ListBoxWndProcA;
93 // pfnClientW.pfnComboListBoxProc = ListBoxWndProcW;
94 // pfnClientA.pfnDialogWndProc = DefDlgProcA;
95 // pfnClientW.pfnDialogWndProc = DefDlgProcW;
96 // pfnClientA.pfnEditWndProc = EditWndProcA;
97 // pfnClientW.pfnEditWndProc = EditWndProcW;
98 // pfnClientA.pfnListBoxWndProc = ListBoxWndProcA;
99 // pfnClientW.pfnListBoxWndProc = ListBoxWndProcW;
100 // pfnClientA.pfnMDIClientWndProc = MDIClientWndProcA;
101 // pfnClientW.pfnMDIClientWndProc = MDIClientWndProcW;
102 // pfnClientA.pfnStaticWndProc = StaticWndProcA;
103 // pfnClientW.pfnStaticWndProc = StaticWndProcW;
104 pfnClientA.pfnImeWndProc = DefWindowProcA;
105 pfnClientW.pfnImeWndProc = DefWindowProcW;
106 pfnClientA.pfnGhostWndProc = DefWindowProcA;
107 pfnClientW.pfnGhostWndProc = DefWindowProcW;
108 pfnClientA.pfnHkINLPCWPSTRUCT = DefWindowProcA;
109 pfnClientW.pfnHkINLPCWPSTRUCT = DefWindowProcW;
110 pfnClientA.pfnHkINLPCWPRETSTRUCT = DefWindowProcA;
111 pfnClientW.pfnHkINLPCWPRETSTRUCT = DefWindowProcW;
112 pfnClientA.pfnDispatchHook = DefWindowProcA;
113 pfnClientW.pfnDispatchHook = DefWindowProcW;
114 pfnClientA.pfnDispatchDefWindowProc = DefWindowProcA;
115 pfnClientW.pfnDispatchDefWindowProc = DefWindowProcW;
116 pfnClientA.pfnDispatchMessage = DefWindowProcA;
117 pfnClientW.pfnDispatchMessage = DefWindowProcW;
118 pfnClientA.pfnMDIActivateDlgProc = DefWindowProcA;
119 pfnClientW.pfnMDIActivateDlgProc = DefWindowProcW;
120
121 // pfnClientWorker.pfnButtonWndProc = ButtonWndProc_common;
122 // pfnClientWorker.pfnComboBoxWndProc = ComboWndProc_common;
123 // pfnClientWorker.pfnComboListBoxProc = ListBoxWndProc_common;
124 //// pfnClientWorker.pfnDialogWndProc = DefDlgProc_common;
125 // pfnClientWorker.pfnEditWndProc = EditWndProc_common;
126 // pfnClientWorker.pfnListBoxWndProc = ListBoxWndProc_common;
127 // pfnClientWorker.pfnMDIClientWndProc = MDIClientWndProc_common;
128 // pfnClientWorker.pfnStaticWndProc = StaticWndProc_common;
129 pfnClientWorker.pfnImeWndProc = User32DefWindowProc;
130 pfnClientWorker.pfnGhostWndProc = User32DefWindowProc;
131 pfnClientWorker.pfnCtfHookProc = User32DefWindowProc;
132
133 Status = NtUserInitializeClientPfnArrays( &pfnClientA,
134 &pfnClientW,
135 &pfnClientWorker,
136 User32Instance);
137
138 return NT_SUCCESS(Status) ? TRUE : FALSE;
139 }