这个控件大家都用过,但是百度的方法或多或少有问题,我在查阅的过程中感受到了深深的恶意,索性自己测试并发出来。
平台: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"));
本文介绍了在VS2013环境下,使用MFC ListControl控件的一些常见操作,包括设置不同风格如LVS_EX_CHECKBOXES、LVS_EX_FULLROWSELECT等,以及如何添加、删除列和行,选中行,绑定数据,处理大量数据刷新等问题。同时,提供了避免界面卡死的解决策略。

900

被折叠的 条评论
为什么被折叠?



