SDK_列表控件的使用
2024-09-07 16:12:19
列表控件的使用
列表控件是通用控件,响应WM_NOTIFY 消息
主要包含了 4 种风格,我们学的是 report 风格
如何设置列表的扩展风格
LVS_EX_GRIDLINES: 列表拥有表格线
LVS_EX_FULLROWSELECT:可以进行整行选中
// 1. 设置列表的风格
ListView_SetExtendedListViewStyle(hListView, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);如何添加一个列:想要添加行必须拥有列( LVCOLUMN )
使用 ListView_InsertColumn 宏进行设置
// 向列表中的添加列
VOID InsertListViewColumns(HWND hListView)
{
// 1. 初始化一个列结构体进行设置
// 1.1 第一个字段 mask 表示想要应用哪些设置(对齐方式,文字,宽度)
LVCOLUMN lvColumn = { LVCF_FMT | LVCF_TEXT | LVCF_WIDTH };
// 1.2 设置对齐方式,第一列的对其方式始终是左对齐
lvColumn.fmt = LVCFMT_CENTER;
// 1.3 设置每一列的宽度
lvColumn.cx = 100;
// 2. 设置列名并添加列
lvColumn.cx = 100;
lvColumn.pszText = (LPWSTR)L"姓名";
ListView_InsertColumn(hListView, 0, &lvColumn);
lvColumn.cx = 50;
lvColumn.pszText = (LPWSTR)L"年龄";
ListView_InsertColumn(hListView, 1, &lvColumn);
lvColumn.cx = 260;
lvColumn.pszText = (LPWSTR)L"学校";
ListView_InsertColumn(hListView, 2, &lvColumn);
}如何添加一个行:插入一行数据+设置行的信息
ListView_InsertItem + ListView_SetItemText
// 添加数据到某一行
VOID InsertListViewItem(HWND hListView, int index, LPCWSTR Name, LPCWSTR Age, LPCWSTR School)
{
// 1. 先添加一行数据,并且设置第一列的信息
LVITEM lvItem = { LVIF_TEXT };
lvItem.iItem = index;
lvItem.pszText = (LPWSTR)Name;
ListView_InsertItem(hListView, &lvItem);
// 2. 设置每一行中的元素信息
ListView_SetItemText(hListView, index, 1, (LPWSTR)Age);
ListView_SetItemText(hListView, index, 2, (LPWSTR)School);
}如何获取列表的选中项
需要注意通知码的筛选, NM_XXXX
当响应的是列表控件产生的通知消息时, LParam 保存的是一个指针,指向 NMLISTVIEW
// 2. 筛选消息是由谁产生的
if (lpNmhdr->idFrom == IDC_LIST1)
{
// 3. 如果产生的是列表的通知消息,lParam 指向的是另外一个结构
LPNMLISTVIEW lpNmListVew = (LPNMLISTVIEW)lParam;
// 4. 如果产生的是鼠标的点击消息
if (lpNmhdr->code == NM_CLICK)
{
// 判断点击的行是否有效
// int n = ListView_GetItemCount(lpNmhdr->hwndFrom);
if (-1 != lpNmListVew->iItem)
{
// 4.1 可以通过 LPNMLISTVIEW 获取点击的位置
LVITEM lvItem = { LVIF_TEXT };
// 4.2 必须要将 pszText 指向一个有效的位置
lvItem.pszText = new WCHAR[0x10];
// 4.3 设置缓冲区的大小
lvItem.cchTextMax = 0x10;
// 4.4 设置要获取的行列信息学
lvItem.iItem = lpNmListVew->iItem;
lvItem.iSubItem = lpNmListVew->iSubItem;
// 4.5 发送消息获取数据
ListView_GetItem(lpNmhdr->hwndFrom, &lvItem);
// 4.6 显示获取的数据
MessageBox(hWnd, lvItem.pszText, L"左键点击", MB_OK);
}
}
}在列表中弹出一个菜单项
case WM_NOTIFY:
{
// 1. 响应 WM_NOTIFY 消息的时候, lParam 指向的但通常十一个结构体
LPNMHDR lpNmhdr = (LPNMHDR)lParam;
// 2. 筛选消息是由谁产生的
if (lpNmhdr->idFrom == IDC_LIST1)
{
// 右键弹出菜单
if (NM_RCLICK == lpNmhdr->code)
{
// 1. 获取点击的位置,获取的是相对于桌面的
POINT Point = { 0 };
GetCursorPos(&Point);
// 2. 获取一个子菜单
HMENU hMenu = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU1));
HMENU hSubMenu = GetSubMenu(hMenu, 0);
// 3. 弹出菜单
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN, Point.x, Point.y, NULL, hWnd, nullptr);
}
}
break;
}
最新文章
- Installscript如何给自定义路径的变量赋值
- asp.net连接数据库
- mysql exists 和 in的效率比较
- Poj OpenJudge 1068 Parencodings
- 查看32bit的ARM(比如ARMv7)反汇编
- Python模拟键盘输入和鼠标操作
- 关于在centos7上安装vmtools的各种报错的问题处理
- optimizer for eclipse--Eclipse优化,让你的Eclipse快来飞!
- 网络流24题——数字梯形问题 luogu 4013
- Linux第四节课学习笔记
- copyOf数组复制方法的使用(数组扩容练习)
- Java web开发环境搭配
- Release Notes for XE5
- Django--ORM(模型层)--多表(重重点)
- 基于I2C总线的0.96寸OLED显示屏驱动
- TTreeView.OnCustomDrawItem
- 一些linux知识和http知识
- 模仿std::vector写线性表的几点感想
- Linux学习笔记(3)linux服务管理与启停
- Mvc5 表单和HTML辅助方法