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
14 #include <wine/debug.h>
16 static PFNCLIENT pfnClientA
;
17 static PFNCLIENT pfnClientW
;
18 static PFNCLIENTWORKER pfnClientWorker
;
22 const struct builtin_class_descr
*desc
;
26 { &DIALOG_builtin_class
, FNID_DIALOG
},
27 { &POPUPMENU_builtin_class
, FNID_MENU
},
28 { &COMBO_builtin_class
, FNID_COMBOBOX
},
29 { &COMBOLBOX_builtin_class
, FNID_COMBOLBOX
},
30 { &MDICLIENT_builtin_class
, FNID_MDICLIENT
},
32 { &MENU_builtin_class
, FNID_MENU
},
34 { &SCROLL_builtin_class
, FNID_SCROLLBAR
},
35 { &BUTTON_builtin_class
, FNID_BUTTON
},
36 { &LISTBOX_builtin_class
, FNID_LISTBOX
},
37 { &EDIT_builtin_class
, FNID_EDIT
},
38 { &ICONTITLE_builtin_class
, FNID_ICONTITLE
},
39 { &STATIC_builtin_class
, FNID_STATIC
},
42 BOOL WINAPI
RegisterSystemControls(VOID
)
44 REGISTER_SYSCLASS cls
[sizeof(g_SysClasses
) / sizeof(g_SysClasses
[0])];
47 ZeroMemory(cls
, sizeof(cls
));
49 for (i
= 0; i
!= sizeof(cls
) / sizeof(cls
[0]); i
++)
51 if (IS_ATOM(g_SysClasses
[i
].desc
->name
))
52 cls
[i
].ClassName
.Buffer
= (PWSTR
)((ULONG_PTR
)g_SysClasses
[i
].desc
->name
);
54 RtlInitUnicodeString(&cls
[i
].ClassName
, g_SysClasses
[i
].desc
->name
);
56 cls
[i
].Style
= g_SysClasses
[i
].desc
->style
;
57 cls
[i
].ProcW
= g_SysClasses
[i
].desc
->procW
;
58 cls
[i
].ProcA
= g_SysClasses
[i
].desc
->procA
;
59 cls
[i
].ExtraBytes
= g_SysClasses
[i
].desc
->extra
;
60 cls
[i
].hCursor
= LoadCursorW(NULL
, g_SysClasses
[i
].desc
->cursor
);
61 cls
[i
].hBrush
= g_SysClasses
[i
].desc
->brush
;
62 cls
[i
].ClassId
= g_SysClasses
[i
].ClsId
;
65 return NtUserRegisterSystemClasses(sizeof(cls
) / sizeof(cls
[0]), cls
);
70 MsgWindowProc( HWND hwnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
72 if (message
== WM_NCCREATE
) return TRUE
;
78 DialogWndProc_common( HWND hwnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL unicode
)
81 return DefDlgProcW( hwnd
, uMsg
, wParam
, lParam
);
82 return DefDlgProcA( hwnd
, uMsg
, wParam
, lParam
);
85 BOOL WINAPI
RegisterClientPFN(VOID
)
89 pfnClientA
.pfnScrollBarWndProc
= ScrollBarWndProcA
;
90 pfnClientW
.pfnScrollBarWndProc
= ScrollBarWndProcW
;
91 pfnClientA
.pfnTitleWndProc
= IconTitleWndProc
;
92 pfnClientW
.pfnTitleWndProc
= IconTitleWndProc
;
93 pfnClientA
.pfnMenuWndProc
= PopupMenuWndProcA
;
94 pfnClientW
.pfnMenuWndProc
= PopupMenuWndProcW
;
95 pfnClientA
.pfnDesktopWndProc
= DesktopWndProc
;
96 pfnClientW
.pfnDesktopWndProc
= DesktopWndProc
;
97 pfnClientA
.pfnDefWindowProc
= DefWindowProcA
;
98 pfnClientW
.pfnDefWindowProc
= DefWindowProcW
;
99 pfnClientA
.pfnMessageWindowProc
= MsgWindowProc
;
100 pfnClientW
.pfnMessageWindowProc
= MsgWindowProc
;
101 pfnClientA
.pfnSwitchWindowProc
= DefWindowProcA
;
102 pfnClientW
.pfnSwitchWindowProc
= DefWindowProcW
;
103 pfnClientA
.pfnButtonWndProc
= ButtonWndProcA
;
104 pfnClientW
.pfnButtonWndProc
= ButtonWndProcW
;
105 pfnClientA
.pfnComboBoxWndProc
= ComboWndProcA
;
106 pfnClientW
.pfnComboBoxWndProc
= ComboWndProcW
;
107 pfnClientA
.pfnComboListBoxProc
= ListBoxWndProcA
;
108 pfnClientW
.pfnComboListBoxProc
= ListBoxWndProcW
;
109 pfnClientA
.pfnDialogWndProc
= DefDlgProcA
;
110 pfnClientW
.pfnDialogWndProc
= DefDlgProcW
;
111 pfnClientA
.pfnEditWndProc
= EditWndProcA
;
112 pfnClientW
.pfnEditWndProc
= EditWndProcW
;
113 pfnClientA
.pfnListBoxWndProc
= ListBoxWndProcA
;
114 pfnClientW
.pfnListBoxWndProc
= ListBoxWndProcW
;
115 pfnClientA
.pfnMDIClientWndProc
= MDIClientWndProcA
;
116 pfnClientW
.pfnMDIClientWndProc
= MDIClientWndProcW
;
117 pfnClientA
.pfnStaticWndProc
= StaticWndProcA
;
118 pfnClientW
.pfnStaticWndProc
= StaticWndProcW
;
119 pfnClientA
.pfnImeWndProc
= DefWindowProcA
;
120 pfnClientW
.pfnImeWndProc
= DefWindowProcW
;
121 pfnClientA
.pfnGhostWndProc
= DefWindowProcA
;
122 pfnClientW
.pfnGhostWndProc
= DefWindowProcW
;
123 pfnClientA
.pfnHkINLPCWPSTRUCT
= DefWindowProcA
;
124 pfnClientW
.pfnHkINLPCWPSTRUCT
= DefWindowProcW
;
125 pfnClientA
.pfnHkINLPCWPRETSTRUCT
= DefWindowProcA
;
126 pfnClientW
.pfnHkINLPCWPRETSTRUCT
= DefWindowProcW
;
127 pfnClientA
.pfnDispatchHook
= DefWindowProcA
;
128 pfnClientW
.pfnDispatchHook
= DefWindowProcW
;
129 pfnClientA
.pfnDispatchDefWindowProc
= DefWindowProcA
;
130 pfnClientW
.pfnDispatchDefWindowProc
= DefWindowProcW
;
131 pfnClientA
.pfnDispatchMessage
= DefWindowProcA
;
132 pfnClientW
.pfnDispatchMessage
= DefWindowProcW
;
133 pfnClientA
.pfnMDIActivateDlgProc
= DefWindowProcA
;
134 pfnClientW
.pfnMDIActivateDlgProc
= DefWindowProcW
;
136 pfnClientWorker
.pfnButtonWndProc
= ButtonWndProc_common
;
137 pfnClientWorker
.pfnComboBoxWndProc
= ComboWndProc_common
;
138 pfnClientWorker
.pfnComboListBoxProc
= ListBoxWndProc_common
;
139 pfnClientWorker
.pfnDialogWndProc
= DialogWndProc_common
;
140 pfnClientWorker
.pfnEditWndProc
= EditWndProc_common
;
141 pfnClientWorker
.pfnListBoxWndProc
= ListBoxWndProc_common
;
142 pfnClientWorker
.pfnMDIClientWndProc
= MDIClientWndProc_common
;
143 pfnClientWorker
.pfnStaticWndProc
= StaticWndProc_common
;
144 pfnClientWorker
.pfnImeWndProc
= User32DefWindowProc
;
145 pfnClientWorker
.pfnGhostWndProc
= User32DefWindowProc
;
146 pfnClientWorker
.pfnCtfHookProc
= User32DefWindowProc
;
148 Status
= NtUserInitializeClientPfnArrays( &pfnClientA
,
153 return NT_SUCCESS(Status
) ? TRUE
: FALSE
;