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

📄 listbox.c

📁 Microwindows genesis was with the NanoGUI project, and is now the primary distribution for both th
💻 C
📖 第 1 页 / 共 4 页
字号:
            else if (newTop > pData->itemCount - pData->itemVisibles)                newTop = pData->itemCount - pData->itemVisibles;                            if (pData->itemTop != newTop) {                pData->itemTop = newTop;                if (pData->itemHilighted < pData->itemTop)                    pData->itemHilighted = pData->itemTop;                if (pData->itemHilighted > ITEM_BOTTOM (pData))                    pData->itemHilighted = ITEM_BOTTOM (pData);                lstSetVScrollInfo (hwnd, pData, TRUE);                InvalidateRect (hwnd, NULL, TRUE);            }        }        break;            case LB_SETCURSEL:        case LB_SETCARETINDEX:        {            int new = (int)wParam;            int old, newTop;                        pData = (PLISTBOXDATA)pCtrl->userdata;            if (new < 0 || new > pData->itemCount - 1)                return LB_ERR;            old = pData->itemHilighted;            if (new >= 0 && new != old) {                if (pData->itemCount - new >= pData->itemVisibles)                    newTop = new;                else                    newTop = max (pData->itemCount - pData->itemVisibles, 0);                pData->itemTop = newTop;                pData->itemHilighted = new;                lstSetVScrollInfo (hwnd, pData, TRUE);            }            if (!(dwStyle & LBS_MULTIPLESEL))                lstSelectItem (dwStyle, pData, new);            InvalidateRect (hwnd, NULL, TRUE);            return old;        }        break;            case LB_GETCOUNT:            pData = (PLISTBOXDATA)pCtrl->userdata;            return pData->itemCount;        break;            case LB_GETCURSEL:        {            PLISTBOXITEM plbi;            int index = 0;                        pData = (PLISTBOXDATA)pCtrl->userdata;            if (dwStyle & LBS_MULTIPLESEL)                return pData->itemHilighted;            plbi = pData->head;            while (plbi) {                if (plbi->dwFlags & LBIF_SELECTED)                    return index;                index ++;                plbi = plbi->next;           }                      return LB_ERR;        }        break;            case LB_GETSELCOUNT:        {            int nSel;            PLISTBOXITEM plbi;                        pData = (PLISTBOXDATA)pCtrl->userdata;            nSel = 0;            plbi = pData->head;            while (plbi) {                if (plbi->dwFlags & LBIF_SELECTED)                    nSel ++;                plbi = plbi->next;            }                        return nSel;        }        break;            case LB_GETTOPINDEX:            pData = (PLISTBOXDATA)pCtrl->userdata;            return pData->itemTop;        break;            case LB_GETCARETINDEX:            pData = (PLISTBOXDATA)pCtrl->userdata;            return pData->itemHilighted;        break;        case LB_GETTEXTLEN:        {            PLISTBOXITEM plbi;            pData = (PLISTBOXDATA)pCtrl->userdata;            plbi = lstGetItem (pData, (int)wParam);            if (plbi)                return strlen (plbi->key);            else                return LB_ERR;        }        break;                case LB_GETTEXT:        {            PLISTBOXITEM plbi;            pData = (PLISTBOXDATA)pCtrl->userdata;            plbi = lstGetItem (pData, (int)wParam);            if (plbi)                strcpy ((char*)lParam, plbi->key);            else                return LB_ERR;        }        break;        case LB_SETTEXT:        {            PLISTBOXITEM plbi;            char* newStr;            pData = (PLISTBOXDATA)pCtrl->userdata;            plbi = lstGetItem (pData, (int)wParam);            if (plbi) {                newStr = FixStrAlloc (strlen ((char*)lParam));                if (newStr) {                    FreeFixStr (plbi->key);                    plbi->key = newStr;                    strcpy (plbi->key, (char*)lParam);                    lstInvalidateItem (hwnd, pData, (int)wParam, TRUE);                }                else                    return LB_ERR;            }            else                return LB_ERR;        }        break;            case LB_GETITEMDATA:        {            PLISTBOXITEM plbi;            PLISTBOXITEMINFO plbii;            pData = (PLISTBOXDATA)pCtrl->userdata;            if (!(plbi = lstGetItem (pData, (int)wParam)))                return LB_ERR;            if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) {                return plbi->dwData;            }                        plbii = (PLISTBOXITEMINFO)lParam;            if (!plbii)                return LB_ERR;            if (plbi->dwFlags & LBIF_CHECKED)                plbii->cmFlag = CMFLAG_CHECKED;            else if (plbi->dwFlags & LBIF_PARTCHECKED)                plbii->cmFlag = CMFLAG_PARTCHECKED;            else                plbii->cmFlag = CMFLAG_BLANK;            plbii->hIcon = (HICON)plbi->dwData;            return LB_OKAY;        }        break;            case LB_SETITEMDATA:        {            PLISTBOXITEM plbi;            PLISTBOXITEMINFO plbii;            pData = (PLISTBOXDATA)pCtrl->userdata;            if (!(plbi = lstGetItem (pData, (int)wParam)))                return LB_ERR;            if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) {                plbi->dwData = (DWORD)lParam;                return LB_OKAY;            }            plbii = (PLISTBOXITEMINFO)lParam;            if (!plbii)                return LB_ERR;            plbi->dwFlags &= ~LBIF_CHECKMARKMASK;            switch (plbii->cmFlag) {                case CMFLAG_CHECKED:                    plbi->dwFlags |= LBIF_CHECKED;                break;                case CMFLAG_PARTCHECKED:                    plbi->dwFlags |= LBIF_PARTCHECKED;                break;            }                            if (dwStyle & LBS_USEICON)                plbi->dwData = (DWORD)plbii->hIcon;            else                plbi->dwData = 0;                        lstInvalidateItem (hwnd, pData, (int)wParam, TRUE);            return LB_OKAY;        }        break;                case LB_GETITEMADDDATA:        {            PLISTBOXITEM plbi;            pData = (PLISTBOXDATA)pCtrl->userdata;            if (!(plbi = lstGetItem (pData, (int)wParam)))                return LB_ERR;            return plbi->dwAddData;        }        break;            case LB_SETITEMADDDATA:        {            PLISTBOXITEM plbi;            pData = (PLISTBOXDATA)pCtrl->userdata;            if (!(plbi = lstGetItem (pData, (int)wParam)))                return LB_ERR;            plbi->dwAddData = (DWORD)lParam;            return LB_OKAY;        }        break;                case LB_GETCHECKMARK:        {            PLISTBOXITEM plbi;            if (!(dwStyle & LBS_CHECKBOX))                return LB_ERR;            pData = (PLISTBOXDATA)pCtrl->userdata;            if (!(plbi = lstGetItem (pData, (int)wParam)))                return LB_ERR;            if (plbi->dwFlags & LBIF_CHECKED)                return CMFLAG_CHECKED;            if (plbi->dwFlags & LBIF_PARTCHECKED)                return CMFLAG_PARTCHECKED;            return CMFLAG_BLANK;        }        break;        case LB_SETCHECKMARK:        {            PLISTBOXITEM plbi;            if (!(dwStyle & LBS_CHECKBOX))                return LB_ERR;            pData = (PLISTBOXDATA)pCtrl->userdata;            if (!(plbi = lstGetItem (pData, (int)wParam)))                return LB_ERR;            plbi->dwFlags &= ~LBIF_CHECKMARKMASK;            switch (lParam) {                case CMFLAG_CHECKED:                    plbi->dwFlags |= LBIF_CHECKED;                break;                case CMFLAG_PARTCHECKED:                    plbi->dwFlags |= LBIF_PARTCHECKED;                break;            }                            lstInvalidateItem (hwnd, pData, (int)wParam, TRUE);            return LB_OKAY;        }        break;        case LB_GETSELITEMS:        {            int  nItem;            int  nSel = 0;            int  index = 0;            int* pInt;            PLISTBOXITEM plbi;            nItem = (int)wParam;            pInt  = (int*)lParam;                        pData = (PLISTBOXDATA)pCtrl->userdata;            plbi = pData->head;            while (plbi) {                if (plbi->dwFlags & LBIF_SELECTED) {                    if (pInt) {                        if (nSel < nItem)                            *(pInt + nSel) = index;                        else                             return nItem;                    }                    nSel ++;                }                                plbi = plbi->next;                index ++;            }                        return nSel;        }        break;            case LB_GETSEL:        {            PLISTBOXITEM plbi;            pData = (PLISTBOXDATA)pCtrl->userdata;            plbi = lstGetItem (pData, (int)wParam);            if (plbi)                return plbi->dwFlags & LBIF_SELECTED;            else                return LB_ERR;        }        break;        case LB_SETSEL:        {            PLISTBOXITEM plbi;            pData = (PLISTBOXDATA)pCtrl->userdata;            plbi = lstGetItem (pData, (int)lParam);            if (plbi) {		pData->dwFlags &= ~LBF_NOTHINGSELECTED;                if (wParam == -1)                    plbi->dwFlags ^= LBIF_SELECTED;                else if (wParam == 0)                    plbi->dwFlags &= ~LBIF_SELECTED;                else                    plbi->dwFlags |= LBIF_SELECTED;                lstInvalidateItem (hwnd, pData, (int)lParam, FALSE);            }            else                return LB_ERR;        }        break;            case LB_GETITEMHEIGHT:            pData = (PLISTBOXDATA)pCtrl->userdata;            return pData->itemHeight;        break;            case LB_SETITEMHEIGHT:            pData = (PLISTBOXDATA)pCtrl->userdata;            if (pData->itemHeight != LOWORD (lParam)) {                RECT rcClient;                                pData->itemHeight = LOWORD (lParam);                GetClientRect (hwnd, &rcClient);                lstCalcParams (&rcClient, pData);                                lstSetVScrollInfo (hwnd, pData, TRUE);                InvalidateRect (hwnd, NULL, TRUE);            }        break;        case WM_SETFOCUS:        {            pData = (PLISTBOXDATA)pCtrl->userdata;            if (pData->dwFlags & LBF_FOCUS)                break;                            pData->dwFlags |= LBF_FOCUS;	    InvalidateRect(hwnd, NULL, TRUE);            NotifyParent (hwnd, pCtrl->id, LBN_SETFOCUS);        }        break;                case WM_KILLFOCUS:        {            pData = (PLISTBOXDATA)pCtrl->userdata;            pData->dwFlags &= ~LBF_FOCUS;	    InvalidateRect(hwnd, NULL, TRUE);            NotifyParent (hwnd, pCtrl->id, LBN_KILLFOCUS);        }        break;        case WM_GETDLGCODE:            return DLGC_WANTARROWS | DLGC_WANTCHARS;        case WM_GETTEXTLENGTH:        case WM_GETTEXT:        case WM_SETTEXT:            return -1;#if 0            	case WM_SETFONT:        break;        	case WM_GETFONT:        break;#endif        	case WM_NCCALCSIZE:	{

⌨️ 快捷键说明

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