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

📄 combobox.c

📁 libminigui-1.3.0.tar.gz。 miniGUI的库函数源代码!
💻 C
📖 第 1 页 / 共 3 页
字号:
            if (reason == RCTM_CLICK)                ScreenToClient (hwnd, &x, &y);             if (IS_SET (pData, CSF_HASDROPPED))                 CLEAR_STATE (pData, CSF_HASDROPPED);             if (((dwStyle & CBS_TYPEMASK) > CBS_AUTOSPIN) && PtInRect (&pData->ButtonRect, x, y))                SET_STATE (pData, CSF_HASDROPPED);             break;         }         case MSG_SETFOCUS:            if (dwStyle & CBS_AUTOFOCUS)                SetFocusChild (pData->EditControl);            if (dwStyle & CBS_NOTIFY)                NotifyParent (hwnd, pCtrl->id, CBN_SETFOCUS);            break;        case MSG_KILLFOCUS:            if (((dwStyle & CBS_TYPEMASK) == CBS_DROPDOWNLIST) &&                     IS_SET (pData, CSF_HASDROPPED)) {                 ShowWindow (pData->ListBoxControl, SW_HIDE);                 CLEAR_STATE (pData, CSF_HASDROPPED);                 if (dwStyle & CBS_NOTIFY)                    NotifyParent (hwnd, pCtrl->id, CBN_CLOSEUP);            }             if (dwStyle & CBS_NOTIFY)                NotifyParent (hwnd, pCtrl->id, CBN_KILLFOCUS);            break;        case MSG_LBUTTONDOWN:         {             int x = LOSWORD(lParam);             int y = HISWORD(lParam);             if (PtInRect (&pData->ButtonRect, x, y)) {                 BOOL down_button = FALSE;                if (y > ((pData->ButtonRect.bottom + pData->ButtonRect.top) >> 1)) {                    down_button = TRUE;                }                switch (dwStyle & CBS_TYPEMASK) {                 case CBS_SPINLIST:                case CBS_AUTOSPIN:                    SetCapture (hwnd);                    SendMessage (hwnd, CB_SPIN, down_button, 0);                    SetAutoRepeatMessage (hwnd, CB_FASTSPIN, down_button, 0);                    break;                case CBS_DROPDOWNLIST:                    if (IS_SET (pData, CSF_HASDROPPED)) {                         ShowWindow (pData->ListBoxControl, SW_HIDE);                        CLEAR_STATE (pData, CSF_HASDROPPED);                         if (dwStyle & CBS_NOTIFY)                            NotifyParent (hwnd, pCtrl->id, CBN_CLOSEUP);                    }                     else {                         ShowWindow (pData->ListBoxControl, SW_SHOW);                        SET_STATE (pData, CSF_HASDROPPED);                         if (dwStyle & CBS_NOTIFY)                            NotifyParent (hwnd, pCtrl->id, CBN_DROPDOWN);                    }                     break;                }             }            break;         }         case MSG_LBUTTONUP:         {                    switch (dwStyle & CBS_TYPEMASK) {             case CBS_SPINLIST:            case CBS_AUTOSPIN:                SetAutoRepeatMessage (hwnd, 0, 0, 0);                ReleaseCapture ();                break;            }        }        case MSG_KEYDOWN:        {            switch (dwStyle & CBS_TYPEMASK) {            case CBS_SPINLIST:            case CBS_AUTOSPIN:                switch (LOWORD(wParam)) {                case SCANCODE_CURSORBLOCKUP:                case SCANCODE_CURSORBLOCKDOWN:                    SendMessage (hwnd, CB_SPIN, (LOWORD(wParam) == SCANCODE_CURSORBLOCKDOWN), 0);                    break;                case SCANCODE_PAGEUP:                case SCANCODE_PAGEDOWN:                    SendMessage (hwnd, CB_FASTSPIN, (LOWORD(wParam) == SCANCODE_PAGEDOWN), 0);                    break;                }                break;            case CBS_DROPDOWNLIST:                switch (LOWORD(wParam)) {                case SCANCODE_ESCAPE:                    if (IS_SET (pData, CSF_HASDROPPED)) {                        ShowWindow (pData->ListBoxControl, SW_HIDE);                        CLEAR_STATE (pData, CSF_HASDROPPED);                        if (dwStyle & CBS_NOTIFY) {                            NotifyParent (hwnd, pCtrl->id, CBN_SELENDCANCEL);                            NotifyParent (hwnd, pCtrl->id, CBN_CLOSEUP);                        }                        SetFocusChild (pData->EditControl);                    }                    break;                case SCANCODE_ENTER:                    if (IS_SET (pData, CSF_HASDROPPED)) {                        ShowWindow (pData->ListBoxControl, SW_HIDE);                        CLEAR_STATE (pData, CSF_HASDROPPED);                        if (dwStyle & CBS_NOTIFY) {                            NotifyParent (hwnd, pCtrl->id, CBN_SELENDOK);                            NotifyParent (hwnd, pCtrl->id, CBN_CLOSEUP);                        }                        SetFocusChild (pData->EditControl);                    }                    break;                case SCANCODE_CURSORBLOCKUP:                case SCANCODE_PAGEUP:                case SCANCODE_CURSORBLOCKDOWN:                case SCANCODE_PAGEDOWN:                    if (!IS_SET (pData, CSF_HASDROPPED)) {                        ShowWindow (pData->ListBoxControl, SW_SHOW);                        SetFocusChild (pData->ListBoxControl);                        SET_STATE (pData, CSF_HASDROPPED);                        if (dwStyle & CBS_NOTIFY)                            NotifyParent (hwnd, pCtrl->id, CBN_DROPDOWN);                    }                    break;                }                break;            }        }        case MSG_COMMAND:        {            int len;            char *buffer;            int sel;            int id = LOWORD(wParam);            int code = HIWORD(wParam);            switch (id) {            case IDC_CLISTBOX:            {                if ((dwStyle & CBS_TYPEMASK) == CBS_DROPDOWNLIST &&                                 (code == LBN_CLICKED || code == LBN_KILLFOCUS)) {                    ShowWindow (pData->ListBoxControl, SW_HIDE);                    CLEAR_STATE (pData, CSF_HASDROPPED);                    if (dwStyle & CBS_NOTIFY)                        NotifyParent (hwnd, pCtrl->id, CBN_CLOSEUP);                    break;                }                if (code == LBN_DBLCLK && (dwStyle & CBS_NOTIFY)) {                    NotifyParent (hwnd, pCtrl->id, CBN_DBLCLK);                    break;                }                if (code != LBN_SELCHANGE)                    break;                if ((sel = SendMessage (pData->ListBoxControl, LB_GETCURSEL, 0, 0)) >= 0) {                    len = SendMessage (pData->ListBoxControl, LB_GETTEXTLEN, sel, 0);#ifdef HAVE_ALLOCA                    buffer = alloca (len + 1);#else                    buffer = FixStrAlloc (len + 1);#endif                    SendMessage (pData->ListBoxControl, LB_GETTEXT, sel, (LPARAM)buffer);                    SendMessage (pData->EditControl, MSG_SETTEXT, 0, (LPARAM)buffer);#ifndef HAVE_ALLOCA                    FreeFixStr (buffer);#endif                }                if (dwStyle & CBS_NOTIFY)                    NotifyParent (hwnd, pCtrl->id, CBN_SELCHANGE);                break;            }             case IDC_CEDIT:                if (code == EN_DBLCLK && dwStyle & CBS_NOTIFY) {                    NotifyParent (hwnd, pCtrl->id, CBN_DBLCLK);                }                else if (code == EN_CHANGE) {                    if (pData->ListBoxControl) {                        char str [21];                        GetWindowText (pData->EditControl, str, LEN_SPINVALUE);                        if (str [0] != '\0') {                            if ((sel = SendMessage (pData->ListBoxControl, LB_FINDSTRING, 0, (LPARAM)str)) >= 0)                                SendMessage (pData->ListBoxControl, LB_SETCURSEL, sel, 0);                        }                    }                    if (dwStyle & CBS_NOTIFY)                        NotifyParent (hwnd, pCtrl->id, CBN_EDITCHANGE);                 }                 break;            }            break;        }        case MSG_GETDLGCODE:            return DLGC_WANTARROWS | DLGC_WANTENTER;        case MSG_FONTCHANGED:            SetWindowFont (pData->EditControl, GetWindowFont (hwnd));            if (pData->ListBoxControl)                SetWindowFont (pData->ListBoxControl, GetWindowFont (hwnd));            return 0;        case MSG_PAINT:        {            HDC hdc;            hdc = BeginPaint (hwnd);            ComboBoxDownButton (hwnd, hdc);                EndPaint (hwnd, hdc);            return 0;        }        case CB_GETCHILDREN:        {            HWND* wnd_edit = (HWND*)wParam;            HWND* wnd_listbox = (HWND*)lParam;            *wnd_edit = pData->EditControl;            *wnd_listbox = pData->ListBoxControl;            return 0;        }        /* when click the up/down button, spin the value of SIMPLE and AUTOSPIN combobox */        case CB_SPIN:            switch (dwStyle & CBS_TYPEMASK) {            case CBS_SPINLIST:                if (wParam)                    SendMessage (pData->ListBoxControl, MSG_KEYDOWN, SCANCODE_CURSORBLOCKDOWN, 0);                else                    SendMessage (pData->ListBoxControl, MSG_KEYDOWN, SCANCODE_CURSORBLOCKUP, 0);                break;            case CBS_AUTOSPIN:            {                char buffer [LEN_SPINVALUE+1];                int cur_value, new_value;                GetWindowText (pData->EditControl, buffer, LEN_SPINVALUE);#if 0                cur_value = new_value = strtol (buffer, NULL, 0);#else                sscanf (buffer, pData->str_format, &cur_value);                new_value = cur_value;#endif                if (wParam) {                    new_value -= pData->spin_pace;                }                else {                    new_value += pData->spin_pace;                }                if (dwStyle & CBS_AUTOLOOP) {                    if (new_value > pData->spin_max)                        new_value = pData->spin_min;                    else if (new_value < pData->spin_min)                        new_value = pData->spin_max;                }                else {                    if (new_value > pData->spin_max)                        new_value = pData->spin_max;                    else if (new_value < pData->spin_min)                        new_value = pData->spin_min;                }                if (new_value != cur_value) {                    snprintf (buffer, LEN_SPINVALUE, pData->str_format, new_value);                    SetWindowText (pData->EditControl, buffer);                    if (dwStyle & CBS_NOTIFY)                        NotifyParent (hwnd, pCtrl->id, CBN_EDITCHANGE);                }                break;            }            }            break;        case CB_FASTSPIN:            switch (dwStyle & CBS_TYPEMASK) {            case CBS_SPINLIST:                if (wParam)

⌨️ 快捷键说明

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