掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リストビューでアイテムのフィルタリングを行うには? (ID:72907)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> その他のみかんやバナナの行を消さずに非表示にする方法はありませんでしょうか。 アイテムの非表示というのとは少しアプローチが異なるが、こういう場合は仮想リスト コントロール(LVS_OWNERDATA)が使える。 http://msdn.microsoft.com/ja-jp/library/ye4z8x58%28v=VS.90%29.aspx class myCListCtrl : public CListCtrl { struct ITEM { CString col_[2]; ITEM(LPCTSTR col1, LPCTSTR col2) { col_[0] = col1; col_[1] = col2; } }; std::vector<ITEM> item_; std::vector<ITEM*> filtered_; void SetData() { item_.push_back(ITEM(りんご, 男)); item_.push_back(ITEM(みかん, 女)); : Filtering(); } void Filtering(LPCTSTR str = NULL, int index = 0) { this->SetRedraw(FALSE); filtered_.clear(); for (std::vector<ITEM>::iterator it=item_.begin(); it != item_.end(); ++it) { if (str == NULL || it->col_[index] == str) { filtered_.push_back(&(*it)); } } this->SetItemCount(filtered_.size()); this->SetRedraw(TRUE); this->Invalidate(); } void りんごのみ() { Filtering(_T("りんご"), 0); } void 男のみ() { Filtering(_T("男"), 1); } }; BEGIN_MESSAGE_MAP(myCListCtrl, CListCtrl) ON_NOTIFY_REFLECT(LVN_GETDISPINFO, OnGetdispinfo) END_MESSAGE_MAP() void myCListCtrl::OnGetDispInfo (NMHDR* pnmhdr, LRESULT* pResult) { LV_DISPINFO* pdi = (LV_DISPINFO *) pnmhdr; if ((pdi->item.mask & LVIF_TEXT) != 0) { ITEM *item = filtered_[pdi->item.iItem]; switch (pdi->item.iSubItem) { case 0: // 番号 _stprintf(pdi->item.pszText, _T("%d"), pdi->item.iItem + 1); break; case 1: // 項目① case 2: // 項目② _tcscpy(pdi->item.pszText, item->col_[pdi->item.iSubItem - 1]); break; } } }
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.