SDK_列表控件的使用
列表控件的使用
列表控件是通用控件,响应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;
}
SDK_列表控件的使用的更多相关文章
- UWP开发必备:常用数据列表控件汇总比较
今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...
- .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)
说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...
- WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式
一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: Dat ...
- Flex 列表控件中的操作
主要操作包括:显示提示,使用图标,编辑列表条目中数据. 1.使用数据提示: 当鼠标停留在条目上时,可以显示该条目的相关数据提示. 当利用滚动条时,可以显示滚动条的相关提示. 在列表控件中使用showD ...
- VC++ 列表控件的使用方法
列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值.MFC中使用CListCtrl类来封装列表控件的各种操作. 通过调用BOOL Create( DWORD ...
- 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法
实际使用MVVM进行WPF开发的时候,可能会用到列表控件中每行一个编辑或删除按钮,这时直接去绑定,发现无法响应: <DataGridTemplateColumn Header="操作& ...
- Android自定义标签列表控件LabelsView解析
版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果: 标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ...
- MFC列表控件更改一行的字体颜色
参考自(http://blog.csdn.net/ribut9225/article/details/6720639) 1.首先从CListCtrl 继承一个类,命名为CListCtrlCl 在头文件 ...
- WPF: 实现带全选复选框的列表控件
本文将说明如何创建一个带全选复选框的列表控件.其效果如下图: 这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都 ...
随机推荐
- js 合并对象
对象的合并 需求:设有对象 o1 ,o2,需要得到对象 o3 var o1 = { a:'a' }, o2 = { b:'b' }; // 则 var o3 = { a:'a', b:'b' } 方法 ...
- javaweb_page指令
jsp指令: 1.作用:jsp指令是为jsp引擎设计的.他们并不直接产生不论什么课件输出.而是告诉引擎怎样处理jsp页面中的其余部分 2.jsp指令包含:page指令.include指令,taglib ...
- openstack (4)---部署Glance镜像服务,Nova计算服务
一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...
- Java学习笔记----你可能不知道那些知识,对象复制与引用
1.private ,protected,static不能用来修饰interface. 2.java在处理基本数据类型(比如int ,char,double)时,都是採用按值传递的方式运行.除此之外的 ...
- mysql数据库批量高速插入
近期在处理一批数据,须要从库中表里的字段进行处理然后导出到一个新表中.只是这个表的数据量有近500w条. 这数据量出现的的问题是须要处理的时间好长. 首先想到,一句一句的插入,大数据量处理时间好长,忽 ...
- 【OI新闻】2016.10.09
号外: [头条]今天OI神犇光勋和原子城po ke,Happy Birthday!
- 2014年国内最热门的.NET开源项目TOP25
编者按:在2014年初时,微软宣布成立.NET基金会,全面支持开源项目.如今将过一年的时间,目前国内的开源项目到底如何了?下面我们就来细数一下国内25款比较优秀的.NET开源项目. 作者:acdoma ...
- 分享一个全开源的ASP.NET快速开发平台,能快速开发OA CRM ERP 等系统
bingo炸了 2017/3/30 16:28:14 阅读(870) 评论(0) 公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个快速开发平台. 我们主要的业务是做OA.CRM. ...
- 并不对劲的[noi2006]网络收费
题目略长,就从大视野上复制了. 听上去好像费用流,然而…… ***************************表示略长的题目的分界线************************ 1495: [ ...
- [Codeforces 1037E] Trip
[题目链接] http://codeforces.com/problemset/problem/1037/E [算法] 首先离线 , 将问题倒过来考虑 , 转化为 : 每次删除一条边 , 此时最多有多 ...