我做过list控件的模糊查询功能,具体就是界面上有list控件,有edit控件,当在edit控件中输入字符时会触发textchange事件,进行模糊查询,将符合字段优先显示
/************************************************************************/
/* 模糊查询 19/2/21 */
/************************************************************************/
void FuzzyQuery(CStdString strGoal/*edit 内容*/)
{
OutputDebugString("进入模糊查询__ljl");
if (0 == ifInit)
{
ifInit = 1;
}
if (!m_TmpList.empty())
{
m_TmpList.clear();
}
vector<string> LvNamesUOK;
for (vector<string>::iterator it = m_List.begin();it!= m_List.end();it++)
{
const char * cstr = NULL;
cstr = strstr((*it).c_str(),strGoal.GetData()/*GetData()的作用是将CStdString转const char*/);
if(NULL != cstr) //将符合的子项保存在LvNamesOK中
{
m_TmpList.push_back((*it).c_str());
}
else //将不符合的子项保存在LvNamesUOK中
{
LvNamesUOK.push_back((*it).c_str());
}
}
for (vector<string>::iterator it = LvNamesUOK.begin();it != LvNamesUOK.end();it++)
{
m_TmpList.push_back((*it));
}
m_ListOperater = static_cast<CListUI*>(m_pm.FindControl(_T("listOperate")));
m_ListOperater->GetList()->SetDelayedDestroy(false);
m_ListOperater->RemoveAll();
int i = 0;
for (vector<string>::iterator it = m_TmpList.begin();it != m_TmpList.end();it++)
{
//向list 中插入子项
CListTextElementUI* pListElement = new CListTextElementUI;
pListElement->SetTag(i);
m_ListOperater->Add(pListElement);
char cTmp[120] = {0};
sprintf(cTmp,"%d",i);
pListElement->SetText(0, cTmp);
pListElement->SetText(1, (*it).c_str());
i++;
}
}
这里面有向list动态插入记录