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

📄 button.c

📁 基于minigui 的界面编程
💻 C
📖 第 1 页 / 共 3 页
字号:
            }                            NotifyParent (hWnd, pCtrl->id, BN_CLICKED);            InvalidateRect (hWnd, NULL, TRUE);        }        break;                case MSG_SETTEXT:        {            int len = strlen((char*)lParam);            FreeFixStr (pCtrl->spCaption);            pCtrl->spCaption = FixStrAlloc (len);            if (len > 0)                strcpy (pCtrl->spCaption, (char*)lParam);            InvalidateRect (hWnd, NULL, TRUE);            break;        }        case BM_SETCHECK:        {            DWORD dwOldState = BUTTON_STATUS (pCtrl);            switch (dwStyle & BS_TYPEMASK) {                case BS_CHECKBOX:                case BS_AUTOCHECKBOX:                    if (wParam & BST_CHECKED)                        BUTTON_STATUS(pCtrl) |= BST_CHECKED;                    else                        BUTTON_STATUS(pCtrl) &= ~BST_CHECKED;                break;                            case BS_AUTORADIOBUTTON:                case BS_RADIOBUTTON:                    if ( ((BUTTON_STATUS(pCtrl) & BST_CHECKED) == 0)                            && (wParam & BST_CHECKED) ) {                        BUTTON_STATUS(pCtrl) |= BST_CHECKED;                                                btnUncheckOthers (pCtrl);                    }                    else if ( (BUTTON_STATUS(pCtrl) & BST_CHECKED)                            && (!(wParam & BST_CHECKED)) ) {                        BUTTON_STATUS(pCtrl) &= ~BST_CHECKED;                    }                break;                            case BS_3STATE:                case BS_AUTO3STATE:                    switch (wParam) {                         case BST_INDETERMINATE:                        case BST_CHECKED:                        case BST_UNCHECKED:                            BUTTON_STATUS(pCtrl) &= 0xFFFFFFFC;                            BUTTON_STATUS(pCtrl) += (wParam & 0x00000003);                    }                break;            }                            if (dwOldState != BUTTON_STATUS(pCtrl))                InvalidateRect (hWnd, NULL, TRUE);            return dwOldState;        }                case BM_SETSTATE:        {            DWORD dwOldState = BUTTON_STATUS(pCtrl) & BST_PUSHED;                        if (wParam)                BUTTON_STATUS(pCtrl) |= BST_PUSHED;            else                BUTTON_STATUS(pCtrl) &= ~BST_PUSHED;                        if (dwOldState != (BUTTON_STATUS(pCtrl) & BST_PUSHED))                InvalidateRect (hWnd, NULL, TRUE);            return dwOldState;        }                        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 = BUTTON_STATUS(pCtrl);                                if (LOBYTE(wParam) == '+' || LOBYTE(wParam) == '=')                    BUTTON_STATUS(pCtrl) |= BST_CHECKED;                else if (LOBYTE(wParam) == '-')                    BUTTON_STATUS(pCtrl) &= ~BST_CHECKED;                                    if (dwOldState != BUTTON_STATUS(pCtrl))                    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_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_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:            BUTTON_STATUS(pCtrl) &= (~BST_FOCUS);            if (GetCapture() == hWnd) {                ReleaseCapture ();                BUTTON_STATUS(pCtrl) &= (~BST_PUSHED);            }            if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_KILLFOCUS);            InvalidateRect (hWnd, NULL, TRUE);        break;        case MSG_SETFOCUS:            BUTTON_STATUS(pCtrl) |= BST_FOCUS;            if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_SETFOCUS);            InvalidateRect (hWnd, NULL, TRUE);        break;                case MSG_KEYDOWN:            if (wParam != SCANCODE_SPACE && wParam != SCANCODE_ENTER)                break;            if (GetCapture () == hWnd)                break;                        SetCapture (hWnd);            BUTTON_STATUS(pCtrl) |= BST_PUSHED;            BUTTON_STATUS(pCtrl) |= BST_FOCUS;            if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_PUSHED);            InvalidateRect (hWnd, NULL, TRUE);        break;                case MSG_KEYUP:        {            DWORD dwState;                        if (wParam != SCANCODE_SPACE && wParam != SCANCODE_ENTER)                break;                            if (GetCapture () != hWnd)                break;            BUTTON_STATUS(pCtrl) &= ~BST_PUSHED;            ReleaseCapture ();                        InvalidateRect (hWnd, NULL, TRUE);            switch (pCtrl->dwStyle & BS_TYPEMASK)            {                case BS_AUTORADIOBUTTON:                    if (!(BUTTON_STATUS(pCtrl) & BST_CHECKED))                        SendMessage (hWnd, BM_SETCHECK, BST_CHECKED, 0);                break;                                    case BS_AUTOCHECKBOX:                    if (BUTTON_STATUS(pCtrl) & BST_CHECKED)                        dwState = BST_UNCHECKED;                    else                        dwState = BST_CHECKED;                                                    SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                break;                                    case BS_AUTO3STATE:                    dwState = (BUTTON_STATUS(pCtrl) & 0x00000003L);                    dwState = (dwState + 1) % 3;                    SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                break;                    case BS_PUSHBUTTON:                case BS_DEFPUSHBUTTON:                break;            }            NotifyParent (hWnd, pCtrl->id, BN_CLICKED);            if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_UNPUSHED);        }        break;              case MSG_LBUTTONDBLCLK:            if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_DBLCLK);        break;                case MSG_LBUTTONDOWN:            if (GetCapture () == hWnd)                break;                        SetCapture (hWnd);                            BUTTON_STATUS(pCtrl) |= BST_PUSHED;            BUTTON_STATUS(pCtrl) |= BST_FOCUS;            if (dwStyle & BS_NOTIFY)                NotifyParent (hWnd, pCtrl->id, BN_PUSHED);            InvalidateRect (hWnd, NULL, TRUE);        break;            case MSG_LBUTTONUP:        {            int x, y;            DWORD dwState;            if (GetCapture() != hWnd)                break;            ReleaseCapture ();            x = LOSWORD(lParam);            y = HISWORD(lParam);            ScreenToClient (GetParent (hWnd), &x, &y);                        if (PtInRect ((PRECT) &(pCtrl->cl), x, y))            {                switch (pCtrl->dwStyle & BS_TYPEMASK)                {                    case BS_AUTORADIOBUTTON:                        if (!(BUTTON_STATUS(pCtrl) & BST_CHECKED))                            SendMessage (hWnd, BM_SETCHECK, BST_CHECKED, 0);                    break;                                        case BS_AUTOCHECKBOX:                        if (BUTTON_STATUS(pCtrl) & BST_CHECKED)                            dwState = BST_UNCHECKED;                        else                            dwState = BST_CHECKED;                                                        SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                    break;                                        case BS_AUTO3STATE:                        dwState = (BUTTON_STATUS(pCtrl) & 0x00000003L);                        dwState = (dwState + 1) % 3;                        SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                    break;                        case BS_PUSHBUTTON:                    case BS_DEFPUSHBUTTON:                    break;                }                                BUTTON_STATUS(pCtrl) &= ~BST_PUSHED;                if (dwStyle & BS_NOTIFY)                    NotifyParent (hWnd, pCtrl->id, BN_UNPUSHED);                NotifyParent (hWnd, pCtrl->id, BN_CLICKED);                InvalidateRect (hWnd, NULL, TRUE);            }            else if (BUTTON_STATUS(pCtrl) & BST_PUSHED) {                BUTTON_STATUS(pCtrl) &= ~BST_PUSHED;                if (dwStyle & BS_NOTIFY)                    NotifyParent (hWnd, pCtrl->id, BN_UNPUSHED);                InvalidateRect (hWnd, NULL, TRUE);            }        }        return 0;                        case MSG_MOUSEMOVE:        {            int x, y;            if (GetCapture() != hWnd)                break;            x = LOSWORD(lParam);            y = HISWORD(lParam);            ScreenToClient (GetParent (hWnd), &x, &y);                        if (PtInRect ((PRECT) &(pCtrl->cl), x, y))            {                if ( !(BUTTON_STATUS(pCtrl) & BST_PUSHED) ) {                    BUTTON_STATUS(pCtrl) |= BST_PUSHED;                                        if (dwStyle & BS_NOTIFY)                        NotifyParent (hWnd, pCtrl->id, BN_PUSHED);                    InvalidateRect (hWnd, NULL, TRUE);                }            }            else if (BUTTON_STATUS(pCtrl) & BST_PUSHED) {                BUTTON_STATUS(pCtrl) &= ~BST_PUSHED;                if (dwStyle & BS_NOTIFY)                    NotifyParent (hWnd, pCtrl->id, BN_UNPUSHED);                InvalidateRect (hWnd, NULL, TRUE);            }        }        break;            case MSG_PAINT:        {            hdc = BeginPaint (hWnd);            btnGetRects (hWnd, dwStyle, &rcClient, &rcText, &rcBitmap);            if (BUTTON_STATUS(pCtrl) & BST_PUSHED)                btnPaintPushedButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            else if (BUTTON_STATUS(pCtrl) & BST_CHECKED)                btnPaintCheckedButton (pCtrl, hdc, dwStyle,                     &rcClient, &rcText, &rcBitmap);            else if (BUTTON_STATUS(pCtrl) & BST_INDETERMINATE)                btnPaintInterminateButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);            else                btnPaintNormalButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                        btnPaintContent (pCtrl, hdc, dwStyle, &rcText);            if (BUTTON_STATUS(pCtrl) & BST_FOCUS)                btnPaintFocusButton (pCtrl, hdc, dwStyle,                    &rcClient, &rcText, &rcBitmap);                            EndPaint (hWnd, hdc);        }        return 0;        default:        break;    }        return DefaultControlProc (hWnd, uMsg, wParam, lParam);}#endif /* _CTRL_BUTTON */

⌨️ 快捷键说明

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