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

📄 button.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 3 页
字号:
/*        case BS_DEFPUSHBUTTON:        case BS_PUSHBUTTON:        case BS_OWNERDRAW:        break;*/        default:        break;   }}static void btnPaintInterminateButton (PCONTROL pCtrl, HDC hdc, DWORD dwStyle,                RECT* prcClient, RECT* prcText, RECT* prcBitmap){    switch (dwStyle & BS_TYPEMASK)    {        case BS_3STATE:        case BS_AUTO3STATE:            if (dwStyle & BS_PUSHLIKE) {                break;            }            FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                   BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                   0, 0,                                   &sg_bmpButton,                                   BTN_WIDTH_BMP << 1, 0);        break;/*        case BS_AUTORADIOBUTTON:        case BS_RADIOBUTTON:        case BS_AUTOCHECKBOX:        case BS_CHECKBOX:        case BS_DEFPUSHBUTTON:        case BS_PUSHBUTTON:        case BS_OWNERDRAW:        break;*/        default:        break;    }}static void btnPaintPushedButton (PCONTROL pCtrl, HDC hdc, DWORD dwStyle,                RECT* prcClient, RECT* prcText, RECT* prcBitmap){    switch (dwStyle & BS_TYPEMASK)    {        case BS_DEFPUSHBUTTON:        case BS_PUSHBUTTON:            Draw3DControlFrame (hdc, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 GetWindowBkColor ((HWND)pCtrl),                                FALSE);            OffsetRect (prcText, 1, 1);        break;        case BS_AUTORADIOBUTTON:        case BS_RADIOBUTTON:            if (dwStyle & BS_PUSHLIKE) {                Draw3DControlFrame (hdc, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom, #if 0                                GetWindowBkColor ((HWND)pCtrl),#else                                PIXEL_darkgray,#endif                                FALSE);                OffsetRect (prcText, 1, 1);                break;            }            if (pCtrl->dwAddData2 & BST_CHECKED) {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       &sg_bmpButton,                                       BTN_WIDTH_BMP * 3, BTN_HEIGHT_BMP);            }            else {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       &sg_bmpButton,                                       BTN_WIDTH_BMP << 1, BTN_HEIGHT_BMP);            }        break;        case BS_3STATE:        case BS_AUTO3STATE:        case BS_AUTOCHECKBOX:        case BS_CHECKBOX:            if (dwStyle & BS_PUSHLIKE) {                Draw3DControlFrame (hdc, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom, #if 0                                GetWindowBkColor ((HWND)pCtrl),#else                                PIXEL_darkgray,#endif                                FALSE);                OffsetRect (prcText, 1, 1);                 break;            }            if (pCtrl->dwAddData2 & BST_CHECKED) {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       &sg_bmpButton,                                       BTN_WIDTH_BMP * 3, 0);            }            else {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       &sg_bmpButton,                                       BTN_WIDTH_BMP << 1, 0);            }        break;/*        case BS_OWNERDRAW:        break;*/        default:        break;   }}static void btnPaintFocusButton (PCONTROL pCtrl, HDC hdc, DWORD dwStyle,                RECT* prcClient, RECT* prcText, RECT* prcBitmap){    RECT rcBounds;    switch (dwStyle & BS_TYPEMASK)    {        case BS_DEFPUSHBUTTON:        case BS_PUSHBUTTON:            FocusRect (hdc, prcClient->left + BTN_WIDTH_BORDER,                             prcClient->top  + BTN_WIDTH_BORDER,                            prcClient->right - BTN_WIDTH_BORDER,                            prcClient->bottom - BTN_WIDTH_BORDER);            break;        case BS_3STATE:        case BS_AUTO3STATE:        case BS_AUTOCHECKBOX:        case BS_CHECKBOX:        case BS_AUTORADIOBUTTON:        case BS_RADIOBUTTON:            if (dwStyle & BS_PUSHLIKE) {                FocusRect (hdc, prcClient->left + BTN_WIDTH_BORDER,                                 prcClient->top  + BTN_WIDTH_BORDER,                                prcClient->right - BTN_WIDTH_BORDER,                                prcClient->bottom - BTN_WIDTH_BORDER);                break;            }            btnGetTextBoundsRect (pCtrl, hdc, dwStyle, prcText, &rcBounds);            FocusRect (hdc, rcBounds.left - 1,                            rcBounds.top - 1,                            rcBounds.right + 1,                            rcBounds.bottom + 1);                    break;/*        case BS_OWNERDRAW:        break;*/        default:        break;   }}static int btnUncheckOthers (PCONTROL pCtrl){    PCONTROL pGroupLeader = pCtrl;    PCONTROL pOthers;    DWORD    dwType = pCtrl->dwStyle & BS_TYPEMASK;        while (pGroupLeader) {        if (pGroupLeader->dwStyle & WS_GROUP)            break;        pGroupLeader = pGroupLeader->prev;    }    pOthers = pGroupLeader;    while (pOthers) {        if ((pOthers->dwStyle & BS_TYPEMASK) != dwType)            break;        if ((pOthers != pCtrl) && (pOthers->dwAddData2 | BST_CHECKED)) {            pOthers->dwAddData2 &= ~BST_CHECKED;            InvalidateRect ((HWND)pOthers, NULL, FALSE);        }        pOthers = pOthers->next;    }    return pCtrl->id;}int ButtonCtrlProc (HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam){    HDC         hdc;    PCONTROL    pCtrl;    DWORD       dwStyle;    RECT        rcClient;    RECT        rcText;    RECT        rcBitmap;    pCtrl   = Control(hWnd);    dwStyle = pCtrl->dwStyle;    switch(uMsg)    {        case MSG_NCCREATE:        break;                    case MSG_CREATE:            // load resource here.            switch (dwStyle & BS_CONTENTMASK) {                case BS_BITMAP:                {                    PBITMAP pBmp = malloc (sizeof (BITMAP));                    if (!pBmp) return -1;                                        if (LoadBitmap (HDC_SCREEN, pBmp, pCtrl->spCaption) < 0) {                        free (pBmp);                        pCtrl->dwAddData = 0;                    }                    else                        pCtrl->dwAddData = (DWORD) pBmp;                }                break;                case BS_ICON:                    pCtrl->dwAddData                            = (DWORD)LoadIconFromFile (HDC_SCREEN, pCtrl->spCaption, 0);                 break;                default:                    pCtrl->dwAddData = 0;                break;            }            // reset button state.            pCtrl->dwAddData2 = 0;        break;               case MSG_DESTROY:            if (pCtrl->dwAddData == 0)                break;            switch (dwStyle & BS_CONTENTMASK) {                case BS_BITMAP:                    UnloadBitmap ((PBITMAP)(pCtrl->dwAddData));                    free ((void*)pCtrl->dwAddData);                break;                                case BS_ICON:                    DestroyIcon ((HICON)(pCtrl->dwAddData));                break;            }        break;                case BM_CLICK:        {            DWORD dwState;                        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;            }                            InvalidateRect (hWnd, NULL, FALSE);            NotifyParent (hWnd, pCtrl->id, BN_CLICKED);        }        break;                case BM_GETCHECK:            switch (dwStyle & BS_TYPEMASK) {                case BS_AUTOCHECKBOX:                case BS_AUTORADIOBUTTON:                case BS_CHECKBOX:                case BS_RADIOBUTTON:                    return (pCtrl->dwAddData2 & BST_CHECKED);                                case BS_3STATE:                case BS_AUTO3STATE:                    if (pCtrl->dwAddData2 & BST_INDETERMINATE)                        return (BST_INDETERMINATE);                    return (pCtrl->dwAddData2 & BST_CHECKED);                                default:                    return 0;            }        break;                case BM_GETSTATE:            return (int)(pCtrl->dwAddData2);        break;        case BM_GETIMAGE:            if ((wParam == BM_IMAGE_BITMAP) && (dwStyle & BS_BITMAP))                return (int)(pCtrl->dwAddData);                            if ((wParam == BM_IMAGE_ICON) && (dwStyle & BS_ICON))                return (int)(pCtrl->dwAddData);        break;                case MSG_SETTEXT:            FreeFixStr (pCtrl->spCaption);            pCtrl->spCaption = FixStrAlloc (strlen((char*)lParam));            strcpy (pCtrl->spCaption, (char*)lParam);            InvalidateRect (hWnd, NULL, TRUE);            break;        case BM_SETIMAGE:            if ( ((wParam == BM_IMAGE_BITMAP) && (dwStyle & BS_BITMAP))                    || ((wParam == BM_IMAGE_ICON) && (dwStyle & BS_ICON)) ) {                 int oldImage = (int)pCtrl->dwAddData;                 pCtrl->dwAddData = (DWORD)lParam;                 InvalidateRect (hWnd, NULL, TRUE);                 return oldImage;            }        break;        case BM_SETCHECK:        {            DWORD dwOldState = pCtrl->dwAddData2;            switch (dwStyle & BS_TYPEMASK) {                case BS_CHECKBOX:                case BS_AUTOCHECKBOX:                    if (wParam & BST_CHECKED)                        pCtrl->dwAddData2 |= BST_CHECKED;                    else                        pCtrl->dwAddData2 &= ~BST_CHECKED;                break;                            case BS_AUTORADIOBUTTON:                case BS_RADIOBUTTON:                    if ( ((pCtrl->dwAddData2 & BST_CHECKED) == 0)                            && (wParam & BST_CHECKED) ) {                        pCtrl->dwAddData2 |= BST_CHECKED;                                                btnUncheckOthers (pCtrl);                    }                    else if ( (pCtrl->dwAddData2 & BST_CHECKED)                            && (!(wParam & BST_CHECKED)) ) {                        pCtrl->dwAddData2 &= ~BST_CHECKED;                    }                break;                            case BS_3STATE:                case BS_AUTO3STATE:                    switch (wParam) {                         case BST_INDETERMINATE:                        case BST_CHECKED:                        case BST_UNCHECKED:                            pCtrl->dwAddData2 &= 0xFFFFFFFC;                            pCtrl->dwAddData2 += (wParam & 0x00000003);                    }                break;            }                            if (dwOldState != pCtrl->dwAddData2)                InvalidateRect (hWnd, NULL, TRUE);        }        break;                case BM_SETSTATE:        {            DWORD dwOldState = pCtrl->dwAddData2 & BST_PUSHED;                        if (wParam)                pCtrl->dwAddData2 |= BST_PUSHED;

⌨️ 快捷键说明

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