怎么在ClistCtrl 用鼠标选择多行 ?

解决方案 »

  1.   

    1,选择多行,要将CListCtrl的LVS_SINGLESEL的属性去掉,如果是在对话框中,可以在对话框设计的时候去掉。
    2,判断以行是否被选中。
    加入说你要判断第n行,CListCtrl的对象为m_list;
    那么如下代码可以工作:
    bool IsSelected(int n)
    {
        LVITEM li;
        li.mask = LVIF_STATE;
        li.iItem = n;
        li.iSubItem = 0;
        if (m_list.GetItem(&li))
        {
            return li.state & LVIS_SELECTED;
        }
        return false;
    }
      

  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
       }
    }
      

  3.   

    将列表控件的single select属性去掉即可选,选择时按着shift或ctrl键可多选;
    以下程序循环处理被选中的行;
        POSITION pos=m_WORK.GetFirstSelectedItemPosition();//m_WORK为CListCtrl控件对象
        if(pos==NULL)
        { 
        MessageBox("");
        return;
        }
        else
        {
     while(pos)
    {
        int nItem=m_WORK.GetNextSelectedItem(pos);
    }
        }
      

  4.   

    1.选择多行,要通过modifysytle将CListCtrl的LVS_SINGLESEL的属性去掉2.if(m_list.GetItemState(i, LVIS_SELECTED)!=LVIS_SELECTED)
           {
                   .......... 
           }