我已經創建了非常標準的ListView。C++ ListView隱藏項目
RECT rec;
GetClientRect(hwnd, &rec);
ListView = CreateWindow(WC_LISTVIEW, (LPCSTR)L"", (WS_CHILD | WS_VISIBLE | LVS_REPORT), 0, 0, rec.right, rec.bottom-23, hwnd, (HMENU)8553, GetModuleHandle(NULL), NULL);
SendMessage(ListView, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES); // Set style
現在我插入一些列這樣的:
LVCOLUMNW listColumnW = { 0 };
listColumnW.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
listColumnW.pszText = L"Column1";
listColumnW.cx = 150;
listColumnW.fmt = LVCFMT_LEFT;
SendMessage(ListView,LVM_INSERTCOLUMNW, 0, (LPARAM)&listColumnW);
之後我instert項目和子項目
LVITEMW lisW = { 0 };
lisW.mask = LVIF_TEXT | LVIF_PARAM;
lisW.pszText = item_text[i];
lisW.iItem = i;
lisW.lParam = i;
SendMessage(ListView, LVM_INSERTITEMW, 0, (LPARAM)&lisW);
現在我想實現某種形式的搜索/過濾。 我看到很多人建議刪除/重新插入項目,但是因爲在我的列表視圖中有相當多的項目不是最好的解決方案。 谷歌搜索時,我得知應該可以設置項目的組ID和設置狀態(隱藏它)。 但是我不確定如何做到這一點,可以說我有我的列表視圖中有10個項目,我想隱藏一些項目,我到底該怎麼做?
編輯:
我已設置LVM_ENABLEGROUPVIEW和創建的兩組,一組是應該顯示和其他一個隱藏。
LVGROUP group = { 0 };
group.cbSize = sizeof(LVGROUP);
group.mask = LVGF_GROUPID;
group.iGroupId = 10;//shown
ListView_InsertGroup(ListView, -1, &group);
group.iGroupId = 11;//hidden
group.mask = LVGF_GROUPID | LVGF_STATE;
group.stateMask = LVGS_HIDDEN;
group.state = LVGS_HIDDEN;
ListView_InsertGroup(ListView, -1, &group);
現在我已經添加了一些項目這兩個羣體,唯一的問題是,我可以看到他們倆(他們是分開的),而其他人都應該被隱藏。
嘗試增加'LVGS_NOHEADER'和'LVGS_COLLAPSED'第二組的'state'。顯然只需設置'LVGS_HIDDEN'隱藏組標題而不是組中的項目,但是如果您摺疊「隱藏」組,則其項目將不會顯示。 – 2014-09-04 01:10:27
謝謝,它工作。然而,改變groupid並沒有比添加項目更快,是的,我已經完成了所有的優化,比如只將id改變爲改變組的項目。對於約40 000個項目,它可能需要一分鐘,所以我確實會嘗試虛擬列表。 – Dan 2014-09-04 09:03:08