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

📄 button.c

📁 基于minigui 的界面编程
💻 C
📖 第 1 页 / 共 3 页
字号:
static void btnPaintCheckedButton (PCONTROL pCtrl, HDC hdc, DWORD dwStyle,                RECT* prcClient, RECT* prcText, RECT* prcBitmap){    switch (dwStyle & BS_TYPEMASK)    {        case BS_AUTORADIOBUTTON:        case BS_RADIOBUTTON:            if (dwStyle & BS_PUSHLIKE) {                Draw3DControlFrame (hdc, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 PIXEL_darkgray,                                FALSE);                break;            }            if (dwStyle & WS_DISABLED) {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       (BTN_WIDTH_BMP << 2), BTN_HEIGHT_BMP);            }            else {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP, 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,                                 PIXEL_darkgray,                                FALSE);                break;            }            if (dwStyle & WS_DISABLED) {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP << 2, 0);            }            else {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP, 0);            }        break;/*        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,                                   BUTTON_BMP,                                   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,                                 PIXEL_darkgray,                                FALSE);                OffsetRect (prcText, 1, 1);                break;            }            if (BUTTON_STATUS(pCtrl) & BST_CHECKED) {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP * 3, BTN_HEIGHT_BMP);            }            else {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       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,                                 PIXEL_darkgray,                                FALSE);                OffsetRect (prcText, 1, 1);                 break;            }            if (BUTTON_STATUS (pCtrl) & BST_CHECKED) {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP * 3, 0);            }            else {                FillBoxWithBitmapPart (hdc, prcBitmap->left, prcBitmap->top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       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;    SetPenColor (hdc, PIXEL_darkgray);    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    type = pCtrl->dwStyle & BS_TYPEMASK;        while (pGroupLeader) {        if (pGroupLeader->dwStyle & WS_GROUP)            break;        pGroupLeader = pGroupLeader->prev;    }    pOthers = pGroupLeader;    while (pOthers) {        if ((pOthers->dwStyle & BS_TYPEMASK) != type)            break;        if ((pOthers != pCtrl) && (BUTTON_STATUS (pOthers) | BST_CHECKED)) {            BUTTON_STATUS (pOthers) &= ~BST_CHECKED;            InvalidateRect ((HWND)pOthers, NULL, TRUE);        }        pOthers = pOthers->next;    }    return pCtrl->id;}static int ButtonCtrlProc (HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam){    HDC         hdc;    PCONTROL    pCtrl;    DWORD       dwStyle;    RECT        rcClient;    RECT        rcText;    RECT        rcBitmap;    PBUTTONDATA pData;    pCtrl   = Control(hWnd);    dwStyle = pCtrl->dwStyle;    switch(uMsg)    {        case MSG_CREATE:            pData = (BUTTONDATA*) calloc (1, sizeof(BUTTONDATA));            if (pData == NULL)                 return -1;            pData->status = 0;            pData->data = pCtrl->dwAddData;            pCtrl->dwAddData2 = (DWORD) pData;            switch (dwStyle & BS_TYPEMASK) {                case BS_PUSHBUTTON:                case BS_DEFPUSHBUTTON:                    SetWindowBkColor (hWnd, GetWindowElementColor (BKC_BUTTON));                    break;                default:                    if (dwStyle & BS_CHECKED)                        pData->status |= BST_CHECKED;                    break;            }        break;               case MSG_DESTROY:            free ((void*) pCtrl->dwAddData2);        break;                case BM_GETCHECK:            switch (dwStyle & BS_TYPEMASK) {                case BS_AUTOCHECKBOX:                case BS_AUTORADIOBUTTON:                case BS_CHECKBOX:                case BS_RADIOBUTTON:                    return (BUTTON_STATUS (pCtrl) & BST_CHECKED);                                case BS_3STATE:                case BS_AUTO3STATE:                    if (BUTTON_STATUS (pCtrl) & BST_INDETERMINATE)                        return (BST_INDETERMINATE);                    return (BUTTON_STATUS (pCtrl) & BST_CHECKED);                                default:                    return 0;            }        break;                case BM_GETSTATE:            return (int)(BUTTON_STATUS (pCtrl));        case BM_GETIMAGE:        {            int* image_type = (int*) wParam;            if (dwStyle & BS_BITMAP) {                if (image_type) {                    *image_type = BM_IMAGE_BITMAP;                }                return (int)(BUTTON_DATA (pCtrl));            }            else if (dwStyle & BS_ICON) {                if (image_type) {                    *image_type = BM_IMAGE_ICON;                }                return (int)(BUTTON_DATA (pCtrl));            }        }        return 0;                case BM_SETIMAGE:        {            int oldImage = (int)BUTTON_DATA (pCtrl);            if (wParam == BM_IMAGE_BITMAP) {                pCtrl->dwStyle &= ~BS_ICON;                pCtrl->dwStyle |= BS_BITMAP;            }            else if (wParam == BM_IMAGE_ICON){                pCtrl->dwStyle &= ~BS_BITMAP;                pCtrl->dwStyle |= BS_ICON;            }            if (lParam) {                 BUTTON_DATA (pCtrl) = (DWORD)lParam;                 InvalidateRect (hWnd, NULL, TRUE);            }            return oldImage;        }        break;        case BM_CLICK:        {            DWORD dwState;                        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 = BST_INDETERMINATE - dwState;                    SendMessage (hWnd, BM_SETCHECK, (WPARAM)dwState, 0);                break;                    case BS_PUSHBUTTON:                case BS_DEFPUSHBUTTON:                break;

⌨️ 快捷键说明

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