.

解决方案 »

  1.   

    POSITION GetFirstSelectedItemPosition( )
    const; int GetNextSelectedItem(
       POSITION& pos 
    ) constCString GetItemText(
    int nItem,
    int nSubItem )
    const;
      

  2.   

    POSITION pos = pList->GetFirstSelectedItemPosition();
    if (pos == NULL)
       TRACE0("No items were selected!\n");
    else
    {
       while (pos)
       {
          int nItem = pList->GetNextSelectedItem(pos);
          // You could do your own processing on nItem here.
       }
    }
      

  3.   

    不是很懂啊.
    比方说我现在鼠标选定了第三行,第三行的第一列的内容是"中国",我就是要获得这个字段啊,怎么写呢?用DataGrid很容易取得的,但是用ListCtrl我不会啊,MSDN上好象我找不到
      

  4.   

    //返回被选择的行数
    CString CSpecialDlg::GetSelectedItem()
    {
    CString str; int nRow = m_listSpecial.GetItemCount(); for( int i=0; i<nRow; i++ )
    {
    if( m_listSpecialDay.GetItemState(i, LVIS_SELECTED)==LVIS_SELECTED )
    {
    str = m_listSpecialDay.GetItemText(i,j);//j为“中国对应的列”
                               return str
    }
    } return str;
    }
      

  5.   

    SORRY,楼上的理解错了.是这样的,我的鼠标在ListCtrl上面的任意一行点击了一下,那么我就选中了该行,那么我如何获得当前所选中行的任何一列的内容啊??
      

  6.   

    楼上的,用这个函数是没错的,但是这个I怎么取得啊?我要得I是当前选定的第I行啊,即鼠标任意点击的一行/
      

  7.   

    你用 GetFirstSelectedItemPosition() 取得了选中的第一项的 posistion以后,
    就可以用GetNextSelectedItem( )取得第一项的编号,
    取得编号以后就可以用 GetItemText()取得那行的任意一列的内容。
      

  8.   

    CListCtrl的风格是Report吗?如果是Report,则只能通过第一列来选中某一行,所以也无法通过GetFirstSelectItem等实现他要的功能吧?除非总是点击某行的第一列,而非一行的任意位置。所以,是否利用其它事件来完成此功能?如根据鼠标键按下的Y坐标来计算?(注:我刚学VC,不是很懂,请大家多多指教)
      

  9.   

    你可以添加一个行变化的处理函数,你点击ListCtrl控件添加第一个处理事件,就可以了。
    如:
    OnLvnItemchangedBookRooms(NMHDR *pNMHDR, LRESULT *pResult)
    {
         LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
         int iCurrentSel = pNMLV->iItem; //得到当前行
         m_strRoomNO = m_lcRoomList.GetItemText(iCurrentSel,0);
         *pResult = 0;
    }