⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 button.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 3 页
字号:
            else                pCtrl->dwAddData2 &= ~BST_PUSHED;                        if (dwOldState != (pCtrl->dwAddData2 & BST_PUSHED))                InvalidateRect (hWnd, NULL, TRUE);        }        break;                        case BM_SETSTYLE:            pCtrl->dwStyle &= 0xFFFF0000;            pCtrl->dwStyle |= (DWORD)(wParam & 0x0000FFFF);            if (LOWORD (lParam))                InvalidateRect (hWnd, NULL, TRUE);        break;                case MSG_CHAR:            if (HIBYTE (wParam) == 0                     && ((dwStyle & BS_TYPEMASK) == BS_CHECKBOX                     || (dwStyle & BS_TYPEMASK) == BS_AUTOCHECKBOX)) {                DWORD dwOldState = pCtrl->dwAddData2;                                if (LOBYTE(wParam) == '+' || LOBYTE(wParam) == '=')                    pCtrl->dwAddData2 |= BST_CHECKED;                else if (LOBYTE(wParam) == '-')                    pCtrl->dwAddData2 &= ~BST_CHECKED;                                    if (dwOldState != pCtrl->dwAddData2)                    InvalidateRect (hWnd, NULL, TRUE);            }        break;                case MSG_ENABLE:            if (wParam && (dwStyle & WS_DISABLED))                pCtrl->dwStyle &= ~WS_DISABLED;            else if (!wParam && !(dwStyle & WS_DISABLED))                pCtrl->dwStyle |= WS_DISABLED;            else                return 0;            InvalidateRect (hWnd, NULL, TRUE);        return 0;        case MSG_ERASEBKGND:            if ((dwStyle & BS_TYPEMASK) != BS_OWNERDRAW)                return 0;        break;                case MSG_GETDLGCODE:            switch (dwStyle & BS_TYPEMASK) {                case BS_CHECKBOX:                case BS_AUTOCHECKBOX:                return DLGC_WANTCHARS | DLGC_BUTTON;                                case BS_RADIOBUTTON:                case BS_AUTORADIOBUTTON:                return DLGC_RADIOBUTTON | DLGC_BUTTON;                                case BS_DEFPUSHBUTTON:                return DLGC_DEFPUSHBUTTON;                                case BS_PUSHBUTTON:                return DLGC_PUSHBUTTON;                                case BS_3STATE:                case BS_AUTO3STATE:                return DLGC_3STATE;                default:                return 0;            }        break;        case MSG_GETFONT:        break;                case MSG_SETFONT:        break;        case MSG_NCHITTEST:        {            int x, y;                        x = (int)wParam;            y = (int)lParam;                    if (PtInRect ((PRECT) &(pCtrl->cl), x, y))                return HT_CLIENT;            else                  return HT_OUT;        }        break;            case MSG_KILLFOCUS:            pCtrl->dwAddData2 &= (~BST_FOCUS);            if (GetCapture() == hWnd)            {                ReleaseCapture ();                pCtrl->dwAddData2 &= (~BST_PUSHED);            }            hdc = GetClientDC (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            if (pCtrl->dwAddData2 & BST_PUSHED) {                btnPaintPushedButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                            btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            }                        btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            ReleaseDC (hdc);                    if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_KILLFOCUS);        break;        case MSG_SETFOCUS:            pCtrl->dwAddData2 |= BST_FOCUS;                        hdc = GetClientDC (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            if (pCtrl->dwAddData2 & BST_PUSHED) {                btnPaintPushedButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                                    btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            }            btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            ReleaseDC (hdc);            if ( ((dwStyle & BS_TYPEMASK) == BS_RADIOBUTTON)                    || ((dwStyle & BS_TYPEMASK) == BS_AUTORADIOBUTTON))                NotifyParent (hWnd, pCtrl->id, BN_SETFOCUS);        break;                case MSG_KEYDOWN:            if (wParam != SCANCODE_SPACE)                break;            pCtrl->dwAddData2 |= BST_PUSHED;            pCtrl->dwAddData2 |= BST_FOCUS;                        SetCapture (hWnd);            hdc = GetClientDC (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            btnPaintPushedButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                                btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            ReleaseDC (hdc);            NotifyParent (hWnd, pCtrl->id, BN_PUSHED);        break;                case MSG_KEYUP:        {            DWORD dwState;                        if (wParam != SCANCODE_SPACE || GetCapture () != hWnd)                break;                            pCtrl->dwAddData2 &= ~BST_PUSHED;            ReleaseCapture ();                        hdc = GetClientDC (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            btnPaintNormalButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                                btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            ReleaseDC (hdc);            switch (pCtrl->dwStyle & BS_TYPEMASK)            {                case BS_AUTORADIOBUTTON:                    if (!(pCtrl->dwAddData2 & BST_CHECKED))                        SendMessage (hWnd, BM_SETCHECK, BST_CHECKED, 0);                                            // check this one and uncheck others.                break;                                    case BS_AUTOCHECKBOX:                    if (pCtrl->dwAddData2 & BST_CHECKED)                        dwState = BST_UNCHECKED;                    else                        dwState = BST_CHECKED;                                                    SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                break;                                    case BS_AUTO3STATE:                    dwState = (pCtrl->dwAddData2 & 0x00000003L);                    dwState = BST_INDETERMINATE - dwState;                    SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                break;                    case BS_PUSHBUTTON:                case BS_DEFPUSHBUTTON:                break;            }            NotifyParent (hWnd, pCtrl->id, BN_CLICKED);            NotifyParent (hWnd, pCtrl->id, BN_UNPUSHED);        }        break;              case MSG_LBUTTONDBLCLK:            if ( ((dwStyle & BS_TYPEMASK) == BS_RADIOBUTTON)                    || ((dwStyle & BS_TYPEMASK) == BS_OWNERDRAW))                NotifyParent (hWnd, pCtrl->id, BN_DBLCLK);        break;                case MSG_LBUTTONDOWN:            if (GetCapture () == hWnd)                break;                        SetCapture (hWnd);                            pCtrl->dwAddData2 |= BST_PUSHED;            pCtrl->dwAddData2 |= BST_FOCUS;            hdc = GetClientDC (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            btnPaintPushedButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                                btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            ReleaseDC (hdc);        break;            case MSG_LBUTTONUP:        {            int x, y;            DWORD dwState;            if (GetCapture() != hWnd)                break;            ReleaseCapture ();            x = LOWORD(lParam);            y = HIWORD(lParam);            ScreenToClient (GetParent (hWnd), &x, &y);                        if (PtInRect ((PRECT) &(pCtrl->cl), x, y))            {                switch (pCtrl->dwStyle & BS_TYPEMASK)                {                    case BS_AUTORADIOBUTTON:                        if (!(pCtrl->dwAddData2 & BST_CHECKED))                            SendMessage (hWnd, BM_SETCHECK, BST_CHECKED, 0);                    break;                                        case BS_AUTOCHECKBOX:                        if (pCtrl->dwAddData2 & BST_CHECKED)                            dwState = BST_UNCHECKED;                        else                            dwState = BST_CHECKED;                                                        SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                    break;                                        case BS_AUTO3STATE:                        dwState = (pCtrl->dwAddData2 & 0x00000003L);                        dwState = BST_INDETERMINATE - dwState;                        SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                    break;                        case BS_PUSHBUTTON:                    case BS_DEFPUSHBUTTON:                    break;                }                                pCtrl->dwAddData2 &= ~BST_PUSHED;                InvalidateRect (hWnd, NULL, FALSE);                SendMessage (hWnd, MSG_PAINT, 0, 0);                NotifyParent (hWnd, pCtrl->id, BN_CLICKED);            }#if 0            else if (pCtrl->dwAddData2 & BST_PUSHED) {                pCtrl->dwAddData2 &= ~BST_PUSHED;                InvalidateRect (hWnd, NULL, FALSE);            }#endif        }        return 0;                        case MSG_MOUSEMOVE:        {            int x, y;            if (GetCapture() != hWnd)                break;            x = LOWORD(lParam);            y = HIWORD(lParam);            ScreenToClient (GetParent (hWnd), &x, &y);                        if (PtInRect ((PRECT) &(pCtrl->cl), x, y))            {                if ( !(pCtrl->dwAddData2 & BST_PUSHED) ) {                    pCtrl->dwAddData2 |= BST_PUSHED;                                        hdc = GetClientDC (hWnd);                    btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);                    btnPaintPushedButton (pCtrl, hdc, dwStyle,                        &rcClient, &rcText, &rcBitmap);                                        btnPaintContent (pCtrl, hdc, dwStyle, &rcText);                    btnPaintFocusButton (pCtrl, hdc, dwStyle,                        &rcClient, &rcText, &rcBitmap);                    ReleaseDC (hdc);                }            }            else if (pCtrl->dwAddData2 & BST_PUSHED) {                pCtrl->dwAddData2 &= ~BST_PUSHED;                hdc = GetClientDC (hWnd);                btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);                if (pCtrl->dwAddData2 & BST_CHECKED)                    btnPaintCheckedButton (pCtrl, hdc, dwStyle,                         &rcClient, &rcText, &rcBitmap);                else if (pCtrl->dwAddData2 & BST_INDETERMINATE)                    btnPaintInterminateButton (pCtrl, hdc, dwStyle,                        &rcClient, &rcText, &rcBitmap);                else                    btnPaintNormalButton (pCtrl, hdc, dwStyle,                        &rcClient, &rcText, &rcBitmap);                            btnPaintContent (pCtrl, hdc, dwStyle, &rcText);                btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                ReleaseDC (hdc);            }        }        break;            case MSG_PAINT:        {            hdc = BeginPaint (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            if (pCtrl->dwAddData2 & BST_PUSHED)                btnPaintPushedButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            else if (pCtrl->dwAddData2 & BST_CHECKED)                btnPaintCheckedButton (pCtrl, hdc, dwStyle,                     &rcClient, &rcText, &rcBitmap);            else if (pCtrl->dwAddData2 & BST_INDETERMINATE)                btnPaintInterminateButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            else                btnPaintNormalButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                        btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            if (pCtrl->dwAddData2 & BST_FOCUS)                btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                            EndPaint (hWnd, hdc);        }        break;        default:        break;    }        return DefaultControlProc (hWnd, uMsg, wParam, lParam);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -