MFC ListControl控件

这个控件大家都用过,但是百度的方法或多或少有问题,我在查阅的过程中感受到了深深的恶意,索性自己测试并发出来。

平台:VS2013

ID:IDC_LISTCTRL

添加成员变量(DDX):m_ListCtrl

Report格式

风格

LVS_EX_CHECKBOXES:在左侧显示选择框(check box)

LVS_EX_FULLROWSELECT:这种风格允许Report View的整行来被选择而不是仅仅一项

LVS_EX_GRIDLINES:相对上一种风格来说增加了水平和垂直分割线

 

LVS_EX_TRACKSELECT:当设置这种风格的时候,用户可以隔项选取

LVS_EX_HEADERDRAGDROP:列表头可以拖动 
 

 

1.添加列,InsertColumn

 

 

int nCount = 0;
m_ListCtrl.InsertColumn(nCount++, _T("111"), LVCFMT_LEFT,100);
m_ListCtrl.InsertColumn(nCount++, _T("222"), LVCFMT_LEFT,200);

 

 

2.删除列

 

//删除所有列
while ( m_ListCtrl.DeleteColumn (0))
//删除某列
m_ListCtrl.DeleteColumn(ID); 

 

2.1得到控件上的列数

 

int nHeadCount = m_ListCtrl.GetHeaderCtrl()->GetItemCount();

 

3.添加行,Insertitem先增加一行,后设置SetItemText

 int nIndex = 0;
 m_ListCtrl.InsertItem(nIndex, _T("777"));
 m_ListCtrl.SetItemText(nIndex, 1, _T("888"));

 

 

4.选中当前行,SetExtendedStyle 设置风格后

 

m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
int nCurrentRow = m_ListCtrl.GetSelectionMark();

5.删除某行

m_ListCtrl.DeleteItem(nItem);

6.删除全部

 

 

m_ListCtrl.DeleteAllItems();

7.删除选中行、多行

 

 

//返回值是选中的个数
int nSelect = m_ListCtrl.GetSelectedCount();
//返回选中的行
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
if (pos == NULL)
{
    return;
}
else
{
    while (pos)
    {
               //下一个
        int nItem = m_ListCtrl.GetNextSelectedItem(pos);
        m_ListCtrl.DeleteItem(nItem);
        pos = m_ListCtrl.GetFirstSelectedItemPosition();
    }
}

8.让某一行的值与某个数据绑定在一起

 

SOCKET s;
//要先插入一个Item
int nItem =  m_ListCtrl.InsertItem(nIndex, _T("777"));
//绑定SOCKET
m_ListCtrl.SetItemData(nItem, s);
SOCKET ss = m_ListCtrl.GetItemData(nItem);

9.刷新控件会卡死,比如现在list控件上有很多item,5000个,但是有时候要更新,那么此时使用了DeleteAllIems删除所有item,再添加5000个item,界面就会变灰色成卡死状态,处理这个问题在DeleteAllIems之前调一下SetRedraw禁止窗口重绘,结束调用一下,重绘控件

int nIndex = 0;
m_ListCtrl.SetRedraw(FALSE);
m_ListCtrl.DeleteAllItems();
//更新内容
while (nIndex < 5000)
{
    m_ListCtrl.SetItemText(nIndex, 1, _T("888"));
    m_ListCtrl.InsertItem(nIndex + 1, _T("7777"));
    m_ListCtrl.SetItemText(nIndex + 1, 1, _T("8888"));
    m_ListCtrl.InsertItem(nIndex + 1, _T("77777"));
    m_ListCtrl.SetItemText(nIndex + 1, 1, _T("88888"));
    nIndex++;
}
m_ListCtrl.SetRedraw(TRUE);

10.获取某行某列的字符串

 

 

//获取当前选中行号
int nItem = m_ListCtrl.GetSelectionMark();
//GetItemText(行号,列号)
CString csStr = m_ListCtrl.GetItemText(nItem, 0);

11.把先添加的Item放在最上面

 

 

 nIndex = m_ListCtrl.GetTopIndex();
 m_ListCtrl.InsertItem(nIndex, _T("999"));

 

 

 

 

 

 

 

 

 

 

 

 

 


版权声明:本文为NiubilityX原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。