listctrl组件的用法

以下未经说明,listctrl默认view 风格为report

相关类及处理函数

MFC:CListCtrl类

SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn



--------------------------------------------------------------------------------


1. CListCtrl 风格

      LVS_ICON: 为每个item显示大图标

      LVS_SMALLICON: 为每个item显示小图标

      LVS_LIST: 显示一列带有小图标的item

      LVS_REPORT: 显示item详细资料

      直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”



--------------------------------------------------------------------------------


2. 设置listctrl 风格及扩展风格

      LONG lStyle;

      lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style

      lStyle &= ~LVS_TYPEMASK; //清除显示方式位

      lStyle |= LVS_REPORT; //设置style

      SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style

      DWORD dwStyle = m_list.GetExtendedStyle();

      dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)

      dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)

      dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件

      m_list.SetExtendedStyle(dwStyle); //设置扩展风格

      注:listview的style请查阅msdn


--------------------------------------------------------------------------------



3. 插入数据

      m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列

      m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

      int nRow = m_list.InsertItem(0, “11”);//插入行

      m_list.SetItemText(nRow, 1, “jacky”);//设置数据



--------------------------------------------------------------------------------


4. 一直选中item

    选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS



--------------------------------------------------------------------------------


5. 选中和取消选中一行

    int nIndex = 0;

    //选中

    m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);

    //取消选中

    m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);



--------------------------------------------------------------------------------


6. 得到listctrl中所有行的checkbox的状态

      m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);

      CString str;

      for(int i=0; i

      {

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

           {

                str.Format(_T("第%d行的checkbox为选中状态"), i);

                AfxMessageBox(str);

           }

      }



--------------------------------------------------------------------------------


7. 得到listctrl中所有选中行的序号

      方法一:

      CString str;

      for(int i=0; i

      {

           if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )

           {

                str.Format(_T("选中了第%d行"), i);

              nbsp; 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

           }

      }



--------------------------------------------------------------------------------


8. 得到item的信息

      TCHAR szBuf[1024];

      LVITEM lvi;

      lvi.iItem = nItemIndex;

      lvi.iSubItem = 0;

      lvi.mask = LVIF_TEXT;

      lvi.pszText = szBuf;

      lvi.cchTextMax = 1024;

      m_list.GetItem(&lvi);

      关于得到设置item的状态,还可以参考msdn文章

      Q173242: Use Masks to Set/Get Item States in CListCtrl

           



--------------------------------------------------------------------------------


9. 得到listctrl的所有列的header字符串内容

      LVCOLUMN lvcol;

      char str[256];

      int   nColNum;

      CString strColumnName[4];//假如有4列

      nColNum = 0;

      lvcol.mask = LVCF_TEXT;

      lvcol.pszText = str;

      lvcol.cchTextMax = 256;

      while(m_list.GetColumn(nColNum, &lvcol))

      {

           strColumnName[nColNum] = lvcol.pszText;

           nColNum++;

      }



--------------------------------------------------------------------------------


10. 使listctrl中一项可见,即滚动滚动条

    m_list.EnsureVisible(i, FALSE);



--------------------------------------------------------------------------------


11. 得到listctrl列数

    int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();

你可能感兴趣的:(windows,mfc)