Changeset 5242 for trunk/src/user32/win32class.cpp
- Timestamp:
- Feb 22, 2001, 11:37:31 AM (25 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/win32class.cpp
r5084 r5242 1 /* $Id: win32class.cpp,v 1.2 2 2001-02-10 10:35:31sandervl Exp $ */1 /* $Id: win32class.cpp,v 1.23 2001-02-22 10:37:30 sandervl Exp $ */ 2 2 /* 3 3 * Win32 Window Class Managment Code for OS/2 … … 104 104 dprintf(("USER32: wndclass->hIconSm %X\n", wndclass->hIconSm)); 105 105 106 nrExtraClass Words = wndclass->cbClsExtra;107 nrExtraWindow Words = wndclass->cbWndExtra;106 nrExtraClassBytes = wndclass->cbClsExtra; 107 nrExtraWindowBytes = wndclass->cbWndExtra; 108 108 backgroundBrush = wndclass->hbrBackground; 109 109 hCursor = wndclass->hCursor; … … 123 123 124 124 //User data class words/longs 125 if(nrExtraClass Words) {126 userClass Long = (ULONG *)_smalloc(nrExtraClassWords);127 if(userClass Long== NULL) {128 dprintf(("Win32Class ctr: userClass Long== NULL!"));125 if(nrExtraClassBytes) { 126 userClassBytes = (char *)_smalloc(nrExtraClassBytes); 127 if(userClassBytes == NULL) { 128 dprintf(("Win32Class ctr: userClassBytes == NULL!")); 129 129 exit(1); 130 130 } 131 memset(userClass Long, 0, nrExtraClassWords);132 } 133 else userClass Long= NULL;131 memset(userClassBytes, 0, nrExtraClassBytes); 132 } 133 else userClassBytes = NULL; 134 134 135 135 cWindows = 0; … … 151 151 WINPROC_FreeProc(windowProc, WIN_PROC_CLASS); 152 152 153 if(userClass Long) free(userClassLong);153 if(userClassBytes) free(userClassBytes); 154 154 if(classNameA) free(classNameA); 155 155 if(classNameW) free(classNameW); … … 251 251 252 252 if(HIWORD(id)) { 253 254 } 255 else 253 lpszClassName = UnicodeToAsciiString((LPWSTR)id); 254 } 255 else lpszClassName = (LPSTR)id; 256 256 257 257 winclass = FindClass(hInstance, lpszClassName); … … 278 278 BOOL Win32WndClass::getClassInfo(WNDCLASSEXA *wndclass) 279 279 { 280 wndclass->cbClsExtra = nrExtraClass Words;281 wndclass->cbWndExtra = nrExtraWindow Words;280 wndclass->cbClsExtra = nrExtraClassBytes; 281 wndclass->cbWndExtra = nrExtraWindowBytes; 282 282 wndclass->hbrBackground = backgroundBrush; 283 283 wndclass->hCursor = hCursor; … … 295 295 BOOL Win32WndClass::getClassInfo(WNDCLASSEXW *wndclass) 296 296 { 297 wndclass->cbClsExtra = nrExtraClass Words;298 wndclass->cbWndExtra = nrExtraWindow Words;297 wndclass->cbClsExtra = nrExtraClassBytes; 298 wndclass->cbWndExtra = nrExtraWindowBytes; 299 299 wndclass->hbrBackground = backgroundBrush; 300 300 wndclass->hCursor = hCursor; … … 376 376 switch(index) { 377 377 case GCL_CBCLSEXTRA: 378 return nrExtraClass Words;378 return nrExtraClassBytes; 379 379 case GCL_CBWNDEXTRA: 380 return nrExtraWindow Words;380 return nrExtraWindowBytes; 381 381 case GCL_HBRBACKGROUND: 382 382 return backgroundBrush; … … 399 399 return 0; 400 400 default: 401 if(index > 0 && index < nrExtraClassWords - sizeof(ULONG)) { 402 return userClassLong[index]; 403 } 401 if(index >= 0 && index + sizeof(ULONG) <= nrExtraClassBytes) { 402 //Note: NT4, SP6 does not set the last error to 0 403 SetLastError(ERROR_SUCCESS); 404 return *(ULONG *)(userClassBytes + index); 405 } 406 if(classNameA) { 407 dprintf2(("WARNING: getClassLong %s: %d -> wrong INDEX", classNameA, index)); 408 } 409 else dprintf2(("WARNING: getClassLong %d: %d -> wrong INDEX", classAtom, index)); 404 410 SetLastError(ERROR_INVALID_INDEX); //verified in NT4, SP6 405 411 return 0; … … 414 420 return (WORD)classAtom; 415 421 default: 416 if(index > 0 && index < nrExtraClassWords - sizeof(WORD)) { 417 return ((WORD *)userClassLong)[index]; 418 } 422 if(index >= 0 && index + sizeof(WORD) <= nrExtraClassBytes) { 423 //Note: NT4, SP6 does not set the last error to 0 424 SetLastError(ERROR_SUCCESS); 425 return *(WORD *)(userClassBytes + index); 426 } 427 if(classNameA) { 428 dprintf2(("WARNING: getClassWord %s: %d -> wrong INDEX", classNameA, index)); 429 } 430 else dprintf2(("WARNING: getClassWord %d: %d -> wrong INDEX", classAtom, index)); 419 431 SetLastError(ERROR_INVALID_INDEX); //verified in NT4, SP6 420 432 return 0; … … 430 442 switch(index) { 431 443 case GCL_CBCLSEXTRA: //TODO (doesn't affect allocated classes, so what does it do?) 432 rc = nrExtraClass Words;433 // nrExtraClass Words = lNewVal;444 rc = nrExtraClassBytes; 445 // nrExtraClassBytes = lNewVal; 434 446 break; 435 447 case GCL_CBWNDEXTRA: 436 rc = nrExtraWindow Words;437 nrExtraWindow Words = lNewVal;448 rc = nrExtraWindowBytes; 449 nrExtraWindowBytes = lNewVal; 438 450 break; 439 451 case GCL_HBRBACKGROUND: … … 466 478 break; 467 479 case GCL_WNDPROC: 468 480 //Note: Type of SetWindowLong determines new window proc type 469 481 // UNLESS the new window proc has already been registered 470 482 // (use the old type in that case) 471 483 // (VERIFIED in NT 4, SP6) 472 484 //TODO: Is that also true for GCL_WNDPROC??????????????? 473 485 rc = (LONG)WINPROC_GetProc(windowProc, (fUnicode) ? WIN_PROC_32W : WIN_PROC_32A ); 474 486 WINPROC_SetProc((HWINDOWPROC *)&windowProc, (WNDPROC)lNewVal, (fUnicode) ? WIN_PROC_32W : WIN_PROC_32A, WIN_PROC_CLASS ); … … 478 490 return 0; 479 491 default: 480 if(index > 0 && index < nrExtraClassWords - sizeof(ULONG)) {481 rc = userClassLong[index];482 userClassLong[index]= lNewVal;492 if(index >= 0 && index + sizeof(ULONG) <= nrExtraClassBytes) { 493 rc = *(ULONG *)(userClassBytes + index); 494 *(ULONG *)(userClassBytes + index) = lNewVal; 483 495 break; 484 496 } 485 497 SetLastError(ERROR_INVALID_INDEX); //verified in NT4, SP6 486 487 488 489 elsedprintf2(("WARNING: Win32WndClass::setClassLongA %d: %d %x -> wrong INDEX", classAtom, index, lNewVal));498 if(classNameA) { 499 dprintf2(("WARNING: Win32WndClass::setClassLongA %s: %d %x -> wrong INDEX", classNameA, index, lNewVal)); 500 } 501 else dprintf2(("WARNING: Win32WndClass::setClassLongA %d: %d %x -> wrong INDEX", classAtom, index, lNewVal)); 490 502 return 0; 491 503 } … … 509 521 return(rc); 510 522 default: 511 if(index > 0 && index < nrExtraClassWords - sizeof(WORD)) { 512 rc = ((WORD *)userClassLong)[index]; 513 ((WORD *)userClassLong)[index] = wNewVal; 523 if(index >= 0 && index + sizeof(WORD) <= nrExtraClassBytes) { 524 rc = *(WORD *)(userClassBytes + index); 525 *(WORD *)(userClassBytes + index) = wNewVal; 526 //Note: NT4, SP6 does not set the last error to 0 527 SetLastError(ERROR_SUCCESS); 514 528 return(rc); 515 529 } 516 530 SetLastError(ERROR_INVALID_INDEX); //verified in NT4, SP6 531 if(classNameA) { 532 dprintf2(("WARNING: setClassWord %s: %d %x -> wrong INDEX", classNameA, index, wNewVal)); 533 } 534 else dprintf2(("WARNING: setClassWord %d: %d %x -> wrong INDEX", classAtom, index, wNewVal)); 517 535 return 0; 518 536 }
Note:
See TracChangeset
for help on using the changeset viewer.