MFC之列表控件
初始操作
新建MFC应用程序,项目名为ListCtrl,同样基于对话框。
删除原有控件,在右侧工具箱中找到List Control。放置到窗口中。
将方框拖大些,可以看到:
如果想要更改排布模式,右键,在属性中找到view就可以进行更改,此处不再配图。将view改为report报表模式。
右键,选择添加变量,访问方式:private,变量名:n_list。
定位到:类视图--CListCtrlDlg--OnInitDialg()中
添加代码:
//列表控件使用
CString str[] = { TEXT("姓名"), TEXT("性别"), TEXT("年龄")};
for(int i = 0; i < 3; i++)
{
//设置表头
n_list.InsertColumn(i, str[i]);
}
执行程序。
此时没有出现列表(当然你可以拖拽拉开,使得列表出现)。
InsertColumn()函数及重载使用
在手册中查找InsertColumn(),可以看到它的一个重载:
int InsertColumn(int nCol,
LPCTSTR lpszColumnHeading,
int nFormat = LVCFMT_LEFT,
int nWidth = -1,
int nSubItem = -1
)
返回值:如果成功,则返回新建列的索引值,否则为-1。
参数: nCol 新建列的索引值。
pColumn 包含新建列属性的LVCOLUMN结构的地址。
lpszcolumnHeading 包含列标题的字符串的地址。
nFormat 指定列对齐方式的整数。它为下列值之一:LVCFMT_LEFT,LVCFMT_RIGHT或LVCFMT_CENTER。
nWidth 以像素为单位的列宽。如果该参数为-1,那么没有设置列宽。
nSubItem 与列相关联的子项的索引。如果该参数为-1,那么没有子项与列相关。
对代码进行修改:
//列表控件使用
CString str[] = { TEXT("姓名"), TEXT("性别"), TEXT("年龄")};
for(int i = 0; i < 3; i++)
{
//设置表头 参数:1.索引 2.内容 3.对齐方式 4.列宽度
n_list.InsertColumn(i, str[i], LVCFMT_LEFT, 100);
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
执行:
在表内插入数据
//设置正文
//表头不算正文内容,索引从0开始
n_list.InsertItem(0, TEXT("张三"));
//给此item插入其他列数据 0行 1列 插入内容
n_list.SetItemText(0, 1, TEXT("男"));
执行结果:
添加更多的数据
注释掉上面的代码行,然后添加代码:
int j;
for(int i = 0; i < 10; i++)
{
j = 0;
CString name;
name.Format(TEXT("张三_%d"), i);
n_list.InsertItem(i, name);
n_list.SetItemText(i, ++j, TEXT("男"));
n_list.SetItemText(i, ++j, TEXT("18"));
}
执行:
属性设置
现在的代码执行后,列表中的张三,男之类的项之间没有网格分割,试着去添加网格。
代码示意图:
//设置属性: 获取原来的属性 整行选中状态 显示网格
n_list.SetExtendedStyle(n_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
执行: