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

📄 button.c

📁 使用miniGUI模拟器的简单开发例子(值得参考)
💻 C
📖 第 1 页 / 共 3 页
字号:
            else {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       0, BTN_HEIGHT_BMP);            }        break;        case BS_3STATE:        case BS_AUTO3STATE:        case BS_AUTOCHECKBOX:        case BS_CHECKBOX:            if (dwStyle & BS_PUSHLIKE) {                myDrawButton (hdc, (HWND)pCtrl, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 DF_3DBOX_NORMAL | DF_3DBOX_FILL,                                 GetWindowBkColor ((HWND)pCtrl));                break;            }            if (dwStyle & WS_DISABLED) {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP * 2, 0);            }            else {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                       BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       0, 0);            }        break;/*        case BS_OWNERDRAW:        break;*/        default:        break;    }}static void btnPaintCheckedButton (PCONTROL pCtrl, HDC hdc, DWORD dwStyle,                RECT* prcClient, RECT* prcText, RECT* prcBitmap){    int bmp_left = prcBitmap->left;    int bmp_top = prcBitmap->top + (prcBitmap->bottom - BTN_HEIGHT_BMP) / 2;    switch (dwStyle & BS_TYPEMASK)    {        case BS_AUTORADIOBUTTON:        case BS_RADIOBUTTON:            if (dwStyle & BS_PUSHLIKE) {                myDrawButton (hdc, (HWND)pCtrl, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 DF_3DBOX_PRESSED | DF_3DBOX_FILL,                                 GetWindowElementColorEx ((HWND)pCtrl, WEC_3DBOX_DARK));                break;            }            if (dwStyle & WS_DISABLED) {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       (BTN_WIDTH_BMP << 2), BTN_HEIGHT_BMP);            }            else {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_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) {                myDrawButton (hdc, (HWND)pCtrl, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 DF_3DBOX_PRESSED | DF_3DBOX_FILL,                                 GetWindowElementColorEx ((HWND)pCtrl, WEC_3DBOX_DARK));                break;            }            if (dwStyle & WS_DISABLED) {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP << 2, 0);            }            else {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_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){    int bmp_left = prcBitmap->left;    int bmp_top = prcBitmap->top + (prcBitmap->bottom - BTN_HEIGHT_BMP) / 2;    switch (dwStyle & BS_TYPEMASK)    {        case BS_3STATE:        case BS_AUTO3STATE:            if (dwStyle & BS_PUSHLIKE) {                break;            }            FillBoxWithBitmapPart (hdc, bmp_left, bmp_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){    int bmp_left = prcBitmap->left;    int bmp_top = prcBitmap->top + (prcBitmap->bottom - BTN_HEIGHT_BMP) / 2;    switch (dwStyle & BS_TYPEMASK)    {        case BS_DEFPUSHBUTTON:        case BS_PUSHBUTTON:            myDrawButton (hdc, (HWND)pCtrl, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 DF_3DBOX_PRESSED | DF_3DBOX_FILL,                                 GetWindowBkColor ((HWND)pCtrl));            OffsetRect (prcText, 1, 1);        break;        case BS_AUTORADIOBUTTON:        case BS_RADIOBUTTON:            if (dwStyle & BS_PUSHLIKE) {                myDrawButton (hdc, (HWND)pCtrl, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 DF_3DBOX_PRESSED | DF_3DBOX_FILL,                                 GetWindowElementColorEx ((HWND)pCtrl, WEC_3DBOX_DARK));                OffsetRect (prcText, 1, 1);                break;            }            if (BUTTON_STATUS(pCtrl) & BST_CHECKED) {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP * 3, BTN_HEIGHT_BMP);            }            else {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_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) {                myDrawButton (hdc, (HWND)pCtrl, prcClient->left, prcClient->top,                                prcClient->right, prcClient->bottom,                                 DF_3DBOX_PRESSED | DF_3DBOX_FILL,                                 GetWindowElementColorEx ((HWND)pCtrl, WEC_3DBOX_DARK));                OffsetRect (prcText, 1, 1);                 break;            }            if (BUTTON_STATUS (pCtrl) & BST_CHECKED) {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_top,                                        BTN_WIDTH_BMP, BTN_HEIGHT_BMP,                                       0, 0,                                       BUTTON_BMP,                                       BTN_WIDTH_BMP * 3, 0);            }            else {                FillBoxWithBitmapPart (hdc, bmp_left, bmp_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, GetWindowElementColorEx (hWnd, BKC_BUTTON_DEF));                    break;                default:                    if (dwStyle & BS_CHECKED)                        pData->status |= BST_CHECKED;                    break;            }        break;               case MSG_DESTROY:            free ((void*) pCtrl->dwAddData2);        break;        #ifdef _PHONE_WINDOW_STYLE		case MSG_SIZECHANGING:		{			const RECT* rcExpect = (const RECT*)wParam;			RECT* rcResult = (RECT*)lParam;			rcResult->left = rcExpect->left;			rcResult->top = rcExpect->top;			rcResult->right = rcExpect->right;			rcResult->bottom = rcExpect->top + bmp_pushbutton->bmHeight;		    return 0;		}        case MSG_SIZECHANGED:        {            RECT* rcWin = (RECT*)wParam;            RECT* rcClient = (RECT*)lParam;            *rcClient = *rcWin;            return 1;        }#endif        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;            }

⌨️ 快捷键说明

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