2 * Windows widgets (built-in window classes)
4 * Copyright 1993 Alexandre Julliard
21 /* Window procedures */
23 extern LRESULT EditWndProc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
25 extern LRESULT ComboWndProc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
27 extern LRESULT ComboLBWndProc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
29 extern LRESULT ListBoxWndProc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
31 extern LRESULT PopupMenuWndProc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
34 /* Win16 class info */
43 } BUILTIN_CLASS_INFO16;
45 /* Win16 built-in classes */
47 static const BUILTIN_CLASS_INFO16 WIDGETS_BuiltinClasses16[] =
49 { CS_GLOBALCLASS | CS_PARENTDC,
50 sizeof(STATICINFO), 0, "StaticWndProc", "Static" },
51 { CS_GLOBALCLASS, sizeof(MDICLIENTINFO),
52 STOCK_LTGRAY_BRUSH, "MDIClientWndProc", "MDIClient" }
55 #define NB_BUILTIN_CLASSES16 \
56 (sizeof(WIDGETS_BuiltinClasses16)/sizeof(WIDGETS_BuiltinClasses16[0]))
58 /* Win32 built-in classes */
60 static WNDCLASS32A WIDGETS_BuiltinClasses32[BIC32_NB_CLASSES] =
63 { CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
64 ButtonWndProc, 0, sizeof(BUTTONINFO), 0, 0, 0, 0, 0, "Button" },
66 { CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/,
67 EditWndProc, 0, sizeof(void *), 0, 0, 0, 0, 0, "Edit" },
69 { CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/,
70 ListBoxWndProc, 0, sizeof(void *), 0, 0, 0, 0, 0, "ListBox" },
72 { CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
73 ComboWndProc, 0, sizeof(void *), 0, 0, 0, 0, 0, "ComboBox" },
75 { CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS,
76 ComboLBWndProc, 0, sizeof(void *), 0, 0, 0, 0, 0, "ComboLBox" },
78 { CS_GLOBALCLASS | CS_SAVEBITS, PopupMenuWndProc,
79 0, sizeof(HMENU32), 0, 0, 0, 0, 0, POPUPMENU_CLASS_NAME },
81 { CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
82 ScrollBarWndProc, 0, sizeof(SCROLLBAR_INFO), 0, 0, 0, 0, 0, "ScrollBar"},
84 { CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOPINFO),
85 0, 0, 0, 0, 0, DESKTOP_CLASS_NAME },
87 { CS_GLOBALCLASS | CS_SAVEBITS, DefDlgProc32A, 0, DLGWINDOWEXTRA,
88 0, 0, 0, 0, 0, DIALOG_CLASS_NAME }
91 static ATOM bicAtomTable[BIC32_NB_CLASSES];
93 /* Win32 common controls */
95 static WNDCLASS32A WIDGETS_CommonControls32[] =
97 { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, StatusWindowProc, 0,
98 sizeof(STATUSWINDOWINFO), 0, 0, 0, 0, 0, STATUSCLASSNAME32A },
101 #define NB_COMMON_CONTROLS32 \
102 (sizeof(WIDGETS_CommonControls32)/sizeof(WIDGETS_CommonControls32[0]))
105 /***********************************************************************
108 * Initialize the built-in window classes.
110 BOOL32 WIDGETS_Init(void)
114 const BUILTIN_CLASS_INFO16 *info16 = WIDGETS_BuiltinClasses16;
116 WNDCLASS32A *class32 = WIDGETS_BuiltinClasses32;
118 if (!(name = SEGPTR_ALLOC( 20 * sizeof(char) ))) return FALSE;
120 /* Create 16-bit classes */
122 class16.cbClsExtra = 0;
123 class16.hInstance = 0;
125 class16.hCursor = LoadCursor16( 0, IDC_ARROW );
126 class16.lpszMenuName = (SEGPTR)0;
127 class16.lpszClassName = SEGPTR_GET(name);
128 for (i = 0; i < NB_BUILTIN_CLASSES16; i++, info16++)
130 class16.style = info16->style;
131 class16.lpfnWndProc = (WNDPROC16)MODULE_GetWndProcEntry16( info16->procName );
132 class16.cbWndExtra = info16->wndExtra;
133 class16.hbrBackground = info16->background;
134 strcpy( name, info16->className );
135 if (!RegisterClass16( &class16 )) return FALSE;
138 /* Create 32-bit classes */
140 for (i = 0; i < BIC32_NB_CLASSES; i++, class32++)
142 /* Just to make sure the string is > 0x10000 */
143 strcpy( name, (char *)class32->lpszClassName );
144 class32->lpszClassName = name;
145 class32->hCursor = LoadCursor16( 0, IDC_ARROW );
146 if (!(bicAtomTable[i] = RegisterClass32A( class32 ))) return FALSE;
154 /***********************************************************************
155 * InitCommonControls (COMCTL32.15)
157 void InitCommonControls(void)
161 WNDCLASS32A *class32 = WIDGETS_CommonControls32;
163 for (i = 0; i < NB_COMMON_CONTROLS32; i++, class32++)
165 /* Just to make sure the string is > 0x10000 */
166 strcpy( name, (char *)class32->lpszClassName );
167 class32->lpszClassName = name;
168 class32->hCursor = LoadCursor16( 0, IDC_ARROW );
169 RegisterClass32A( class32 );
174 /***********************************************************************
175 * WIDGETS_IsControl32
177 * Check whether pWnd is a built-in control or not.
179 BOOL32 WIDGETS_IsControl32( WND* pWnd, BUILTIN_CLASS32 cls )
181 assert( cls < BIC32_NB_CLASSES );
182 return (pWnd->class->atomName == bicAtomTable[cls]);