读书人

listctrl,该怎么处理

发布时间: 2012-09-11 10:49:03 作者: rapoo

listctrl
在listctrl中如何通过文本框用关键字将选择出来的数据显示在第一行,求代码

[解决办法]
没看懂需求
[解决办法]
先遍历查找 找到后将数据加到第一行
CListCtrl::GetItemText 获取行中的信息

CListCtrl::InsertItem 插入信息
[解决办法]
利用m_List.SortItems(ListSortCompare,sb);
1。初始化:
char str[][20]=
{
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四",
"王二麻子",
"张三",
"李四"
};

m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
//
m_List.InsertColumn(0, "序号", LVCFMT_LEFT, 40);
m_List.InsertColumn(1, "名称", LVCFMT_LEFT, 240);

char txt[50];
int jj;
for( jj=0;jj<20;jj++)
{
sprintf(txt,"%d",jj);
m_List.InsertItem(jj, txt, NULL);
m_List.SetItemData(jj, jj);
m_List.SetItemText(jj, 1, str[jj]);
}
//
m_List.SetBkColor(RGB(237,250,254));
m_List.SetTextBkColor(RGB(237,250,254));
m_List.SetTextColor(RGB(0,0,255));
2。sort函数:
int CALLBACK ListSortCompare(LPARAM lp1,LPARAM lp2,LPARAM subItem)
{ // lp1,lp2 are the 'ID' original oders. the iItem will changes
int ID1=(int)lp1;
int ID2=(int)lp2;
if(subItem==1)
{
if((strcmp(str[ID1],"张三")==0) && ((strcmp(str[ID2],"张三")==0))) return 0;
else if((strcmp(str[ID1],"张三")==0)) return -1;
else if((strcmp(str[ID2],"张三")==0)) return 1;
else return 0;
}
return 0;
}
3。调用:
void CListCheckDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
//
int sb=pNMListView->iSubItem;
// fast enough
m_List.SortItems(ListSortCompare,sb);}


[解决办法]
学习
[解决办法]
使用虚拟列表,处理 LVN_ODFINDITEM 消息。

读书人网 >VC/MFC

热点推荐