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

解决方案 »

  1.   

    先遍历查找 找到后将数据加到第一行
    CListCtrl::GetItemText  获取行中的信息CListCtrl::InsertItem  插入信息
      

  2.   

    利用 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);}
      

  3.   

    使用虚拟列表,处理 LVN_ODFINDITEM 消息。
      

  4.   

    再简单点:
    int CALLBACK ListSortCompare(LPARAM lp1,LPARAM lp2,LPARAM Check)
    { // lp1,lp2 are the 'ID' original oders. the iItem will changes
    if((strcmp(str[(int)lp1],(char *)Check)==0) && ((strcmp(str[(int)lp2],(char *)Check)==0))) return 0;
    else if((strcmp(str[(int)lp1],(char *)Check)==0)) return -1;
    else if((strcmp(str[(int)lp2],(char *)Check)==0)) return 1;
    else return 0;
    }
    ////
    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
    if(sb==1)
    {
    m_List.SortItems(ListSortCompare,(LPARAM)"张三");
    }
    }