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);

执行:

原文地址:https://www.cnblogs.com/echobiscuit/p/12711422.html