一个虚拟列表视的快速查找问题,用FindItem(&info)好象不行,请高手指教!
因为列表框里需要显示的数据多达10万条或者几十万,我不得不用虚拟列表视。虚拟列表视CListView中列表框风格必须为LVS_OWNERDATA。虚拟列表中数据的填充已经实现,已经达到填充数据所花时间与记录数无关的目的。
现在的问题是,我需要在列表框里实现查找功能,很明显我不能用遍历每行的方式。列表框里每行有5列,我怎么根据其中某项可能的值快速定位出某行?
我知道若风格不为LVS_OWNERDATA,在一个普通列表框里根据第一列(仅限于第一列)的值查找是可以的。例如:
LVFINDINFO info;
info.psz="109";//第一列目标值
info.flags=LVFI_PARTIAL|LVFI_STRING;
int nIndex=GetListCtrl().FindItem(&info);//可以正确得到第一列为"109"的行号
但这里风格不为LVS_OWNERDATA才行,并且只能根据第一列的值查!
是不是需要用到诸如:
LVITEM lparam;
lparam.iSubItem=4;
lparam.mask=LVIF_TEXT;
sprintf(lparam.pszText,strTime);
info.flags=LVFI_PARAM;
info.lParam=lparam;//?这句类型不匹配报错
请高手赐教!分不够只管说。