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,
33 extern LRESULT IconTitleWndProc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
36 /* Win16 class info */
45 } BUILTIN_CLASS_INFO16;
47 /* Win16 built-in classes */
49 static const BUILTIN_CLASS_INFO16 WIDGETS_BuiltinClasses16[] =
51 { CS_GLOBALCLASS | CS_PARENTDC,
52 sizeof(STATICINFO), 0, "StaticWndProc", "Static" },
53 { CS_GLOBALCLASS, sizeof(MDICLIENTINFO),
54 STOCK_LTGRAY_BRUSH, "MDIClientWndProc", "MDIClient" }
57 #define NB_BUILTIN_CLASSES16 \
58 (sizeof(WIDGETS_BuiltinClasses16)/sizeof(WIDGETS_BuiltinClasses16[0]))
60 /* Win32 built-in classes */
62 static WNDCLASS32A WIDGETS_BuiltinClasses32[BIC32_NB_CLASSES] =
65 { CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
66 ButtonWndProc, 0, sizeof(BUTTONINFO), 0, 0, IDC_ARROW, 0, 0, "Button" },
68 { CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/,
69 EditWndProc, 0, sizeof(void *), 0, 0, IDC_IBEAM, 0, 0, "Edit" },
71 { CS_GLOBALCLASS | CS_DBLCLKS /*| CS_PARENTDC*/,
72 ListBoxWndProc, 0, sizeof(void *), 0, 0, IDC_ARROW, 0, 0, "ListBox" },
74 { CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
75 ComboWndProc, 0, sizeof(void *), 0, 0, IDC_ARROW, 0, 0, "ComboBox" },
77 { CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS,
78 ComboLBWndProc, 0, sizeof(void *), 0, 0, IDC_ARROW, 0, 0, "ComboLBox" },
80 { CS_GLOBALCLASS | CS_SAVEBITS, PopupMenuWndProc,
81 0, sizeof(HMENU32), 0, 0, IDC_ARROW, NULL_BRUSH, 0, POPUPMENU_CLASS_NAME },
83 { CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
84 ScrollBarWndProc, 0, sizeof(SCROLLBAR_INFO), 0, 0, IDC_ARROW, 0, 0, "ScrollBar"},
86 { CS_GLOBALCLASS, DesktopWndProc, 0, sizeof(DESKTOPINFO),
87 0, 0, IDC_ARROW, 0, 0, DESKTOP_CLASS_NAME },
89 { CS_GLOBALCLASS | CS_SAVEBITS, DefDlgProc32A, 0, DLGWINDOWEXTRA,
90 0, 0, IDC_ARROW, 0, 0, DIALOG_CLASS_NAME },
92 { CS_GLOBALCLASS, IconTitleWndProc, 0, 0,
93 0, 0, IDC_ARROW, 0, 0, ICONTITLE_CLASS_NAME }
96 static ATOM bicAtomTable[BIC32_NB_CLASSES];
98 /* Win32 common controls */
100 static WNDCLASS32A WIDGETS_CommonControls32[] =
102 { CS_GLOBALCLASS | CS_VREDRAW | CS_HREDRAW, StatusWindowProc, 0,
103 sizeof(STATUSWINDOWINFO), 0, 0, 0, 0, 0, STATUSCLASSNAME32A },
106 #define NB_COMMON_CONTROLS32 \
107 (sizeof(WIDGETS_CommonControls32)/sizeof(WIDGETS_CommonControls32[0]))
110 /***********************************************************************
113 * Initialize the built-in window classes.
115 BOOL32 WIDGETS_Init(void)
119 const BUILTIN_CLASS_INFO16 *info16 = WIDGETS_BuiltinClasses16;
121 WNDCLASS32A *class32 = WIDGETS_BuiltinClasses32;
123 if (!(name = SEGPTR_ALLOC( 20 * sizeof(char) ))) return FALSE;
125 /* Create 16-bit classes */
127 class16.cbClsExtra = 0;
128 class16.hInstance = 0;
130 class16.hCursor = LoadCursor16( 0, IDC_ARROW );
131 class16.lpszMenuName = (SEGPTR)0;
132 class16.lpszClassName = SEGPTR_GET(name);
133 for (i = 0; i < NB_BUILTIN_CLASSES16; i++, info16++)
135 class16.style = info16->style;
136 class16.lpfnWndProc = (WNDPROC16)MODULE_GetWndProcEntry16( info16->procName );
137 class16.cbWndExtra = info16->wndExtra;
138 class16.hbrBackground = info16->background;
139 strcpy( name, info16->className );
140 if (!RegisterClass16( &class16 )) return FALSE;
143 /* Create 32-bit classes */
145 for (i = 0; i < BIC32_NB_CLASSES; i++, class32++)
147 /* Just to make sure the string is > 0x10000 */
148 strcpy( name, (char *)class32->lpszClassName );
149 class32->lpszClassName = name;
150 class32->hCursor = LoadCursor16( 0, class32->hCursor );
151 if (!(bicAtomTable[i] = RegisterClass32A( class32 ))) return FALSE;
159 /***********************************************************************
160 * InitCommonControls (COMCTL32.15)
162 void InitCommonControls(void)
166 WNDCLASS32A *class32 = WIDGETS_CommonControls32;
168 for (i = 0; i < NB_COMMON_CONTROLS32; i++, class32++)
170 /* Just to make sure the string is > 0x10000 */
171 strcpy( name, (char *)class32->lpszClassName );
172 class32->lpszClassName = name;
173 class32->hCursor = LoadCursor16( 0, IDC_ARROW );
174 RegisterClass32A( class32 );
179 /***********************************************************************
180 * WIDGETS_IsControl32
182 * Check whether pWnd is a built-in control or not.
184 BOOL32 WIDGETS_IsControl32( WND* pWnd, BUILTIN_CLASS32 cls )
186 assert( cls < BIC32_NB_CLASSES );
187 return (pWnd->class->atomName == bicAtomTable[cls]);