这个控件大家都用过,但是百度的方法或多或少有问题,我在查阅的过程中感受到了深深的恶意,索性自己测试并发出来。
平台: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版权协议,转载请附上原文出处链接和本声明。