我现在要在一个listcontrl里面查找记录,要把符合查找条件的记录放到另一个listcontrl里面显示出来,我看了MSDN,里面有GETITEM函数,但这个函数好象是返回全部的ITEM,请问有没有什么方法能取出一条记录啊?
还有CListCtrl::FindItem这个函数怎么用的?能不能给个例子啊?谢谢了!

解决方案 »

  1.   

    GetItem返回的是第一个Item,继续遍历就要GetNextItem(),
    FindItem的例子
    // Pointer to the list view control.
    CListCtrl* pmyListCtrl;
    // The string to match.
    LPCTSTR lpszmyString;LVFINDINFO info;
    int nIndex;info.flags = LVFI_PARTIAL|LVFI_STRING;
    info.psz = lpszmyString;// Delete all of the items that begin with the string lpszmyString.
    while ((nIndex=pmyListCtrl->FindItem(&info)) != -1)
    {
      pmyListCtrl->DeleteItem(nIndex);
    }
      

  2.   

    用GetItem和GetNextItem()组合用,来遍历clistctrl
      

  3.   

    谢谢!那如果我直接就要取出里面的第N条记录呢?
    难道连续用GETNEXTITEM函数N次?
      

  4.   

    获取第 N 条记录直接用 GetItem 即可。
      

  5.   

    除非你知道第n-1条的索引号是多少,不然应该需要遍历所有之前的item才可以吧! listctrl好像也没有像listbox一样的:getcursel!
    如果要得出一个当前选中的item,只能通过getcheck函数的返回值,一条一条测试吗? 顺便问一下,呵呵
      

  6.   

    获取当前选中的 item:
    m_list.GetNextItem(-1, LVIS_SELECTED);
      

  7.   

    恩,谢谢楼上的!不过其实这也就对单选才有用,多选的话,还是要靠getcheck函数的返回值,一条一条判断吧!或者用GetItemState(i,LVIS_SELECTED)测试!
      

  8.   

    int nItem = -1;
    while ((nItem = m_list.GetNextItem(nItem, LVIS_SELECTED)) != -1)
    {
       // nItem 为选中的项目索引号
    }
      

  9.   

    GETNEXTITEM的返回值是int啊,是记录的索引号,而不是我想要的记录啊,
    我主要想问的是怎么通过记录的索引号得到这条记录的内容,就是LVITEM这么一个结构体。
      

  10.   

    TO needways(武林怪杰): 
    怎么用GetItem获取第N条记录啊?
    我看GetItem的声明是这样的啊:BOOL CListCtrl::GetItem( LVITEM* pItem ) const;
    没有给我传N这个值的参数啊。
      

  11.   

    在 LVITEM 的 item 中传入。
      

  12.   

    LVITEM lvItem = {0};
    TCHAR szText[256];
    lvItem.mask = LVIF_TEXT | LVIF_PARAM;
    lvItem.iItem = 21; // N
    lvItem.pszText = szText;
    lvItem.cchTextMax = sizeof(szText);m_list.GetItem(&lvItem);