2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS User32
4 * PURPOSE: Built-in control registration
5 * FILE: dll/win32/user32/controls/regcontrol.c
6 * PROGRAMER: Ge van Geldorp (ge@gse.nl)
7 * REVISION HISTORY: 2003/06/16 GvG Created
8 * NOTES: Adapted from Wine
13 #include <wine/debug.h>
14 WINE_DEFAULT_DEBUG_CHANNEL(user32
);
16 DWORD RegisterDefaultClasses
= FALSE
;
18 static PFNCLIENT pfnClientA
;
19 static PFNCLIENT pfnClientW
;
20 static PFNCLIENTWORKER pfnClientWorker
;
24 // These are not "System Classes" but Global Classes that are registered
25 // every time a process is created, so these can be unregistered as the msdn
30 const struct builtin_class_descr
*desc
;
35 { &DIALOG_builtin_class
, FNID_DIALOG
, ICLS_DIALOG
},
36 /* { &POPUPMENU_builtin_class, FNID_MENU, ICLS_MENU}, // moved to win32k */
37 { &COMBO_builtin_class
, FNID_COMBOBOX
, ICLS_COMBOBOX
},
38 { &COMBOLBOX_builtin_class
, FNID_COMBOLBOX
, ICLS_COMBOLBOX
},
39 { &MDICLIENT_builtin_class
, FNID_MDICLIENT
, ICLS_MDICLIENT
},
41 { &MENU_builtin_class
, FNID_MENU
, ICLS_MENU
},
43 /* { &SCROLL_builtin_class, FNID_SCROLLBAR, ICLS_SCROLLBAR}, // moved to win32k */
44 { &BUTTON_builtin_class
, FNID_BUTTON
, ICLS_BUTTON
},
45 { &LISTBOX_builtin_class
, FNID_LISTBOX
, ICLS_LISTBOX
},
46 { &EDIT_builtin_class
, FNID_EDIT
, ICLS_EDIT
},
47 /* { &ICONTITLE_builtin_class, FNID_ICONTITLE, ICLS_ICONTITLE}, // moved to win32k */
48 { &STATIC_builtin_class
, FNID_STATIC
, ICLS_STATIC
},
51 BOOL WINAPI
RegisterSystemControls(VOID
)
57 if (RegisterDefaultClasses
) return TRUE
;
59 ZeroMemory(&WndClass
, sizeof(WndClass
));
61 WndClass
.cbSize
= sizeof(WndClass
);
63 for (i
= 0; i
!= sizeof(g_SysClasses
) / sizeof(g_SysClasses
[0]); i
++)
65 WndClass
.lpszClassName
= g_SysClasses
[i
].desc
->name
;
68 WndClass
.style
= g_SysClasses
[i
].desc
->style
|CS_GLOBALCLASS
;
69 WndClass
.lpfnWndProc
= g_SysClasses
[i
].desc
->procW
;
70 WndClass
.cbWndExtra
= g_SysClasses
[i
].desc
->extra
;
71 WndClass
.hCursor
= LoadCursorW(NULL
, g_SysClasses
[i
].desc
->cursor
);
72 WndClass
.hbrBackground
= g_SysClasses
[i
].desc
->brush
;
74 atom
= RegisterClassExWOWW( &WndClass
,
80 RegisterDefaultClasses
|= ICLASS_TO_MASK(g_SysClasses
[i
].ClsId
);
88 MsgWindowProc( HWND hwnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
90 if (message
== WM_NCCREATE
) return TRUE
;
96 DialogWndProc_common( HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL unicode
)
99 return DefDlgProcW( hwnd
, uMsg
, wParam
, lParam
);
100 return DefDlgProcA( hwnd
, uMsg
, wParam
, lParam
);
103 BOOL WINAPI
RegisterClientPFN(VOID
)
107 pfnClientA
.pfnScrollBarWndProc
= ScrollBarWndProcA
;
108 pfnClientW
.pfnScrollBarWndProc
= ScrollBarWndProcW
;
109 pfnClientA
.pfnTitleWndProc
= IconTitleWndProc
;
110 pfnClientW
.pfnTitleWndProc
= IconTitleWndProc
;
111 pfnClientA
.pfnMenuWndProc
= PopupMenuWndProcA
;
112 pfnClientW
.pfnMenuWndProc
= PopupMenuWndProcW
;
113 pfnClientA
.pfnDesktopWndProc
= DesktopWndProc
;
114 pfnClientW
.pfnDesktopWndProc
= DesktopWndProc
;
115 pfnClientA
.pfnDefWindowProc
= DefWindowProcA
;
116 pfnClientW
.pfnDefWindowProc
= DefWindowProcW
;
117 pfnClientA
.pfnMessageWindowProc
= MsgWindowProc
;
118 pfnClientW
.pfnMessageWindowProc
= MsgWindowProc
;
119 pfnClientA
.pfnSwitchWindowProc
= DefWindowProcA
;
120 pfnClientW
.pfnSwitchWindowProc
= DefWindowProcW
;
121 pfnClientA
.pfnButtonWndProc
= ButtonWndProcA
;
122 pfnClientW
.pfnButtonWndProc
= ButtonWndProcW
;
123 pfnClientA
.pfnComboBoxWndProc
= ComboWndProcA
;
124 pfnClientW
.pfnComboBoxWndProc
= ComboWndProcW
;
125 pfnClientA
.pfnComboListBoxProc
= ListBoxWndProcA
;
126 pfnClientW
.pfnComboListBoxProc
= ListBoxWndProcW
;
127 pfnClientA
.pfnDialogWndProc
= DefDlgProcA
;
128 pfnClientW
.pfnDialogWndProc
= DefDlgProcW
;
129 pfnClientA
.pfnEditWndProc
= EditWndProcA
;
130 pfnClientW
.pfnEditWndProc
= EditWndProcW
;
131 pfnClientA
.pfnListBoxWndProc
= ListBoxWndProcA
;
132 pfnClientW
.pfnListBoxWndProc
= ListBoxWndProcW
;
133 pfnClientA
.pfnMDIClientWndProc
= MDIClientWndProcA
;
134 pfnClientW
.pfnMDIClientWndProc
= MDIClientWndProcW
;
135 pfnClientA
.pfnStaticWndProc
= StaticWndProcA
;
136 pfnClientW
.pfnStaticWndProc
= StaticWndProcW
;
137 pfnClientA
.pfnImeWndProc
= DefWindowProcA
;
138 pfnClientW
.pfnImeWndProc
= DefWindowProcW
;
139 pfnClientA
.pfnGhostWndProc
= DefWindowProcA
;
140 pfnClientW
.pfnGhostWndProc
= DefWindowProcW
;
141 pfnClientA
.pfnHkINLPCWPSTRUCT
= DefWindowProcA
;
142 pfnClientW
.pfnHkINLPCWPSTRUCT
= DefWindowProcW
;
143 pfnClientA
.pfnHkINLPCWPRETSTRUCT
= DefWindowProcA
;
144 pfnClientW
.pfnHkINLPCWPRETSTRUCT
= DefWindowProcW
;
145 pfnClientA
.pfnDispatchHook
= DefWindowProcA
;
146 pfnClientW
.pfnDispatchHook
= DefWindowProcW
;
147 pfnClientA
.pfnDispatchDefWindowProc
= DefWindowProcA
;
148 pfnClientW
.pfnDispatchDefWindowProc
= DefWindowProcW
;
149 pfnClientA
.pfnDispatchMessage
= DefWindowProcA
;
150 pfnClientW
.pfnDispatchMessage
= DefWindowProcW
;
151 pfnClientA
.pfnMDIActivateDlgProc
= DefWindowProcA
;
152 pfnClientW
.pfnMDIActivateDlgProc
= DefWindowProcW
;
154 pfnClientWorker
.pfnButtonWndProc
= ButtonWndProc_common
;
155 pfnClientWorker
.pfnComboBoxWndProc
= ComboWndProc_common
;
156 pfnClientWorker
.pfnComboListBoxProc
= ListBoxWndProc_common
;
157 pfnClientWorker
.pfnDialogWndProc
= DialogWndProc_common
;
158 pfnClientWorker
.pfnEditWndProc
= EditWndProc_common
;
159 pfnClientWorker
.pfnListBoxWndProc
= ListBoxWndProc_common
;
160 pfnClientWorker
.pfnMDIClientWndProc
= MDIClientWndProc_common
;
161 pfnClientWorker
.pfnStaticWndProc
= StaticWndProc_common
;
162 pfnClientWorker
.pfnImeWndProc
= User32DefWindowProc
;
163 pfnClientWorker
.pfnGhostWndProc
= User32DefWindowProc
;
164 pfnClientWorker
.pfnCtfHookProc
= User32DefWindowProc
;
166 Status
= NtUserInitializeClientPfnArrays( &pfnClientA
,
171 return NT_SUCCESS(Status
) ? TRUE
: FALSE
;