win32 ListView 部分用法总结
现在编程慢慢的抛弃了黑框,喜欢用界面编程。前几天想起来大学的时候C语言做的学生信息管理系统。 突然兴趣来了,用 win32 做了界面来完成当年的编程,做了简化。 效果图如下:
接下来, 我就总结listView的一点基本用法:
1. ListView 初始化:(选择 view 为 report)
1.1 给list控件添加列标题,设置网格线风格 。在WM_INITDIALOG 消息里面做如下处理:
ListView_SetExtendedListViewStyle(hListWnd, LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES);
/*
LVS_EX_FULLROWSELECT 选中高亮
LVS_EX_CHECKBOXES 勾选框
LVS_EX_GRIDLINES 网格线
*/
lvcolum.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvcolum.fmt = LVCFMT_CENTER;
lvcolum.cx = 100;
lvcolum.pszText = L"学号";
lvcolum.iSubItem = 0;
ListView_InsertColumn(hListWnd, 0, &lvcolum);
lvcolum.cx = 140;
lvcolum.pszText = L"姓名";
lvcolum.iSubItem = 1;
ListView_InsertColumn(hListWnd, 1, &lvcolum);
lvcolum.cx = 140;
lvcolum.pszText = L"班级";
lvcolum.iSubItem = 2;
ListView_InsertColumn(hListWnd, 2, &lvcolum);
lvcolum.cx = 210;
lvcolum.pszText = L"入学时间";
lvcolum.iSubItem = 3;
ListView_InsertColumn(hListWnd, 3, &lvcolum);
2. 向list控件里面添加内容, 这个在响应“增加”按钮里面处理:
lv.mask = LVIF_TEXT;
lv.iSubItem = 0;
lv.iItem = nIndex++; //第几行的索引
lv.iImage = 0;
lv.pszText = wstrId;
ListView_InsertItem(hListWnd, &lv);
lv.iSubItem = 1;
lv.pszText = wstrName;
ListView_SetItem(hListWnd, &lv); //先要插入一项,然后再设置每一项item
lv.iSubItem = 2;
lv.pszText = wstrClass;
ListView_SetItem(hListWnd, &lv);
lv.iSubItem = 3;
lv.pszText = wstrEnterTime;
ListView_SetItem(hListWnd, &lv);
3. 删除list控件里面的内容:
int nSelectItem = ListView_GetSelectionMark(hListWnd); //获取鼠标选中项的索引
SendMessage(hListWnd, LVM_DELETEITEM, nSelectItem, 0); //LVM_DELETEITEM 消息删除nSelectItem item。
4. 查询信息:
int nSelectIndex = ListView_GetSelectionMark(hListWnd);
TCHAR wstrText[4][128] = { 0 };
//通过一个for循环 能够获取第 nSelectIndex item的所有内容
for (int i = 0; i < 4; i++)
{
ListView_GetItemText(hListWnd, nSelectIndex, i, wstrText[i], sizeof(wstrText[i]));
}
5. 修改学生信息:(以修改学生姓名为例)
if (lstrlen(wstrName) != 0)
{
lv.mask = LVIF_TEXT;
lv.iSubItem = 1;
lv.iItem = nSelectIndex;
lv.pszText = wstrName;
SendMessage(hListWnd, LVM_SETITEM, 0, (LPARAM)&lv);
}
LVM_SETITEM 消息设置item内容。wparam 必须是0;