Win32 学习笔记_列表视图控件(ListCtrl)

控件类名

SysListView32
要包含头文件:
#include <commctrl.h>

控件的创建

	HINSTANCE hInstance = GetModuleHandle(NULL);

	//创建报表样式的列表视图
	HWND hListCtrl = CreateWindowEx(WS_EX_CLIENTEDGE,
		TEXT("SysListView32"), nullptr,
		WS_VISIBLE | WS_CHILD | LVS_REPORT,
		10, 10, 400, 300,
		hWnd, HMENU(1001), hInstance, 0);

控件样式

标红的为常用控件样式

样式名称说明
LVS_ALIGNLEFT当显示格式是大图标或小图标时,标题放在图标的左边.缺省情况下标题放在图标的下面.
LVS_ALIGNTIP当显示格式是大图标或小图标时,标题放在图标的上边
LVS_AUTOARRANGE当显示格式是大图标或小图标时,自动排列控件中的表项
LVS_EDITLABELS用户可以修改标题
LVS_ICON指定大图标显示格式.
LVS_LIST指定列表显示格式.
LVS_NOCOLUMNHEADER在报告格式中不显示列的表头.
LVS_NOLABELWRAP当显示格式是大图标时,使标题单行显示.缺省时是多行显示.
LVS_NOSCROLL列表视图无滚动条.
LVS_NOSORTHEADER报告列表视图的表头不能作为排序按钮使用.
LVS_OWNERDRAWFIXED由控件的拥有者负责绘制表项.
LVS_REPORT指定报表显示格式.
LVS_SHAREIMAGELISTS使列表视图共享图像序列
LVS_SHOWSELALWAYS即使控件失去输入焦点,仍显示出项的选择状态.
LVS_SINGLESEL指定一个单选择列表视图.缺省时可以多项选择
LVS_SMALLICON指定小图标显示格式
LVS_SORTASCENDING按升序排列表项.
LVS_SORTDESCENDING按降序排列表项.

常用消息

1.LVM_INSERTCOLUMN

插入列消息
参数:
WPARAM: 列的索引
LPARAM: LPVOCLUMN结构体
返回: 新插入列的索引或-1

代码示例:

	//在第一列插入姓名
	LVCOLUMN lvCol = { 0 };
	lvCol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
	lvCol.fmt = LVCFMT_LEFT;
	lvCol.iSubItem = 0;
	lvCol.cx = 100;
	lvCol.pszText = (LPTSTR)TEXT("姓名");
	//ListView_InsertColumn(hListCtrl, 0, &lvCol);//等同于下面的语句
	SendMessage(hListCtrl,LVM_INSERTITEM,0,&lvCol);

	//在第二列插入性别
	lvCol.iSubItem = 1;
	lvCol.cx = 50;
	lvCol.pszText = (LPTSTR)TEXT("性别");
	SendMessage(hListCtrl,LVM_INSERTITEM,0,&lvCol);
	
	//第三列插入年龄
	//...
	

在这里插入图片描述

2.LVM_INSERTITEM

插入新行数据
参数:
WPARAM: 必须=0
LPARAM:LVITEM结构体指针
返回:
新添加项的索引或-1

代码示例:

LVITEM lvItem = { 0 };
	lvItem.mask = LVIF_TEXT | LVIF_IMAGE;
	lvItem.iItem = 0;
	lvItem.iSubItem = 0;
	lvItem.pszText = (LPTSTR)TEXT("张三");
	lvItem.iImage = 0;
	ListView_InsertItem(hListCtrl, &lvItem);

	lvItem.iItem = 1;
	lvItem.iSubItem = 0;
	lvItem.pszText = (LPTSTR)TEXT("赵林林");
	lvItem.iImage = 0;
	ListView_InsertItem(hListCtrl, &lvItem);

在这里插入图片描述
插入行数据只插入第一列的数据,要插入后面的列就要用LVM_SETITEMTEXT消息设置

3.LVM_SETITEMTEXT

设置指定列索引要显示的字符串
参数:
WPARAM: 行的索引
LPARAM: LVITEM结构体指针
返回:
BOOL

代码示例:


	lvItem.iSubItem = 1;
	lvItem.pszText = (LPTSTR)TEXT("男");
	SendMessage(hListCtrl,LVM_SETITEMTEXT, 0,(LPARAM)&lvItem);

	lvItem.iSubItem = 2;
	lvItem.pszText = (LPTSTR)TEXT("33");
	SendMessage(hListCtrl, LVM_SETITEMTEXT, 0, (LPARAM)&lvItem);

	lvItem.iSubItem = 1;
	lvItem.pszText = (LPTSTR)TEXT("女");
	SendMessage(hListCtrl, LVM_SETITEMTEXT, 1, (LPARAM)&lvItem);

	lvItem.iSubItem = 2;
	lvItem.pszText = (LPTSTR)TEXT("23");
	SendMessage(hListCtrl, LVM_SETITEMTEXT, 1, (LPARAM)&lvItem);

在这里插入图片描述

4.LVM_GETSELECTIONMARK

获得当前种项的索引

int nSel=(int)SendMessage(hListCtrl,LVM_GETSELECTIONMARK,0,0);

###5.LVM_GETITEMTEXT
获得指定行,指定列显示的字符串

//获得选中行第一列的字符串
	TCHAR szStr[100]={0};
	LVITEM lvItem = { 0 };
	lvItem.mask = LVIF_TEXT;
	lvItem.iSubItem = 0;  //列索引
	lvItem.iItem = nSel; //行索引
	lvItem.cchTextMax = 100; //最大字符串缓存大小
	lvItem.pszText = (LPTSTR)szStr;

	SendMessage(m_hWnd, LVM_GETITEMTEXT, nSel, (LPARAM)&lvItem);

常用通知消息

LVN_ITEMCHANGED

选中项改变消息

在父窗口捕获WM_NOTIFY消息

LPNMLISTVIEW lpnmLv=(LPNMLVITEW)lParam;

if(lpnmLv->hdr.code == LVM_ITEMCHANGED &&
	lpnmLv->uNewState & LVIS_SELECTED)
{
	TCHAR szStr[100]={0};
	int nSel=lpnmLv->iItem;
	HWND hList=lpnmLv->hdr.hwndFrom;
	
	LVITEM lvItem = { 0 };
	lvItem.mask = LVIF_TEXT;
	lvItem.iSubItem = 0;  //列索引
	lvItem.iItem = nSel; //行索引
	lvItem.cchTextMax = 100; //最大字符串缓存大小
	lvItem.pszText = (LPTSTR)szStr;
	SendMessage(hList, LVM_GETITEMTEXT, nSel, (LPARAM)&lvItem);

	MessageBox(hWnd,szStr,TEXT("提示信息"),MB_OK);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值