Release 940714
[wine/multimedia.git] / windows / defwnd.c
blob8ae88a0f55390a12f758d44d717e35b64464fdd9
1 /*
2 * Default window procedure
4 * Copyright 1993 Alexandre Julliard
5 */
7 static char Copyright[] = "Copyright Alexandre Julliard, 1993";
9 #include <stdlib.h>
10 #include <stdio.h>
11 #include "windows.h"
12 #include "win.h"
13 #include "class.h"
14 #include "user.h"
15 #include "syscolor.h"
17 extern LONG NC_HandleNCPaint( HWND hwnd, HRGN hrgn );
18 extern LONG NC_HandleNCActivate( HWND hwnd, WORD wParam );
19 extern LONG NC_HandleNCCalcSize( HWND hwnd, NCCALCSIZE_PARAMS *params );
20 extern LONG NC_HandleNCHitTest( HWND hwnd, POINT pt );
21 extern LONG NC_HandleNCLButtonDown( HWND hwnd, WORD wParam, LONG lParam );
22 extern LONG NC_HandleNCLButtonDblClk( HWND hwnd, WORD wParam, LONG lParam );
23 extern LONG NC_HandleSysCommand( HWND hwnd, WORD wParam, POINT pt );
24 extern LONG NC_HandleSetCursor( HWND hwnd, WORD wParam, LONG lParam );
25 extern LONG WINPOS_HandleWindowPosChanging( WINDOWPOS *winpos ); /* winpos.c */
26 extern void NC_TrackSysMenu( HWND hwnd ); /* menu.c */
27 extern BOOL ActivateMenuBarFocus(HWND hWnd); /* menu.c */
31 /***********************************************************************
32 * DEFWND_SetText
34 * Set the window text.
36 void DEFWND_SetText( HWND hwnd, LPSTR text )
38 LPSTR textPtr;
39 WND *wndPtr = WIN_FindWndPtr( hwnd );
41 if (wndPtr->hText) USER_HEAP_FREE( wndPtr->hText );
42 wndPtr->hText = USER_HEAP_ALLOC( LMEM_MOVEABLE, strlen(text) + 1 );
43 textPtr = (LPSTR) USER_HEAP_ADDR( wndPtr->hText );
44 strcpy( textPtr, text );
48 /***********************************************************************
49 * DefWindowProc (USER.107)
51 LONG DefWindowProc( HWND hwnd, WORD msg, WORD wParam, LONG lParam )
53 MEASUREITEMSTRUCT *measure;
54 CLASS * classPtr;
55 LPSTR textPtr;
56 int len;
57 WND * wndPtr = WIN_FindWndPtr( hwnd );
59 #ifdef DEBUG_MESSAGE
60 printf( "DefWindowProc: %d %d %d %08x\n", hwnd, msg, wParam, lParam );
61 #endif
63 switch(msg)
65 case WM_NCCREATE:
67 CREATESTRUCT * createStruct = (CREATESTRUCT *)lParam;
68 if (createStruct->lpszName)
69 DEFWND_SetText( hwnd, createStruct->lpszName );
70 if ((createStruct->style & WS_VSCROLL) ||
71 (createStruct->style & WS_HSCROLL)) NC_CreateScrollBars(hwnd);
72 return 1;
75 case WM_NCCALCSIZE:
76 return NC_HandleNCCalcSize( hwnd, (NCCALCSIZE_PARAMS *)lParam );
78 case WM_NCPAINT:
79 return NC_HandleNCPaint( hwnd, (HRGN)wParam );
81 case WM_PAINTICON:
82 printf("going to call NC_HandleNCPaintIcon\n");
83 return NC_HandleNCPaintIcon( hwnd );
86 case WM_NCHITTEST:
87 return NC_HandleNCHitTest( hwnd, MAKEPOINT(lParam) );
89 case WM_NCLBUTTONDOWN:
90 return NC_HandleNCLButtonDown( hwnd, wParam, lParam );
92 case WM_NCLBUTTONDBLCLK:
93 return NC_HandleNCLButtonDblClk( hwnd, wParam, lParam );
95 case WM_NCACTIVATE:
96 return NC_HandleNCActivate( hwnd, wParam );
98 case WM_NCDESTROY:
99 if (wndPtr->hText) USER_HEAP_FREE(wndPtr->hText);
100 wndPtr->hText = 0;
101 if (wndPtr->VScroll) free(wndPtr->VScroll);
102 if (wndPtr->HScroll) free(wndPtr->HScroll);
103 return 0;
105 case WM_PAINT:
107 PAINTSTRUCT paintstruct;
108 BeginPaint( hwnd, &paintstruct );
109 EndPaint( hwnd, &paintstruct );
110 return 0;
113 case WM_CLOSE:
114 DestroyWindow( hwnd );
115 return 0;
117 case WM_MOUSEACTIVATE:
118 if (wndPtr->dwStyle & WS_CHILD)
120 LONG ret = SendMessage( wndPtr->hwndParent, WM_MOUSEACTIVATE,
121 wParam, lParam );
122 if (ret) return ret;
124 return MA_ACTIVATE;
126 case WM_ACTIVATE:
127 if (wParam) SetFocus( hwnd );
128 break;
130 case WM_WINDOWPOSCHANGING:
131 return WINPOS_HandleWindowPosChanging( (WINDOWPOS *)lParam );
133 case WM_WINDOWPOSCHANGED:
135 WINDOWPOS * winPos = (WINDOWPOS *)lParam;
136 if (!(winPos->flags & SWP_NOMOVE))
137 SendMessage( hwnd, WM_MOVE, 0,
138 MAKELONG( wndPtr->rectClient.left,
139 wndPtr->rectClient.top ));
140 if (!(winPos->flags & SWP_NOSIZE))
141 SendMessage( hwnd, WM_SIZE, SIZE_RESTORED,
142 MAKELONG(wndPtr->rectClient.right-wndPtr->rectClient.left,
143 wndPtr->rectClient.bottom-wndPtr->rectClient.top));
144 return 0;
147 case WM_ERASEBKGND:
148 case WM_ICONERASEBKGND:
150 if (!(classPtr = CLASS_FindClassPtr( wndPtr->hClass ))) return 1;
151 if (!classPtr->wc.hbrBackground) return 1;
152 FillWindow( GetParent(hwnd), hwnd, (HDC)wParam,
153 classPtr->wc.hbrBackground );
154 return 0;
157 case WM_GETDLGCODE:
158 return 0;
160 case WM_CTLCOLOR:
162 if (HIWORD(lParam) == CTLCOLOR_SCROLLBAR)
164 SetBkColor( (HDC)wParam, RGB(255, 255, 255) );
165 SetTextColor( (HDC)wParam, RGB(0, 0, 0) );
166 UnrealizeObject( sysColorObjects.hbrushScrollbar );
167 return sysColorObjects.hbrushScrollbar;
169 else
171 SetBkColor( (HDC)wParam, GetSysColor(COLOR_WINDOW) );
172 SetTextColor( (HDC)wParam, GetSysColor(COLOR_WINDOWTEXT) );
173 return sysColorObjects.hbrushWindow;
177 case WM_GETTEXT:
179 if (wParam)
181 if (wndPtr->hText)
183 textPtr = (LPSTR)USER_HEAP_ADDR(wndPtr->hText);
184 if ((int)wParam > (len = strlen(textPtr)))
186 strcpy((char *)lParam, textPtr);
187 return (DWORD)len;
190 lParam = (DWORD)NULL;
192 return (0L);
195 case WM_GETTEXTLENGTH:
197 if (wndPtr->hText)
199 textPtr = (LPSTR)USER_HEAP_ADDR(wndPtr->hText);
200 return (DWORD)strlen(textPtr);
202 return (0L);
205 case WM_SETTEXT:
206 DEFWND_SetText( hwnd, (LPSTR)lParam );
207 NC_HandleNCPaint( hwnd, (HRGN)1 ); /* Repaint caption */
208 return 0;
210 case WM_SETCURSOR:
211 if (wndPtr->dwStyle & WS_CHILD)
212 if (SendMessage(wndPtr->hwndParent, WM_SETCURSOR, wParam, lParam))
213 return TRUE;
214 return NC_HandleSetCursor( hwnd, wParam, lParam );
216 case WM_SYSCOMMAND:
217 return NC_HandleSysCommand( hwnd, wParam, MAKEPOINT(lParam) );
219 case WM_SYSKEYDOWN:
220 if (wParam == VK_MENU) ActivateMenuBarFocus(hwnd);
221 break;
222 case WM_SYSKEYUP:
223 break;
224 case WM_MENUCHAR:
225 MessageBeep(0);
226 break;
227 case WM_MEASUREITEM:
228 measure = (MEASUREITEMSTRUCT *)lParam;
229 switch(measure->CtlType) {
230 case ODT_BUTTON:
231 break;
232 case ODT_COMBOBOX:
233 measure->itemHeight = 10;
234 /* printf("defwndproc WM_MEASUREITEM // ODT_COMBOBOX !\n");*/
235 break;
236 case ODT_LISTBOX:
237 measure->itemHeight = 10;
238 /* printf("defwndproc WM_MEASUREITEM // ODT_LISTBOX !\n");*/
239 break;
240 case ODT_MENU:
241 break;
242 default:
243 break;
245 break;
247 return 0;