Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenregcontrol.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS User32 00004 * PURPOSE: Built-in control registration 00005 * FILE: dll/win32/user32/controls/regcontrol.c 00006 * PROGRAMER: Ge van Geldorp (ge@gse.nl) 00007 * REVISION HISTORY: 2003/06/16 GvG Created 00008 * NOTES: Adapted from Wine 00009 */ 00010 00011 #include <user32.h> 00012 00013 #include <wine/debug.h> 00014 WINE_DEFAULT_DEBUG_CHANNEL(user32); 00015 00016 DWORD RegisterDefaultClasses = FALSE; 00017 00018 static PFNCLIENT pfnClientA; 00019 static PFNCLIENT pfnClientW; 00020 static PFNCLIENTWORKER pfnClientWorker; 00021 00022 00023 /*********************************************************************** 00024 * set_control_clipping 00025 * 00026 * Set clipping for a builtin control that uses CS_PARENTDC. 00027 * Return the previous clip region if any. 00028 */ 00029 HRGN set_control_clipping( HDC hdc, const RECT *rect ) 00030 { 00031 RECT rc = *rect; 00032 HRGN hrgn = CreateRectRgn( 0, 0, 0, 0 ); 00033 00034 if (GetClipRgn( hdc, hrgn ) != 1) 00035 { 00036 DeleteObject( hrgn ); 00037 hrgn = 0; 00038 } 00039 DPtoLP( hdc, (POINT *)&rc, 2 ); 00040 if (GetLayout( hdc ) & LAYOUT_RTL) /* compensate for the shifting done by IntersectClipRect */ 00041 { 00042 rc.left++; 00043 rc.right++; 00044 } 00045 IntersectClipRect( hdc, rc.left, rc.top, rc.right, rc.bottom ); 00046 return hrgn; 00047 } 00048 00049 static const struct 00050 { 00051 const struct builtin_class_descr *desc; 00052 WORD fnid; 00053 WORD ClsId; 00054 } g_SysClasses[] = 00055 { 00056 { &DIALOG_builtin_class, FNID_DIALOG, ICLS_DIALOG}, 00057 /* { &POPUPMENU_builtin_class, FNID_MENU, ICLS_MENU}, // moved to win32k */ 00058 { &COMBO_builtin_class, FNID_COMBOBOX, ICLS_COMBOBOX}, 00059 { &COMBOLBOX_builtin_class, FNID_COMBOLBOX, ICLS_COMBOLBOX}, 00060 { &MDICLIENT_builtin_class, FNID_MDICLIENT, ICLS_MDICLIENT}, 00061 #if 0 00062 { &MENU_builtin_class, FNID_MENU, ICLS_MENU}, 00063 #endif 00064 /* { &SCROLL_builtin_class, FNID_SCROLLBAR, ICLS_SCROLLBAR}, // moved to win32k */ 00065 { &BUTTON_builtin_class, FNID_BUTTON, ICLS_BUTTON}, 00066 { &LISTBOX_builtin_class, FNID_LISTBOX, ICLS_LISTBOX}, 00067 { &EDIT_builtin_class, FNID_EDIT, ICLS_EDIT}, 00068 /* { &ICONTITLE_builtin_class, FNID_ICONTITLE, ICLS_ICONTITLE}, // moved to win32k */ 00069 { &STATIC_builtin_class, FNID_STATIC, ICLS_STATIC}, 00070 }; 00071 00072 BOOL WINAPI RegisterSystemControls(VOID) 00073 { 00074 WNDCLASSEXW WndClass; 00075 UINT i; 00076 ATOM atom; 00077 00078 if (RegisterDefaultClasses) return TRUE; 00079 00080 ZeroMemory(&WndClass, sizeof(WndClass)); 00081 00082 WndClass.cbSize = sizeof(WndClass); 00083 00084 for (i = 0; i != sizeof(g_SysClasses) / sizeof(g_SysClasses[0]); i++) 00085 { 00086 WndClass.lpszClassName = g_SysClasses[i].desc->name; 00087 00088 // Set Global bit! 00089 WndClass.style = g_SysClasses[i].desc->style|CS_GLOBALCLASS; 00090 WndClass.lpfnWndProc = g_SysClasses[i].desc->procW; 00091 WndClass.cbWndExtra = g_SysClasses[i].desc->extra; 00092 WndClass.hCursor = LoadCursorW(NULL, g_SysClasses[i].desc->cursor); 00093 WndClass.hbrBackground= g_SysClasses[i].desc->brush; 00094 00095 atom = RegisterClassExWOWW( &WndClass, 00096 0, 00097 g_SysClasses[i].fnid, 00098 0, 00099 FALSE); 00100 if (atom) 00101 RegisterDefaultClasses |= ICLASS_TO_MASK(g_SysClasses[i].ClsId); 00102 } 00103 00104 return TRUE; 00105 } 00106 00107 LRESULT 00108 WINAPI 00109 MsgWindowProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) 00110 { 00111 PWND pWnd; 00112 00113 pWnd = ValidateHwnd(hwnd); 00114 if (pWnd) 00115 { 00116 if (!pWnd->fnid) 00117 { 00118 NtUserSetWindowFNID(hwnd, FNID_MESSAGEWND); 00119 } 00120 } 00121 00122 if (message == WM_NCCREATE) return TRUE; 00123 00124 if (message == WM_DESTROY) 00125 NtUserSetWindowFNID(hwnd, FNID_DESTROY); 00126 00127 return DefWindowProc(hwnd, message, wParam, lParam ); 00128 } 00129 00130 LRESULT 00131 WINAPI 00132 DialogWndProc_common( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode) 00133 { 00134 if (unicode) 00135 return DefDlgProcW( hwnd, uMsg, wParam, lParam); 00136 return DefDlgProcA( hwnd, uMsg, wParam, lParam); 00137 } 00138 00139 BOOL WINAPI RegisterClientPFN(VOID) 00140 { 00141 NTSTATUS Status; 00142 00143 pfnClientA.pfnScrollBarWndProc = ScrollBarWndProcA; 00144 pfnClientW.pfnScrollBarWndProc = ScrollBarWndProcW; 00145 pfnClientA.pfnTitleWndProc = IconTitleWndProc; 00146 pfnClientW.pfnTitleWndProc = IconTitleWndProc; 00147 pfnClientA.pfnMenuWndProc = PopupMenuWndProcA; 00148 pfnClientW.pfnMenuWndProc = PopupMenuWndProcW; 00149 pfnClientA.pfnDesktopWndProc = DesktopWndProc; 00150 pfnClientW.pfnDesktopWndProc = DesktopWndProc; 00151 pfnClientA.pfnDefWindowProc = DefWindowProcA; 00152 pfnClientW.pfnDefWindowProc = DefWindowProcW; 00153 pfnClientA.pfnMessageWindowProc = MsgWindowProc; 00154 pfnClientW.pfnMessageWindowProc = MsgWindowProc; 00155 pfnClientA.pfnSwitchWindowProc = SwitchWndProcA; 00156 pfnClientW.pfnSwitchWindowProc = SwitchWndProcW; 00157 pfnClientA.pfnButtonWndProc = ButtonWndProcA; 00158 pfnClientW.pfnButtonWndProc = ButtonWndProcW; 00159 pfnClientA.pfnComboBoxWndProc = ComboWndProcA; 00160 pfnClientW.pfnComboBoxWndProc = ComboWndProcW; 00161 pfnClientA.pfnComboListBoxProc = ListBoxWndProcA; 00162 pfnClientW.pfnComboListBoxProc = ListBoxWndProcW; 00163 pfnClientA.pfnDialogWndProc = DefDlgProcA; 00164 pfnClientW.pfnDialogWndProc = DefDlgProcW; 00165 pfnClientA.pfnEditWndProc = EditWndProcA; 00166 pfnClientW.pfnEditWndProc = EditWndProcW; 00167 pfnClientA.pfnListBoxWndProc = ListBoxWndProcA; 00168 pfnClientW.pfnListBoxWndProc = ListBoxWndProcW; 00169 pfnClientA.pfnMDIClientWndProc = MDIClientWndProcA; 00170 pfnClientW.pfnMDIClientWndProc = MDIClientWndProcW; 00171 pfnClientA.pfnStaticWndProc = StaticWndProcA; 00172 pfnClientW.pfnStaticWndProc = StaticWndProcW; 00173 pfnClientA.pfnImeWndProc = DefWindowProcA; 00174 pfnClientW.pfnImeWndProc = DefWindowProcW; 00175 pfnClientA.pfnGhostWndProc = DefWindowProcA; 00176 pfnClientW.pfnGhostWndProc = DefWindowProcW; 00177 pfnClientA.pfnHkINLPCWPSTRUCT = DefWindowProcA; 00178 pfnClientW.pfnHkINLPCWPSTRUCT = DefWindowProcW; 00179 pfnClientA.pfnHkINLPCWPRETSTRUCT = DefWindowProcA; 00180 pfnClientW.pfnHkINLPCWPRETSTRUCT = DefWindowProcW; 00181 pfnClientA.pfnDispatchHook = DefWindowProcA; 00182 pfnClientW.pfnDispatchHook = DefWindowProcW; 00183 pfnClientA.pfnDispatchDefWindowProc = DefWindowProcA; 00184 pfnClientW.pfnDispatchDefWindowProc = DefWindowProcW; 00185 pfnClientA.pfnDispatchMessage = DefWindowProcA; 00186 pfnClientW.pfnDispatchMessage = DefWindowProcW; 00187 pfnClientA.pfnMDIActivateDlgProc = DefWindowProcA; 00188 pfnClientW.pfnMDIActivateDlgProc = DefWindowProcW; 00189 00190 pfnClientWorker.pfnButtonWndProc = ButtonWndProc_common; 00191 pfnClientWorker.pfnComboBoxWndProc = ComboWndProc_common; 00192 pfnClientWorker.pfnComboListBoxProc = ListBoxWndProc_common; 00193 pfnClientWorker.pfnDialogWndProc = DialogWndProc_common; 00194 pfnClientWorker.pfnEditWndProc = EditWndProc_common; 00195 pfnClientWorker.pfnListBoxWndProc = ListBoxWndProc_common; 00196 pfnClientWorker.pfnMDIClientWndProc = MDIClientWndProc_common; 00197 pfnClientWorker.pfnStaticWndProc = StaticWndProc_common; 00198 pfnClientWorker.pfnImeWndProc = User32DefWindowProc; 00199 pfnClientWorker.pfnGhostWndProc = User32DefWindowProc; 00200 pfnClientWorker.pfnCtfHookProc = User32DefWindowProc; 00201 00202 Status = NtUserInitializeClientPfnArrays( &pfnClientA, 00203 &pfnClientW, 00204 &pfnClientWorker, 00205 User32Instance); 00206 00207 return NT_SUCCESS(Status) ? TRUE : FALSE; 00208 } Generated on Wed May 23 2012 04:36:25 for ReactOS by
1.7.6.1
|