📄 listbox.c
字号:
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; } case LB_GETCOUNT: pData = (PLISTBOXDATA)pCtrl->dwAddData2; return pData->itemCount; case LB_GETCURSEL: { PLISTBOXITEM plbi; int index = 0; pData = (PLISTBOXDATA)pCtrl->dwAddData2; 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; } case LB_GETSELCOUNT: { int nSel; PLISTBOXITEM plbi; pData = (PLISTBOXDATA)pCtrl->dwAddData2; nSel = 0; plbi = pData->head; while (plbi) { if (plbi->dwFlags & LBIF_SELECTED) nSel ++; plbi = plbi->next; } return nSel; } case LB_GETTOPINDEX: pData = (PLISTBOXDATA)pCtrl->dwAddData2; return pData->itemTop; case LB_GETCARETINDEX: pData = (PLISTBOXDATA)pCtrl->dwAddData2; return pData->itemHilighted; case LB_GETTEXTLEN: { PLISTBOXITEM plbi; pData = (PLISTBOXDATA)pCtrl->dwAddData2; plbi = lstGetItem (pData, (int)wParam); if (plbi) return strlen (plbi->key); return LB_ERR; } case LB_GETTEXT: { PLISTBOXITEM plbi; pData = (PLISTBOXDATA)pCtrl->dwAddData2; plbi = lstGetItem (pData, (int)wParam); if (plbi) { strcpy ((char*)lParam, plbi->key); return LB_OKAY; } return LB_ERR; } case LB_SETTEXT: { PLISTBOXITEM plbi; char* newStr; pData = (PLISTBOXDATA)pCtrl->dwAddData2; plbi = lstGetItem (pData, (int)wParam); if (plbi) {#if _USE_FIXSTR len = strlen ((char*)lParam); newStr = FixStrAlloc (len); if (newStr) { FreeFixStr (plbi->key); plbi->key = newStr; if (len > 0) strcpy (plbi->key, (char*)lParam);#else newStr = strdup ((const char*)lParam); if (newStr) { free (plbi->key); plbi->key = newStr;#endif lstInvalidateItem (hwnd, pData, (int)wParam, TRUE); } else return LB_ERR; } return LB_ERR; } case LB_GETITEMDATA: { PLISTBOXITEM plbi; PLISTBOXITEMINFO plbii; if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) { return LB_ERR; } pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (!(plbi = lstGetItem (pData, (int)wParam))) return LB_ERR; 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; if (plbi->dwFlags & LBIF_USEBITMAP) plbii->cmFlag |= IMGFLAG_BITMAP; plbii->hIcon = (HICON)plbi->dwImage; return LB_OKAY; } case LB_SETITEMDATA: { PLISTBOXITEM plbi; PLISTBOXITEMINFO plbii; if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) { return LB_ERR; } pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (!(plbi = lstGetItem (pData, (int)wParam))) return LB_ERR; 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->dwImage = (DWORD)plbii->hIcon; else plbi->dwImage = 0; lstInvalidateItem (hwnd, pData, (int)wParam, TRUE); return LB_OKAY; } case LB_GETITEMADDDATA: { PLISTBOXITEM plbi; pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (!(plbi = lstGetItem (pData, (int)wParam))) return LB_ERR; return plbi->dwAddData; } case LB_SETITEMADDDATA: { PLISTBOXITEM plbi; pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (!(plbi = lstGetItem (pData, (int)wParam))) return LB_ERR; plbi->dwAddData = (DWORD)lParam; return LB_OKAY; } case LB_GETCHECKMARK: { PLISTBOXITEM plbi; if (!(dwStyle & LBS_CHECKBOX)) return LB_ERR; pData = (PLISTBOXDATA)pCtrl->dwAddData2; 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; } case LB_SETCHECKMARK: { PLISTBOXITEM plbi; if (!(dwStyle & LBS_CHECKBOX)) return LB_ERR; pData = (PLISTBOXDATA)pCtrl->dwAddData2; 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; } case LB_GETSELITEMS: { int nItem; int nSel = 0; int index = 0; int* pInt; PLISTBOXITEM plbi; nItem = (int)wParam; pInt = (int*)lParam; pData = (PLISTBOXDATA)pCtrl->dwAddData2; 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->dwAddData2; plbi = lstGetItem (pData, (int)wParam); if (plbi) return plbi->dwFlags & LBIF_SELECTED; return LB_ERR; } case LB_SETSEL: { PLISTBOXITEM plbi; if (!(dwStyle & LBS_MULTIPLESEL)) return LB_ERR; pData = (PLISTBOXDATA)pCtrl->dwAddData2; plbi = lstGetItem (pData, (int)lParam); if (plbi) { 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); } return LB_ERR; } case LB_GETITEMHEIGHT: pData = (PLISTBOXDATA)pCtrl->dwAddData2; return pData->itemHeight; case LB_SETITEMHEIGHT: pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (pData->itemHeight != LOWORD (lParam)) { RECT rcClient; pData->itemHeight = LOWORD (lParam); if (pData->itemHeight < pCtrl->pLogFont->size) pData->itemHeight = pCtrl->pLogFont->size; GetClientRect (hwnd, &rcClient); lstCalcParams (&rcClient, pData); lstSetVScrollInfo (hwnd, pData, TRUE); InvalidateRect (hwnd, NULL, TRUE); } return pData->itemHeight; case MSG_SETFOCUS: { RECT rc; pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (pData->dwFlags & LBF_FOCUS) break; pData->dwFlags |= LBF_FOCUS; GetClientRect (hwnd, &rc); hdc = GetClientDC (hwnd); SetPenColor (hdc, PIXEL_lightwhite); lstDrawFocusRect (hdc, pData, &rc); ReleaseDC (hdc); if (dwStyle & LBS_NOTIFY) NotifyParent (hwnd, pCtrl->id, LBN_SETFOCUS); } return 0; case MSG_KILLFOCUS: { RECT rc; GetClientRect (hwnd, &rc); pData = (PLISTBOXDATA)pCtrl->dwAddData2; hdc = GetClientDC (hwnd); SetPenColor (hdc, PIXEL_lightwhite); lstDrawFocusRect (hdc, pData, &rc); ReleaseDC (hdc); pData->dwFlags &= ~LBF_FOCUS; if (dwStyle & LBS_NOTIFY) NotifyParent (hwnd, pCtrl->id, LBN_KILLFOCUS); } return 0; case MSG_GETDLGCODE: return DLGC_WANTARROWS | DLGC_WANTCHARS | DLGC_WANTENTER; case MSG_FONTCHANGED: { RECT rcClient; pData = (PLISTBOXDATA)pCtrl->dwAddData2; if (pData->itemHeight < pCtrl->pLogFont->size) pData->itemHeight = pCtrl->pLogFont->size; GetClientRect (hwnd, &rcClient); lstCalcParams (&rcClient, pData); lstSetVScrollInfo (hwnd, pData, TRUE); InvalidateRect (hwnd, NULL, TRUE); return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -