【MFC开发(17)】高级列表控件List Control

2023-05-16

1.介绍

ListCtrl 高级列表控件也是我们平时编程过程中很常用的一个控件,一般涉及到报表展示、记录展示之类的,都需要ListCtrl 高级列表控件。例如:任务管理器啊,文件列表啊,等等都是ListCtrl 高级列表控件来实现的。

 

常用属性介绍:

Edit Lables 是否可编辑节点

 

View 用来设置高级列表控件的风格,有以下四种风格

Icon:为每个item显示大图标

Small Icon:为每个item显示小图标

List:显示一列带有小图标的item

Report:显示item详细资料

2.常用方法

(1)首先给控件添加变量

 

 (2)设置扩展风格

//获得扩展风格
	DWORD  style = m_listctrl.GetExtendedStyle();
	//添加网格线风格以及整行选中的风格以及前面加有选择框
	style |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES;
	//设置扩展风格
	m_listctrl.SetExtendedStyle(style);

(3)添加列

//添加列,0---序号,第二个参数显示内容,
	//第三个参数显示对齐方式,第四个参数表头显示的宽度
	m_listctrl.InsertColumn(0, _T("第一列"), LVCFMT_CENTER, 50);
	m_listctrl.InsertColumn(1, _T("第二列"), LVCFMT_CENTER, 50);
	m_listctrl.InsertColumn(2, _T("第三列"), LVCFMT_CENTER, 50);

(4)添加行以及行内容

//插入行内容
	//尾部添加行
	m_listctrl.InsertItem(m_listctrl.GetItemCount(),_T("第一行"));
	//可以设置某一行某一列的内容,参数依次为行,列,文本内容
	m_listctrl.SetItemText(0,0, _T("111"));
	m_listctrl.SetItemText(0,1, _T("222"));
	m_listctrl.SetItemText(0,2, _T("333"));

(5)设置选中某一行以及取消选中

选中

void CMFC_Test1Dlg::OnBnClickedButton21()
{
	// TODO:  在此添加控件通知处理程序代码
	//设置高亮
	m_listctrl.SetFocus();
	//设置选中某一行
	m_listctrl.SetItemState(1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
}

 取消选中刚才选中的

void CMFC_Test1Dlg::OnBnClickedButton24()
{
	// TODO:  在此添加控件通知处理程序代码
	m_listctrl.SetItemState(1,0, LVIS_SELECTED | LVIS_FOCUSED);
}

(6)遍历控件中的每一行

void CMFC_Test1Dlg::OnBnClickedButton25()
{
	// TODO:  在此添加控件通知处理程序代码
	//首先获取有多少行
	int ncount = m_listctrl.GetItemCount();
	//遍历每一行
	for (int i = 0; i < ncount; i++){
		//一次获取i+1行的第一列、第二列、第三列
		CString str1 = m_listctrl.GetItemText(i, 0);
		CString str2 = m_listctrl.GetItemText(i, 1);
		CString str3 = m_listctrl.GetItemText(i, 2);
	}
}

(7)获取选中的行

//获得当前选中的行
	//首先获得位置
	POSITION pos = m_listctrl.GetFirstSelectedItemPosition();
	while (pos){
		//根据位置获得选中行的索引
		int row_idx = m_listctrl.GetNextSelectedItem(pos);
		CString str_idx;
		str_idx.Format(_T("%d"), str_idx);
		MessageBox(str_idx);
	}

(8)获得多选框选中的行

void CMFC_Test1Dlg::OnBnClickedButton26()
{
	// TODO:  在此添加控件通知处理程序代码
	//首先获取有多少行
	int ncount = m_listctrl.GetItemCount();
	//遍历每一行
	for (int i = 0; i < ncount; i++){
		BOOL bcheck = m_listctrl.GetCheck(i);
		if (bcheck){
			CString check_idx;
			check_idx.Format(_T("第%d行被勾选了"), i);
			MessageBox(check_idx);
		}
	}
}

​​​​​​​

 (9)删除行

void CMFC_Test1Dlg::OnBnClickedButton27()
{
	// TODO:  在此添加控件通知处理程序代码
	//删除某一行
	m_listctrl.DeleteItem(0);
	//删除所有行
	m_listctrl.DeleteAllItems();
}

需要注意的是删除一行之后,剩余所有行的索引会改变,比如删除了0行,则删除之后1行变成了0行

(10)编辑指定的行文本

需要注意的是要使可编辑,需要设置控件属性钟的Edit Labels为True

首先添加两个事件,开始编辑以及结束编辑

void CMFC_Test1Dlg::OnLvnBeginlabeleditList2(NMHDR *pNMHDR, LRESULT *pResult)
{
	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码
	*pResult = 0;
}


void CMFC_Test1Dlg::OnLvnEndlabeleditList2(NMHDR *pNMHDR, LRESULT *pResult)
{
	NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码
	//三个参数依次为行,列,输入的内容
	m_listctrl.SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText);
	*pResult = 0;
}

