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, IDC_ARROW
, 0, 0, "Button" },
66 { CS_GLOBALCLASS
| CS_DBLCLKS
/*| CS_PARENTDC*/,
67 EditWndProc
, 0, sizeof(void *), 0, 0, IDC_IBEAM
, 0, 0, "Edit" },
69 { CS_GLOBALCLASS
| CS_DBLCLKS
/*| CS_PARENTDC*/,
70 ListBoxWndProc
, 0, sizeof(void *), 0, 0, IDC_ARROW
, 0, 0, "ListBox" },
72 { CS_GLOBALCLASS
| CS_PARENTDC
| CS_DBLCLKS
,
73 ComboWndProc
, 0, sizeof(void *), 0, 0, IDC_ARROW
, 0, 0, "ComboBox" },
75 { CS_GLOBALCLASS
| CS_DBLCLKS
| CS_SAVEBITS
,
76 ComboLBWndProc
, 0, sizeof(void *), 0, 0, IDC_ARROW
, 0, 0, "ComboLBox" },
78 { CS_GLOBALCLASS
| CS_SAVEBITS
, PopupMenuWndProc
,
79 0, sizeof(HMENU32
), 0, 0, IDC_ARROW
, 0, 0, POPUPMENU_CLASS_NAME
},
81 { CS_GLOBALCLASS
| CS_DBLCLKS
| CS_VREDRAW
| CS_HREDRAW
| CS_PARENTDC
,
82 ScrollBarWndProc
, 0, sizeof(SCROLLBAR_INFO
), 0, 0, IDC_ARROW
, 0, 0, "ScrollBar"},
84 { CS_GLOBALCLASS
, DesktopWndProc
, 0, sizeof(DESKTOPINFO
),
85 0, 0, IDC_ARROW
, 0, 0, DESKTOP_CLASS_NAME
},
87 { CS_GLOBALCLASS
| CS_SAVEBITS
, DefDlgProc32A
, 0, DLGWINDOWEXTRA
,
88 0, 0, IDC_ARROW
, 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, class32
->hCursor
);
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
]);