如何得到CListCtrl中被选中的行号?
还有CListCtrl::GetSelectionMark这个函数有什么用?

解决方案 »

  1.   

    如何得到CListCtrl中被选中的行号?
    int nIdx = m_AlarmShipList.GetNextItem(-1,LVIS_SELECTED);
    nIdx即为选中的行号。
      

  2.   

    CListCtrl* pListCtrl = (CListCtrl*) GetDlgItem(IDC_YOURLISTCONTROL);
    ASSERT(pListCtrl != NULL);POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
       TRACE0("No items were selected!\n");
    else
    {
       while (pos)
       {
          int nItem = pList->GetNextSelectedItem(pos);
          TRACE1("Item %d was selected!\n", nItem);
          // you could do your own processing on nItem here
       }
    }
    msdn上的例子如果选中多个,得到这些选中的行号
      

  3.   

    CListCtrl::GetSelectionMark
    The selection  is the item index from which a multiple selection starts.
      

  4.   

    //CListCtrl* pList = ...;POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
       TRACE0("No items were selected!\n");
    else
    {
       while (pos)
       {
          int nItem = pList->GetNextSelectedItem(pos);
          TRACE1("Item %d was selected!\n", nItem);
          // you could do your own processing on nItem here
       }
    }or int nIdx = m_List.GetNextItem(-1,LVNI_SELECTED);
    while(nIdx != -1)
    {
        //nIdx为选中行索引
        ...
        //继续搜索
        nIdx = m_List.GetNextItem(nIdx,LVNI_SELECTED);
    }or int currentItemNum = ListView_GetItemCount(m_hWnd);for(int i=0;i<currentItemNum;i++)
    {
    LV_ITEM lvi;
    lvi.mask=LVIF_STATE;
    lvi.iItem=i;
    lvi.stateMask=0xFFFF;
    ListView_GetItem(m_hWnd,&lvi);
    DWORD ws = GetWindowLong(m_hWnd, GWL_STYLE);BOOL bSelected= (lvi.state & LVIS_SELECTED) || (lvi.state & LVIS_DROPHILITED);if(bSelected)
    {
    CString strIndex;
    strIndex.Format(_T("Index = %d"),i);
    AfxMessageBox(strIndex);
    }
    }
      

  5.   

    CListCtrl::GetSelectionMark
    这个呢?