需要注意的是只能编辑(索引为0的)第1列的文本,其他列的没办法编辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MFC开发(17)】高级列表控件List Control 的相关文章

  • 列表列表中出现的频率

    我有一个列表列表 其中每个列表都已排序 我想调查的是某个元素在特定位置出现了多少次 例如 pnc 曾两次出现在第二位 一次出现在第三位 我的数据结构如下 dput degree l list c schwab 0 pnc 0 0344827
  • 如何在给定位置的情况下获取列表中的某个元素?

    所以我有一个清单 list myList myList push back Object myObject 我不确定 但我确信这将是数组中的 第 0 个元素 我可以使用任何函数来返回 myObject 吗 Object copy myLis
  • Python - 为什么这段代码被视为生成器?

    我有一个名为 mb 的列表 其格式为 Company Name Rep Mth 1 Calls Mth 1 Inv Totals Mth 1 Inv Vol Mth 2 等等 在下面的代码中 我只是添加了一个包含 38 个 0 的新列表 这
  • 得到“致命错误:索引超出范围”:在 swiftui 的列表项中显示索引

    更新 错误 类型 没有成员 1 如果在list foreach中放置一个if闭包 if self showMarkedOnly name marked 为什么 代码版本4 struct Name Identifiable Hashable
  • 角度分割列表

    我有一个看起来像这样的列表 A B C 是否有任何简单的方法 而无需创建一个函数 将其展平为一个看起来像这样的数组 A B C 我搜索了 SO 但没有找到任何带有打字稿方法的内容 Thanks 编辑 A B C 是相同类型 看来您正在寻找的
  • 从字符串数组中删除项目

    我有一个包含如下数据的数据库字段 76 60 12 例如 如果我想删除60 我该怎么办 要删除的号码可以是任何地方 如果需要的话 我还需要删除逗号 我正在使用 NET 2 0 我会用逗号分割字符串 删除元素 然后再次连接字符串 希望这一切都
  • 如何将嵌套的数字列表转换为字符串列表?

    我有下面的列表 p 1 2 3 4 2 3 4 1 如何将子列表放入字符串中 例如 期望的结果是 p 1234 2341 可以通过将每个整数转换为字符串并连接字符串来完成 p join map str sub list for sub li
  • python 中的扁平化列表

    我看过很多关于如何在 Python 中展平列表的帖子 但我一直无法理解这是如何运作的 reduce lambda x y x y myList 有人可以解释一下这是如何工作的吗 gt gt gt myList 1 2 3 4 5 6 7 8
  • 具有固定大小的 Java PriorityQueue

    我正在计算算法的大量可能的结果组合 为了对这些组合进行排序 我用双值对它们进行评级并将它们存储在 PriorityQueue 中 目前 该队列中有大约 200k 个项目 这非常占用内存 实际上 我只需要说出列表中所有项目中最好的 1000
  • C#动态创建Type数组

    在 C 中 我需要能够在运行时基于以字符串形式传递给函数的逗号分隔数据类型列表创建 Type 对象数组 基本上 这就是我想要实现的目标 create array of types Type paramTypes typeof uint ty
  • 如何对 glob.glob 进行数字排序?

    我在一个文件夹中有一堆按数字排序的文件 当我尝试对 glob glob 进行排序时 我从来没有以正确的顺序获得文件 文件示例和预期输出排序 folder C Users user Desktop folder 1 sample mp3 C
  • 如何使用append/3在prolog中递归构建列表?

    我需要了解一些事实的价值 这部分似乎正在发挥作用 fact1 A Val1 fact2 B Val2 A B 但是一旦我尝试附加这些值 Val1 Val2 通过使用append 3谓词到列表 OutList 我只得到一个可能的解决方案 而不
  • 测试 python 列表的所有元素是否为 False

    如何返回False如果所有元素都在列表中False 给定的列表是 data False False False Using any https docs python org 2 library functions html any gt
  • 如何将CString转换为整数和浮点数? [复制]

    这个问题在这里已经有答案了 我正在尝试转换CStringint 和 float 但无法找到任何 C 库函数来完成此操作 请帮忙 正确的UNICODE 符合规定的方式MFC如下 CString sInt T 10 int n ttoi sIn
  • Python 中两个列表列表的高效比较

    我是 python 的新手 只是在做项目时学习一些东西 这里我有两个列表列表 我需要比较和分离 A gt B 中找到的差异和 b gt A 中找到的差异 最好的比较方法是什么 A 1L test case 1 1L test case 2
  • 循环列表的值[重复]

    这个问题在这里已经有答案了 我是编码新手 正在尝试编写一个简单的代码 该代码将采用一个列表 例如 1 2 3 并循环元素 n 次 所以如果n 1 我应该得到A 3 1 2 如果n 2 我应该得到A 2 3 1 我写的代码是 n 1 j 0
  • 如何将tchar指针转换为char指针

    我想将 tchar 转换为 char 这可能吗 如果是的话该怎么做 我使用unicode设置 A TCHAR要么是一个普通的char or a wchar t取决于您的项目的设置 如果是后者 您需要使用WideCharToMultiByte
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 混合 MFC 和 WPF:模态对话框

    我使用 C CLI 界面层将 C WPF 对话框添加到现有的 C MFC 应用程序 我一切正常 只是我遇到了形式问题 例如 MFC 应用程序使用 ShowDialog 显示 WPF 对话框 按预期工作 该 WPF 对话框显示使用 DoMod
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表

