Changeset 158 for trunk/src/user32/user32.cpp
- Timestamp:
- Jun 22, 1999, 10:00:04 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/user32.cpp
r143 r158 1 /* $Id: user32.cpp,v 1.1 2 1999-06-21 13:57:28 sandervlExp $ */1 /* $Id: user32.cpp,v 1.13 1999-06-22 20:00:04 achimha Exp $ */ 2 2 3 3 /* … … 3426 3426 } 3427 3427 //****************************************************************************** 3428 //Stolen from Wine (controls\uitools.c)3429 //******************************************************************************3430 BOOL DrawEdgeDiag(HDC hdc, RECT *rect, UINT edge, UINT flags)3431 {3432 HPEN facePen, shadowPen, lightPen, blackPen, grayPen, nullPen;3433 HPEN iPen, oPen, oldPen;3434 HBRUSH oldBrush, faceBrush;3435 int cl, cr, ct, cb;3436 BOOL mainDiag;3437 POINT tp;3438 RECT r;3439 3440 /* If both rasied and sunken is specified, they anihilate one another */3441 if( !((flags & BF_MONO) || (flags & BF_FLAT)) ){3442 if( (edge & BDR_RAISEDOUTER) && (edge & BDR_SUNKENOUTER) )3443 return FALSE;3444 if( (edge & BDR_RAISEDINNER) && (edge & BDR_SUNKENINNER) )3445 return FALSE;3446 }3447 3448 /* Create/get the tools of the trade... */3449 facePen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNFACE));3450 shadowPen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW));3451 lightPen = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT));3452 grayPen = CreatePen(PS_SOLID, 0, RGB(168, 152, 144));3453 blackPen = GetStockObject(BLACK_PEN);3454 nullPen = GetStockObject(NULL_PEN);3455 faceBrush = GetSysColorBrush(COLOR_BTNFACE);3456 oldPen = SelectObject(hdc, nullPen);3457 oldBrush = SelectObject(hdc, faceBrush);3458 3459 /* this is my working rectangle */3460 r = *rect;3461 3462 if(flags & BF_MONO){3463 oPen = blackPen;3464 iPen = nullPen;3465 }else if(flags & BF_FLAT){3466 oPen = shadowPen;3467 iPen = facePen;3468 }else {3469 if(flags & BF_SOFT){3470 if(flags & BF_BOTTOM){3471 oPen = (edge & BDR_RAISEDOUTER) ? blackPen : lightPen;3472 iPen = (edge & BDR_RAISEDINNER) ? shadowPen : grayPen;3473 }3474 else{3475 oPen = (edge & BDR_RAISEDOUTER) ? lightPen : blackPen;3476 iPen = (edge & BDR_RAISEDINNER) ? grayPen : shadowPen;3477 }3478 }3479 else{3480 if(flags & BF_BOTTOM){3481 oPen = (edge & BDR_RAISEDOUTER) ? blackPen : lightPen;3482 iPen = (edge & BDR_RAISEDINNER) ? shadowPen : grayPen;3483 }3484 else{3485 oPen = (edge & BDR_RAISEDOUTER) ? grayPen : shadowPen;3486 iPen = (edge & BDR_RAISEDINNER) ? lightPen : blackPen;3487 }3488 }3489 }3490 3491 if(flags & BF_BOTTOM){3492 if(flags & BF_LEFT){3493 cr = -1; cl = 0;3494 ct = 0; cb = -1;3495 mainDiag = TRUE;3496 tp.x = r.left; tp.y = r.top;3497 }3498 else{ /* RIGHT */3499 cr = -1; cl = 0;3500 ct = 1; cb = 0;3501 tp.x = r.left; tp.y = r.bottom-1;3502 mainDiag = FALSE;3503 }3504 }3505 else{ /* TOP */3506 if(flags & BF_LEFT){3507 cr = 0; cl = 1;3508 ct = 0; cb = -1;3509 mainDiag = FALSE;3510 tp.x = r.right; tp.y = r.top;3511 }3512 else{ /* RIGHT */3513 cr = 0; cl = 1;3514 ct = 1; cb = 0;3515 tp.x = r.right; tp.y = r.bottom-1;3516 mainDiag = TRUE;3517 }3518 }3519 3520 /* if it has external edge, draw it */3521 if(edge & BDR_OUTER){3522 SelectObject(hdc, oPen);3523 MoveToEx(hdc, r.left, mainDiag ? r.bottom-1 : r.top, 0);3524 LineTo(hdc, r.right, mainDiag ? r.top-1 : r.bottom);3525 r.left += cl; r.right += cr; r.top += ct; r.bottom += cb;3526 }3527 3528 /* if it has internal edge, draw it */3529 if(edge & BDR_INNER){3530 SelectObject(hdc, iPen);3531 MoveToEx(hdc, r.left, mainDiag ? r.bottom-1 : r.top, 0);3532 LineTo(hdc, r.right, mainDiag ? r.top-1 : r.bottom);3533 r.left += cl; r.right += cr; r.top += ct; r.bottom += cb;3534 }3535 3536 if((flags & BF_MIDDLE) && !(flags & BF_MONO)){3537 POINT p[3];3538 p[0].x = mainDiag ? r.right: r.left;3539 p[0].y = r.top;3540 p[1].x = mainDiag ? r.left : r.right;3541 p[1].y = r.bottom;3542 p[2].x = tp.x;3543 p[2].y = tp.y;3544 SelectObject(hdc, nullPen);3545 SelectObject(hdc, faceBrush);3546 Polygon(hdc, p, 3);3547 }3548 3549 if(flags & BF_ADJUST)3550 *rect = r;3551 3552 /* Restore the DC */3553 SelectObject(hdc, oldPen);3554 SelectObject(hdc, oldBrush);3555 3556 /* Clean-up */3557 DeleteObject(facePen);3558 DeleteObject(shadowPen);3559 DeleteObject(lightPen);3560 DeleteObject(grayPen);3561 3562 return TRUE;3563 }3564 //******************************************************************************3565 //Stolen from Wine (controls\uitools.c)3566 //******************************************************************************3567 BOOL WIN32API DrawEdge(HDC hdc, LPRECT rect, UINT edge, UINT flags)3568 {3569 HBRUSH faceBrush, shadowBrush, lightBrush, blackBrush, grayBrush, nullBrush;3570 HBRUSH iNBrush, iSBrush, iEBrush, iWBrush;3571 HBRUSH oNBrush, oSBrush, oEBrush, oWBrush;3572 HBRUSH oldBrush;3573 POINT point[2];3574 RECT r;3575 3576 #ifdef DEBUG3577 WriteLog("USER32: DrawEdge %X %X, partially implemented\n", edge, flags);3578 WriteLog("USER32: DrawEdge (%d,%d) (%d,%d)\n", rect->left, rect->top, rect->right, rect->bottom);3579 #endif3580 3581 if(flags & BF_DIAGONAL) {3582 return DrawEdgeDiag(hdc, rect, edge, flags);3583 }3584 /* If both rasied and sunken is specified, they anihilate one another */3585 if( !((flags & BF_MONO) || (flags & BF_FLAT)) ){3586 if( (edge & BDR_RAISEDOUTER) && (edge & BDR_SUNKENOUTER) )3587 return FALSE;3588 if( (edge & BDR_RAISEDINNER) && (edge & BDR_SUNKENINNER) )3589 return FALSE;3590 }3591 3592 faceBrush = GetSysColorBrush(COLOR_BTNFACE);3593 shadowBrush = GetSysColorBrush(COLOR_BTNSHADOW);3594 lightBrush = GetSysColorBrush(COLOR_BTNHILIGHT);3595 blackBrush = GetStockObject(BLACK_BRUSH);3596 grayBrush = GetStockObject(LTGRAY_BRUSH);3597 nullBrush = GetStockObject(NULL_BRUSH);3598 oldBrush = SelectObject(hdc, nullBrush);3599 3600 /* this is my working rectangle */3601 r = *rect;3602 3603 if(flags & BF_MONO){3604 oNBrush = oSBrush = oEBrush = oWBrush = blackBrush;3605 iNBrush = iSBrush = iEBrush = iWBrush = nullBrush;3606 }else if(flags & BF_FLAT){3607 oNBrush = oSBrush = oEBrush = oWBrush = shadowBrush;3608 iNBrush = iSBrush = iEBrush = iWBrush = faceBrush;3609 }else {3610 if(flags & BF_SOFT){3611 oNBrush = oWBrush = (edge & BDR_RAISEDOUTER) ? lightBrush : blackBrush;3612 oSBrush = oEBrush = (edge & BDR_RAISEDOUTER) ? blackBrush : lightBrush;3613 iNBrush = iWBrush = (edge & BDR_RAISEDINNER) ? grayBrush : shadowBrush;3614 iSBrush = iEBrush = (edge & BDR_RAISEDINNER) ? shadowBrush : grayBrush;3615 }3616 else{3617 oNBrush = oWBrush = (edge & BDR_RAISEDOUTER) ? grayBrush : shadowBrush;3618 oSBrush = oEBrush = (edge & BDR_RAISEDOUTER) ? blackBrush : lightBrush;3619 iNBrush = iWBrush = (edge & BDR_RAISEDINNER) ? lightBrush : blackBrush;3620 iSBrush = iEBrush = (edge & BDR_RAISEDINNER) ? shadowBrush : grayBrush;3621 }3622 }3623 3624 /* if it has external edge, draw it */3625 if(edge & BDR_OUTER){3626 if(flags & BF_RIGHT){3627 SelectObject(hdc, oEBrush);3628 PatBlt(hdc, r.right-1, r.top, 1, r.bottom - r.top, PATCOPY);3629 r.right--;3630 }3631 if(flags & BF_BOTTOM){3632 SelectObject(hdc, oSBrush);3633 PatBlt(hdc, r.left, r.bottom-1, r.right-r.left, 1, PATCOPY);3634 r.bottom--;3635 }3636 if(flags & BF_LEFT){3637 SelectObject(hdc, oWBrush);3638 PatBlt(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY);3639 r.left++;3640 }3641 if(flags & BF_TOP){3642 SelectObject(hdc, oNBrush);3643 PatBlt(hdc, r.left, r.top, r.right-r.left, 1, PATCOPY);3644 r.top++;3645 }3646 }3647 3648 /* if it has internal edge, draw it */3649 if(edge & BDR_INNER){3650 if(flags & BF_RIGHT){3651 SelectObject(hdc, iEBrush);3652 PatBlt(hdc, r.right-1, r.top, 1, r.bottom - r.top, PATCOPY);3653 r.right--;3654 }3655 if(flags & BF_BOTTOM){3656 SelectObject(hdc, iSBrush);3657 PatBlt(hdc, r.left, r.bottom-1, r.right-r.left, 1, PATCOPY);3658 r.bottom--;3659 }3660 if(flags & BF_LEFT){3661 SelectObject(hdc, iWBrush);3662 PatBlt(hdc, r.left, r.top, 1, r.bottom - r.top, PATCOPY);3663 r.left++;3664 }3665 if(flags & BF_TOP){3666 SelectObject(hdc, iNBrush);3667 PatBlt(hdc, r.left, r.top, r.right-r.left, 1, PATCOPY);3668 r.top++;3669 }3670 }3671 3672 /* if we got to fill the middle, to it now */3673 if((flags & BF_MIDDLE) && !(flags & BF_MONO))3674 FillRect(hdc, &r, faceBrush);3675 3676 /* adjust the rectangle if required */3677 if(flags & BF_ADJUST)3678 *rect = r;3679 3680 /* Restore the DC */3681 SelectObject(hdc, oldBrush);3682 3683 return TRUE;3684 }3685 //******************************************************************************3686 3428 //****************************************************************************** 3687 3429 LRESULT WIN32API SendMessageTimeoutA(HWND hwnd, UINT Msg, WPARAM wParam,
Note:
See TracChangeset
for help on using the changeset viewer.