/*
实现列表数据的过滤
源列表可以为空或与源列表相同,此时只对目标列表进行不匹配删除操作
目标列表和源列表地址不相同时,将从源列表中提取匹配字符列表
*/
int Filter_List(CListBox *pDstList, //目标列表
CListBox *pSrcList, //源列表
LPCTSTR pszFilter, //匹配字符
BOOL bMatchCase //大小写匹配指示
)
{
ASSERT(pDstList);//确保列表地址有效
if(pSrcList && pSrcList != pDstList) //目标列表和源列表地址不相同
{
pDstList->ResetContent();//清除列表
for(int i=0;i<pSrcList->GetCount();i++)
{
CString itemStr;
pSrcList->GetText(i,itemStr);
pDstList->AddString(itemStr); //添加字符串
pDstList->SetItemData(i,pSrcList->GetItemData(i)); //拷贝属性
}
}
CString filter = pszFilter;
int filter_len = filter.GetLength();
if(filter_len>0 && !bMatchCase) //不匹配大小写
filter.MakeUpper();
if(strlen(pszFilter) > 0) //匹配字符串长度大于0
{
for(int i=0;i<pDstList->GetCount();i++)
{
CString itemStr;
pDstList->GetText(i,itemStr);
if(!bMatchCase)
itemStr.MakeUpper();
if(itemStr.GetLength() >= filter_len
&& itemStr.Left(filter_len) == filter)
{
}
else //不匹配时删除
{
pDstList->DeleteString(i);
i--; //确保下一次从删除后面的列表开始
}
}
}
return(pDstList->GetCount());
}