ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

regcontrol.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.