CListCtrl中高亮插入行,条目上移下移

news2024/11/25 9:33:24

1. 样式修改

在这里插入图片描述

2. 关键代码

BOOL CMFCApplication3Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 
	// 代码省略......
	//

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO:  在此添加额外的初始化代码
	m_btnMoveDown.EnableWindow(FALSE);
	m_btnMoveUp.EnableWindow(FALSE);
	m_MyListCtrl.InsertColumn(0, _T("测试"), 0, 100 );
	

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CMFCApplication3Dlg::OnBnClickedAddSomeItems()
{
	// TODO:  在此添加控件通知处理程序代码
	static std::default_random_engine dre(unsigned int(time(0)));
	std::uniform_int_distribution<int> uid(100, 999);
	CString strValue;
	strValue.Format(_T("测试文本--%d"), uid(dre));

	int nSelMark = m_MyListCtrl.GetSelectionMark();
	int nInsertIndex = m_MyListCtrl.GetSelectionMark();
	if (nInsertIndex < 0)
	{
		nInsertIndex = m_MyListCtrl.GetItemCount() - 1;
		if (nInsertIndex < 0) nInsertIndex = 0;
	}
	nInsertIndex += 1;
	int nNewIndex = m_MyListCtrl.InsertItem(nInsertIndex, strValue);

	//设置当前行高亮	
	m_MyListCtrl.SetSelectionMark(nNewIndex);
	m_MyListCtrl.SetItemState(nNewIndex,
		LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
	m_MyListCtrl.SetFocus();
	


}

//down
void CMFCApplication3Dlg::OnBnClickedMoveDown()
{
	int nSelIndex = m_MyListCtrl.GetSelectionMark();
	if (nSelIndex < 0 || nSelIndex >= m_MyListCtrl.GetItemCount() - 1)
	{
		return;
	}

	//将文本值与扩展数据交换
	int nNextIndex = nSelIndex + 1;
	CString strNextText = m_MyListCtrl.GetItemText(nNextIndex, 0);
	m_MyListCtrl.SetItemText(nNextIndex, 0, m_MyListCtrl.GetItemText(nSelIndex, 0));
	m_MyListCtrl.SetItemText(nSelIndex, 0, strNextText);
	DWORD_PTR dwNextItemData = m_MyListCtrl.GetItemData(nNextIndex);
	m_MyListCtrl.SetItemData(nNextIndex, m_MyListCtrl.GetItemData(nSelIndex));
	m_MyListCtrl.SetItemData(nSelIndex, dwNextItemData);

	//设置行为高亮
	m_MyListCtrl.SetSelectionMark(nNextIndex);
	m_MyListCtrl.SetItemState(nNextIndex, 
		LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
	m_MyListCtrl.SetFocus();

}

//up
void CMFCApplication3Dlg::OnBnClickedMoveUp()
{
	// TODO:  在此添加控件通知处理程序代码
	int nSelIndex = m_MyListCtrl.GetSelectionMark();
	if (nSelIndex <= 0)
	{
		return;
	}

	//将文本值与扩展数据交换
	int nPrevIndex = nSelIndex - 1;
	CString strPrevText = m_MyListCtrl.GetItemText(nPrevIndex, 0);
	m_MyListCtrl.SetItemText(nPrevIndex, 0, m_MyListCtrl.GetItemText(nSelIndex, 0));
	m_MyListCtrl.SetItemText(nSelIndex, 0, strPrevText);
	DWORD_PTR dwPrevItemData = m_MyListCtrl.GetItemData(nPrevIndex);
	m_MyListCtrl.SetItemData(nPrevIndex, m_MyListCtrl.GetItemData(nSelIndex));
	m_MyListCtrl.SetItemData(nSelIndex, dwPrevItemData);

	//设置当前行为高亮
	m_MyListCtrl.SetSelectionMark(nPrevIndex);
	m_MyListCtrl.SetItemState(nPrevIndex, 
		LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
	m_MyListCtrl.SetFocus();
}


void CMFCApplication3Dlg::OnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	// TODO:  在此添加控件通知处理程序代码

	TRACE3("nItem:%d, nNewState:%u, nOldState:%u\n",
		pNMLV->iItem, pNMLV->uNewState, pNMLV->uOldState);
	if (pNMLV->uNewState & LVIS_SELECTED)
	{
		if (pNMLV->iItem == 0)
		{
			m_btnMoveDown.EnableWindow(TRUE);
			m_btnMoveUp.EnableWindow(FALSE);
		}
		else if (pNMLV->iItem == m_MyListCtrl.GetItemCount() - 1)
		{
			m_btnMoveDown.EnableWindow(FALSE);
			m_btnMoveUp.EnableWindow(TRUE);
		}
	}


	*pResult = 0;
}

3. 运行截图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1554699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 系统安装php 8.0.2

1. 安装包准备 https://www.php.net/distributions/php-8.0.22.tar.gz 我下载到 /usr/local/src 这个目录了 cd /usr/local/srcwget https://www.php.net/distributions/php-8.0.22.tar.gz 2. tar 解压 然后进到解压的文件夹 tar -zxvf php-8.0.22.tar.gz cd php-8.0.2…

【前端面试3+1】05v-if和v-show的区别、v-if和v-for能同时使用吗、Vuex是什么?【合并两个有序链表】

一、v-if和v-show的区别 v-if 和 v-show 是 Vue.js 中用来控制元素显示与隐藏的指令。 1.v-if&#xff1a; v-if 是根据表达式的真假值来决定是否渲染元素。当表达式为真时&#xff0c;元素会被渲染到 DOM 中&#xff1b;当表达式为假时&#xff0c;元素不会被渲染到 DOM 中。每…

【论文通读】UFO:A UI-Focused Agent for Windows OS Interaction

UFO&#xff1a;A UI-Focused Agent for Windows OS Interaction 前言AbstractMotivationMethodsExperimentConclusion 前言 Windows客户端第一个JARVIS&#xff0c;利用GPT4 Vision识别截图信息辅助智能体自动化执行操作&#xff0c;作为微软大肆宣传的一篇工作&#xff0c;其…

Ubuntu20.04下PCL安装,查看,卸载等操作

Ubuntu20.04下PCL安装&#xff0c;查看&#xff0c;卸载等操作 项目来源 https://github.com/PointCloudLibrary/pclhttps://pointclouds.org/documentation/modules.htmlhttps://pcl.readthedocs.io/projects/tutorials/en/master/ 点云学习&#xff1a; https://github.c…

QT----基于QT的人脸考勤系统ubuntu系统运行,编译到rk3588开发板运行

目录 1 Ubantu编译opencv和seetaface库1.1 Ubantu编译opencv1.2 Ubuntu编译seetaface1.3 安装qt 2 更改代码2.1 直接运行报错/usr/bin/ld: cannot find -lGL: No such file or directory2.2 遇到报错摄像头打不开2.3 修改部分代码2.4 解决中文语音输出问题 3 尝试交叉编译rk358…

141.环形链表 142.环形链表II

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索…

何时需要指定泛型:Scala编程指南

这里写目录标题 何时需要指定泛型&#xff1a;Scala编程指南为什么使用泛型类型安全 何时需要指定泛型结论 何时需要指定泛型&#xff1a;Scala编程指南 在Scala编程中&#xff0c;泛型是一种强大的特性&#xff0c;它允许开发者编写灵活且类型安全的代码。然而&#xff0c;正…

VMware虚拟机更换引导顺序

前言 我用wmware装了黑群晖测试&#xff0c;将img转成vmdisk的格式之后发现系统引导盘之后1G&#xff0c;有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能&#xff0c;才能使用ss…

天梯算法Day3整理

浮点数解析 炸鱼题掠过 冲突值 题面 解析 方法一 —— 并查集 按照边值排序&#xff0c;然后按边值从大到小遍历&#xff0c;通过并查集判断能否将所有点无冲突地归于两个集合。在判断时&#xff0c;若有两个点不得不产生冲突&#xff0c;则输出这两个点之间的边值并结束。…

Java后端需要掌握的前端知识

第一章. HTML 与 CSS HTML 是什么&#xff1a;即 HyperText Markup language 超文本标记语言&#xff0c;咱们熟知的网页就是用它编写的&#xff0c;HTML 的作用是定义网页的内容和结构。 HyperText 是指用超链接的方式组织网页&#xff0c;把网页联系起来Markup 是指用 <…

【QT入门】 QListWidget各种常见用法详解之图标模式

往期回顾 【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客 【QT入门】 QTabWidget各种常见用法详解-CSDN博客 【QT入门】 QListWidget各种常见用法详解之列表模式-CSDN博客 【QT入门】 QListWidget各种常见用法详解之图标模式 QListWidget有列表和图标两种显…

在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料

目录 前言 DNN 量化神经网络 并行超低功耗计算范式 面向内存的部署 结果 原文与源码下载链接 REFERENCES 前言 在物联网极端边缘的终端节点上部署深度神经网络( Deep Neural Networks&#xff0c;DNNs )是支持普适深度学习增强应用的关键手段。基于低成本MCU的终端节点…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界&#xff08;2023年&#xff09;&#xff0c;如何获取其中的自己所需的子区域&#xff08;一个小镇&#xff09;呢&#xff1f; 可以先去查一下自己的镇代码&#xff0c;我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…

SpringBoot学习记录

SpringBoot是用于加速Spring开发的。 我们先来看看如何使用SpringBoot来创建一个基于Web的程序&#xff0c;可以发现相较于SpringMVC其有巨大改变。 3.开发控制器类 GetMapping("/{id}")public String getById(PathVariable Integer id){System.out.println("…

关于Linux中的history命令

前言&#xff1a;本文内容为实操学习记录&#xff0c;不具有调研价值&#xff0c;仅供参考&#xff01; 正文&#xff1a; 接触过Linux操作系统的朋友一般都知道history命令&#xff0c;直接输入history命令&#xff0c;会显示当前用户的历史输入记录。这个原理是linux会记录我…

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

Python车道线偏离预警

程序示例精选 Python车道线偏离预警 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python车道线偏离预警》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应用推…

C语言-printf和scanf的区别详解

fprintf&#xff08;指定的格式写到文件里面。适用于所有的输出流&#xff0c;可以打印在屏幕上面&#xff09;fscanf&#xff08;指定的格式读取出来&#xff0c;适用于所有的输入流&#xff09; fprintf&#xff08;指定的格式写到文件里面&#xff09; 两个函数是一样的 打开…

EasyRecovery2024 安装步骤及功能特色介绍

在数字化时代&#xff0c;数据的重要性不言而喻。无论是个人用户还是企业用户&#xff0c;都可能面临数据丢失的风险。为了应对这一挑战&#xff0c;EasyRecovery作为一款专业的数据恢复软件&#xff0c;成为了越来越多人的选择。 EasyRecovery以其强大的功能和易用的界面&…

关于Kubernetes-v1.23.6-资源调度-StatefulSet-OnDelete当删除的时候才更新

前面提到的普通的滚动更新&#xff0c;都是修改完sts立即就会发生更新操作 而还有一种更新的策略为&#xff0c; OnDelete&#xff0c;即只有在 pod 被删除时会进行更新操作 还是先看一下web这个sts的当前更新策略如下&#xff1a; 这里我们修改&#xff0c;更新策略&#xf…