Changeset 134 for trunk/src/user32/wndproc.cpp
- Timestamp:
- Jun 20, 1999, 6:47:39 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/wndproc.cpp
r131 r134 1 /* $Id: wndproc.cpp,v 1. 5 1999-06-20 14:02:13sandervl Exp $ */1 /* $Id: wndproc.cpp,v 1.6 1999-06-20 16:47:39 sandervl Exp $ */ 2 2 3 3 /* … … 28 28 #endif 29 29 30 31 void NotifyParent(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) 32 { 33 DWORD dwStyle, dwExStyle; 34 HWND hwndParent = GetParent(hwnd);; 35 36 while(hwndParent) { 37 dwStyle = GetWindowLongA(hwnd, GWL_STYLE); 38 dwExStyle = GetWindowLongA(hwnd, GWL_EXSTYLE); 39 //SvL: Taken from Wine 40 if(dwStyle & WS_CHILD && !(dwExStyle & WS_EX_NOPARENTNOTIFY) ) 41 { 42 hwndParent = GetParent(hwnd); 43 dprintf(("%s Send WM_PARENTNOTIFY from child %x to parent %x", GetMsgText(Msg), hwnd, hwndParent)); 44 /* Notify the parent window only */ 45 Win32WindowProc *parentwnd = Win32WindowProc::FindProc(hwndParent); 46 if(parentwnd) { 47 if(Msg == WM_CREATE || Msg == WM_DESTROY) { 48 //Todo: Set IdChild!! 49 parentwnd->GetWin32Callback()(hwndParent, WM_PARENTNOTIFY, MAKEWPARAM(Msg, 0), (LPARAM)hwnd ); 50 } 51 else parentwnd->GetWin32Callback()(hwndParent, WM_PARENTNOTIFY, MAKEWPARAM(Msg, 0), lParam ); 52 } 53 } 54 if(hwnd == hwndParent) { 55 break; 56 } 57 hwnd = hwndParent; 58 } 59 } 30 60 //****************************************************************************** 31 61 //****************************************************************************** … … 67 97 { 68 98 WNDCLASSA wc; 69 70 assert(GetClassInfoA(hinst, lpszClassName, &wc) == TRUE); 99 BOOL rc; 100 101 rc = GetClassInfoA(hinst, lpszClassName, &wc); 102 assert(rc == TRUE); 103 71 104 // pCallback = Win32WindowClass::GetClassCallback(hinst, (LPSTR)wc.lpszClassName); 72 105 pCallback = Win32WindowClass::GetClassCallback((LPSTR)wc.lpszClassName); … … 152 185 } 153 186 dprintf(("Win32WindowProc::FindProc, can't find window %X!\n", hwnd)); 187 return(NULL); 188 } 189 //****************************************************************************** 190 //Find newly created window 191 //****************************************************************************** 192 Win32WindowProc *Win32WindowProc::FindProc(HWND hwnd, DWORD threadid) 193 { 194 Win32WindowProc *window = Win32WindowProc::windows; 195 196 while(window != NULL) { 197 if(window->hwnd == 0 && window->threadid == threadid) { 198 return(window); 199 } 200 window = window->next; 201 } 202 dprintf(("Win32WindowProc::FindProc, can't find window %X %d!\n", hwnd, threadid)); 154 203 return(NULL); 155 204 } … … 225 274 LRESULT EXPENTRY_O32 WndCallback(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) 226 275 { 227 Win32WindowProc *curwnd = Win32WindowProc::windows;276 Win32WindowProc *curwnd; 228 277 LRESULT rc; 229 278 … … 231 280 return(0); 232 281 } 233 while(curwnd != NULL) { 234 if(curwnd->hwnd == hwnd) { 235 //SvL: Correct Open32 key mapping bug 236 if(Msg == WM_KEYDOWN || Msg == WM_KEYUP || Msg == WM_CHAR) { 237 // dprintf(("WM_KEYDOWN %X %08X\n", wParam, lParam)); 238 lParam = MapOEMToRealKey(wParam, lParam); 282 283 curwnd = Win32WindowProc::FindProc(hwnd); 284 if(!curwnd) { 285 curwnd = Win32WindowProc::FindProc(0, GetCurrentThreadId()); 286 if(curwnd) curwnd->SetWindowHandle(hwnd); 287 } 288 if(curwnd != NULL) { 289 #ifdef DEBUG 290 WriteLog("***************Message %s for window/dialog %X\n", GetMsgText(Msg), hwnd); 291 #endif 292 switch(Msg) 293 { 294 case WM_KEYDOWN: 295 case WM_KEYUP: 296 case WM_CHAR: 297 //SvL: Correct Open32 key mapping bug 298 lParam = MapOEMToRealKey(wParam, lParam); 299 break; 300 case WM_CREATE: //Open32 isn't sending WM_NCCREATE messages!! 301 if(curwnd->pCallback(hwnd, WM_NCCREATE, 0, lParam) == 0) { 302 dprintf(("WM_NCCREATE returned FALSE\n")); 303 return(-1); //don't create window 239 304 } 240 #ifdef DEBUG 241 WriteLog("***************Message %s for window/dialog %X\n", GetMsgText(Msg), hwnd); 242 #endif 243 // if(Msg == WM_CREATE || Msg == WM_INITDIALOG) {//Open32 isn't sending WM_NCCREATE messages!! 244 if(Msg == WM_CREATE) {//Open32 isn't sending WM_NCCREATE messages!! 245 #ifdef DEBUG1 246 WriteLog("WM_NCCREATE\n"); 247 #endif 248 if(curwnd->pCallback(hwnd, WM_NCCREATE, 0, lParam) == 0) { 249 dprintf(("WM_NCCREATE returned FALSE\n")); 250 return(-1); //don't create window 251 } 305 306 NotifyParent(hwnd, WM_CREATE, wParam, lParam); 252 307 //TODO 253 308 #if 0 254 if(curwnd->pCallback(hwnd, WM_NCCALCSIZE, 0, lParam) == 0) { 255 #ifdef DEBUG1 256 WriteLog("WM_NCCREATE returned FALSE\n"); 257 #endif 258 return(-1); //don't create window 259 } 260 #endif 261 #ifdef DEBUG1 262 WriteLog("WM_NCCREATE, continue window creation\n"); 263 #endif 264 } 265 #if 1 266 if(Msg == WM_ACTIVATE && LOWORD(wParam) != WA_INACTIVE) 267 {//SvL: Bugfix, Open32 is NOT sending this to the window (messes up Solitaire) 268 HDC hdc = GetDC(hwnd); 269 270 curwnd->pCallback(hwnd, WM_ERASEBKGND, hdc, 0); 271 ReleaseDC(hwnd, hdc); 309 if(curwnd->pCallback(hwnd, WM_NCCALCSIZE, 0, lParam) == 0) { 310 return(-1); //don't create window 272 311 } 273 312 #endif 274 rc = curwnd->pCallback(hwnd, Msg, wParam, lParam); 275 #ifdef DEBUG1 276 WriteLog("***************Message processed rc = %d\n", rc); 277 #endif 278 if(Msg == WM_NCDESTROY) { 279 dprintf(("WM_NCDESTROY received for window/dialog %X\n", curwnd->hwnd)); 280 Win32WindowSubProc::DeleteSubWindow(hwnd); //if present 281 delete curwnd; 282 } 283 return rc; 313 break; 314 315 case WM_LBUTTONDOWN: 316 case WM_MBUTTONDOWN: 317 case WM_RBUTTONDOWN: 318 case WM_DESTROY: //nofity parent 319 NotifyParent(hwnd, Msg, wParam, lParam); 320 break; 321 322 case WM_ACTIVATE: 323 if(LOWORD(wParam) != WA_INACTIVE) 324 {//SvL: Bugfix, Open32 is NOT sending this to the window (messes up Solitaire) 325 HDC hdc = GetDC(hwnd); 326 327 curwnd->pCallback(hwnd, WM_ERASEBKGND, hdc, 0); 328 ReleaseDC(hwnd, hdc); 329 } 330 break; 331 } 332 rc = curwnd->pCallback(hwnd, Msg, wParam, lParam); 333 if(Msg == WM_NCDESTROY) { 334 dprintf(("WM_NCDESTROY received for window/dialog %X\n", curwnd->hwnd)); 335 Win32WindowSubProc::DeleteSubWindow(hwnd); //if present 336 delete curwnd; 284 337 } 285 curwnd = curwnd->next; 286 } 287 //Message for window/dialog that's just been created 288 //TODO: This should be thread safe, right? 289 DWORD threadid = (DWORD)GetCurrentThreadId(); 290 curwnd = (Win32WindowProc *)Win32WindowProc::windows; 291 while(curwnd != NULL) { 292 if(curwnd->hwnd == 0 && curwnd->threadid == threadid) { 293 #ifdef DEBUG1 294 WriteLog("***************First message %s for window/dialog %X\n", GetMsgText(Msg), hwnd); 295 #endif 296 curwnd->SetWindowHandle(hwnd); 297 // if(Msg == WM_CREATE || Msg == WM_INITDIALOG) {//Open32 isn't sending WM_NCCREATE messages!! 298 if(Msg == WM_CREATE) {//Open32 isn't sending WM_NCCREATE messages!! 299 #ifdef DEBUG1 300 WriteLog("WM_NCCREATE\n"); 301 #endif 302 if(curwnd->pCallback(hwnd, WM_NCCREATE, 0, lParam) == 0) { 303 dprintf(("WM_NCCREATE returned FALSE\n")); 304 return(-1); //don't create window 305 } 306 #ifdef DEBUG1 307 WriteLog("WM_NCCREATE, continue window creation\n"); 308 #endif 309 } 310 rc = curwnd->pCallback(hwnd, Msg, wParam, lParam); 311 if(Msg == WM_NCDESTROY) { 312 dprintf(("WM_NCDESTROY received for window/dialog %X\n", curwnd->hwnd)); 313 Win32WindowSubProc::DeleteSubWindow(hwnd); //if present 314 delete curwnd; 315 } 316 return rc; 317 } 318 curwnd = curwnd->next; 319 } 320 #ifdef DEBUG1 321 WriteLog("Dialog control??\n"); 322 #endif 338 return rc; 339 } 340 323 341 //Could be a dialog control using a registered class, so check this: 324 342 char szClass[128];
Note:
See TracChangeset
for help on using the changeset viewer.