ListCtrl在MFC的对话框中经常会使用,下面讲解ListCtrl的一些使用方法,仅供参考。
假设m_list用来表示一个CListCtrl的类对象,并且把ListCtrl设置为Report形式。
1) 设置风格
Report方式下几个扩展风格
LVS_EX_FULLROWSELECT 选择整行
LVS_EX_GRIDLINES 行与行之间有分割线
LVS_EX_INFOTIP 子item字符显示不下时自动出现tooltip
LVS_EX_CHECKBOXES 前面加上CheckBox单选框
设置全行选择,网格线的实例:
DWORD dwStyle =m_list.GetExtendedStyle();
dwStyle |=LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格)
dwStyle |= LVS_EX_GRIDLINES; //网格线(只适用与report风格)
dwStyle |=LVS_EX_CHECKBOXES; //item前生成CheckBox控件
m_list.SetExtendedStyle(dwStyle);//设置扩展风格
如果设置LVS_EX_CHECKBOXES时,使用BOOLGetCheck(int nItem) const;函数检查某行是否Checked,或者使用m_list.GetItemState(nItem, LVIS_SELECTED)函数。
设置LVS_SHOWSELALWAYS选项,它会一直选中某个Item。
2) 插入数据
// 插入列的头部信息
m_list.InsertColumn(0, “文件名”, LVCFMT_LEFT);
// 调整列宽
m_list.SetColumnWidth(0, 100);
m_list.InsertColumn(1, “设备类型”, LVCFMT_CENTER,100);
m_list.InsertColumn(2, “项目名称”, LVCFMT_CENTER,100);
// 插入数据
int index = m_list.GetItemCount();
m_list.InsertItem(index, “File Name”);
m_list.SetItemText(index, 1, “Device Type”);
m_list.SetItemText(index, 2, “Project Name”);
3) 删除所有数据
// 删除列的头部,注意需要从后往前删除,否则会出错
for (int index = m_list.GetItemCount(); index >= 0;index++) {
m_list.DeleteColumn(index);
}
// 删除所有的列表项
m_list.DeleteAllItems();
选中或者取消选中行
int index = 0;
// 选中Index所在行
m_list.SetItemState(index,LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
//取消选中
m_list.SetItemState(index, 0, LVIS_SELECTED | LVIS_FOCUSED);