随机推荐

  • 第十一课:树莓派L298N电机实验

    第一课 什么是树莓派 第二课 基于树莓派的10个经典项目 第三课 购买您的第一个树莓派 第四课 如何安装树莓派系统 第五课 树莓派C语言编程手册 第六课 树莓派led控制 第七课 树莓派按键控制 第八课 树莓派PWM 脉宽调制
  • 从旋转矩阵计算欧拉角

    旋转矩阵和欧拉角之间的正向转换关系比较好推理 xff0c 而逆向变换就显得不是那么容易了 这篇博客介绍由旋转矩阵计算欧拉角的方法 xff0c 参考了一篇Paper xff1a Computing Euler angles from a ro
  • aiohttp 异步http请求-1.快速入门 get 请求示例

    前言 在 python 的众多 http 请求库中 xff0c 大家最熟悉的就是 requests 库了 xff0c requests 库上手非常容易 xff0c 适合入门学习 如果平常工作中对发请求不追求效率和并发的情况下 xff0c r
  • Flask 学习-67.钩子函数before_request 和 before_first_request 的使用

    前言 学过pytest框架的肯定知道什么叫钩子 xff08 hook xff09 函数 钩子函数的作用是在程序运行的过程中插入一段代码做一些事情 四个钩子 请求钩子是通过装饰器的形式实现 xff0c Flask支持如下四种请求钩子 xff1
  • 30岁自学嵌入式找工作,可行吗?前景怎么样?

    大家好 xff0c 我是张巧龙 xff0c 在知乎上看到一个问题 xff1a 30岁自学嵌入式找工作 xff0c 可行吗 xff1f 看看一个高赞回答 xff1a 注 xff1a 以下内容不代表本公众号观点 xff0c 仅供参考 不可行 嵌
  • 0基础在ROS系统中实现RRT算法(四)URDF集成gazebo并搭建gazebo仿真环境

    小白一枚 xff0c 毕设突发奇想加入了ROS的内容 xff0c 不知道自己还能不能毕业 以下均为通过看视频 xff0c 翻博客等整理而成的笔记 xff0c 并非我的原创 可能会出现一些报错的修改或者简单的代码是我自己做的 哈哈 Gazeb
  • 如何在vscode中优雅的编写C语言

    如何在vscode中优雅的编写C语言 各位好 xff0c 我认为vscode编辑器在windows环境下除了Pycharm外是最方便的IDE了 xff0c 但在初学C语言时很少有人的第一个C语言软件使用的是vscode来编译与运行 xff0
  • Unity 使用RVO2(orca)算法

    RVO算法官方下载 https github com snape RVO2 CS git 官方版本的RVO只支持增加移动代理和障碍物 xff0c 不支持删除移动代理和障碍物 不太符合实际应用 我拓展了删除移动代理与障碍物的方法 示例项目 x
  • 51单片机串口通讯UART

    1 串行通信的的基本知识 在实际的工业生产 xff0c 或者生活中 xff0c 计算机的CPU要与外部的设备之间进行信息的交流 xff0c 数据的交换 xff0c 所有的这些信息交换均可称为通信 通信的方式有两种 xff0c 分别为串行通信
  • 库函数开发与寄存器开发

    在以前 8 位机时代的程序开发中 xff0c 一般直接配置芯片的寄存器 xff0c 控制芯片的工作方式 xff0c 如中断 xff0c 定时器等 配置的时候 xff0c 常常要查阅寄存器表 xff0c 看用到哪些配置位 xff0c 为了配置
  • Arduino修改Serial接收缓冲区大小

    看到网上有资料说 xff0c 直接添加以下宏定义就可以了 xff1a span class token macro property span class token directive keyword define span SERIAL
  • RT-Thread nmealib库WH-GN100模块设置仅支持北斗

    RT Thread nmealib库主页 在nmea thread init函数的末尾 xff0c 添加以下代码块 xff0c 发送配置指令 xff0c 仅使用北斗卫星 xff0c 即可配置成仅GPS卫星工作模式 span class to
  • C#中字符串判断为空或者空格

    最近遇到这个问题 xff0c 来大概说一下C 中字符串判断为空或者空格这个问题 xff08 1 xff09 字符串为空null xff0c 怎么讲就是内存中没有放东西 xff0c 比如新创建的字符串就为空null xff0c string
  • 【冷知识】火车票座位分布知识点

    最近到了每年过年 xff0c 春运火车高峰期的时候了 xff0c 有的人想知道自己具体的位置在哪里 xff08 比如硬座是不是靠窗的 xff0c 座位的大小号排序等 xff09 xff0c 现在来讲讲这方面的知识点 xff0c 个人整理 列
  • QT中的自定义信号以及自定义函数

    信号与槽函数是QT的一大创新 xff0c 通过自定义信号与槽函数可以实现自己想实现的功能 标准的信号与槽写法如下 xff1a connect amp button amp QPushButton clicked this amp QWidg
  • 如何摆放PCB元器件?(建议收藏)

    PCB设计 xff0c 既是科学也是艺术 其中有非常多关于布线线宽 布线叠层 原理图等等相关的技术规范 xff0c 但当你涉及到PCB设计中具有艺术特质元器件布局问题时 xff0c 问题就变得有趣起来了 事实上 xff0c 关于元器件摆放限
  • 【MFC开发(6)】复选框按钮控件Check Box

    1 新建复选框 直接拖拽即可 xff0c 设置名字可修改caption内容 2 设置默认选中 复选框可多选 xff0c 所以可以给很多复选框按钮进行选中 xff0c 代码如下所示 xff0c 放在dlg初始化函数中实现 获取多选框香蕉的指针
  • 【MFC开发(15)】进度条控件Progress Control

    1 进度条控件的常用方法 首先给控件添加一个变量 在dlg初始化函数钟进行方法的实现 进度条显示区域 设置进度条的范围 m progress SetRange 0 100 设置进度条当前的位置 m progress SetPos 75 获取
  • 【MFC开发(16)】树形控件Tree Control

    1 树形控件的属性配置 xff08 1 xff09 Check Boxes xff1a 默认为false xff0c 如果选择为true的话每个节点前面会带有一个方框 xff08 2 xff09 Edit Labels xff1a 默认为f
  • 【MFC开发(17)】高级列表控件List Control

    1 介绍 ListCtrl 高级列表控件也是我们平时编程过程中很常用的一个控件 xff0c 一般涉及到报表展示 记录展示之类的 xff0c 都需要ListCtrl 高级列表控件 例如 xff1a 任务管理器啊 xff0c 文件列表啊 xff