MFC入门学习之控件(六)标签控件List Control的添加和使用(下)

MFC入门学习之控件(6)标签控件List Control的添加和使用(下)

        前面对listctrl进行了理论描述,但是在实际的工程中,我们一定是希望能够通过listctrl的各种状态来进行代码的编写从而完成一定的任务。那么首先来看一下listctrl中item的选择。

功能1 得到listctrl中所有行的checkbox的状态



      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
      CString str;
      for(int i=0; i<m_list.GetItemCount(); i++)
      {

          // if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))

           if(  m_list.GetCheck(i))

           {
                str.Format(_T("第%d行的checkbox为选中状态"), i);
                AfxMessageBox(str);
           }
      }
功能2 得到listctrl中所有选中行的序号

      方法一:
      CString str;
      for(int i=0; i<m_list.GetItemCount(); i++)
      {
           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
           {
                str.Format(_T("选中了第%d行"), i);
                AfxMessageBox(str);
           }
      }


      方法二:
      POSITION pos = m_list.GetFirstSelectedItemPosition();
      if (pos == NULL)
           TRACE0("No items were selected!\n");
      else
      {
           while (pos)
           {
                int nItem = m_list.GetNextSelectedItem(pos);
                TRACE1("Item %d was selected!\n", nItem);
                // you could do your own processing on nItem here
           }
      }

        两者的区别是什么呢?区别就在于在实际的应用中查看你的鼠标点击了那一行,和checkbox是否选中的状态上。具体来讲,如果你要通过自己的选择来完成某些特殊的任务,例如选择了某几个文件进行文件的打包和烧写工作,那么就需要的是看checkbox是否选中来决定而不是看选中了哪一行。另外一种场景,比如你想添加对某一行的内容的注解,那么就选择功能2

1楼codectq昨天 19:50
我以为踩是踩空间的意思……