MFC CListctrl里面使用编辑框和下拉框

2023-10-27

对于需要使用到子控件的单元格,就把子控件移动到需要使用的位置就好。
1、创建工程,添加控件CEdit和CListCtrl到对话框。
在这里插入图片描述
分别添加控件变量:

protected:
	CEdit m_Edit;
	CListCtrl m_ListCtrl;
	int m_row;//选中行
	int m_col;//选中列

2、需要在对话框初始化里面响应Init().

void CListEditComboBoxDlg::Init()
{
	m_Edit.ShowWindow(SW_HIDE);

	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

	m_ListCtrl.InsertColumn(0, _T("姓名"), LVCFMT_CENTER, 60);
	m_ListCtrl.InsertColumn(1, _T("年龄"), LVCFMT_CENTER, 60);
	m_ListCtrl.InsertColumn(2, _T("性别"), LVCFMT_CENTER, 60);
	m_ListCtrl.InsertColumn(3, _T("科目"), LVCFMT_CENTER, 60);
	m_ListCtrl.InsertColumn(4, _T("分数"), LVCFMT_CENTER, 60);

	SetListText();

	CenterWindow();
	AnimateWindow(50, AW_BLEND);
}
void CListEditComboBoxDlg::SetListText()
{
	InitTestText();
}
void CListEditComboBoxDlg::InitTestText()
{

#ifdef _DEBUG
	const char* pTT[] = { "张一", "16", "男", "数学一", "80" };

	int nRowIdx = m_ListCtrl.GetItemCount();
	
	m_ListCtrl.InsertItem(nRowIdx, "");
	for (int i = 0; i < 5;i++)
	{
		m_ListCtrl.SetItemText(nRowIdx, i,pTT[i]);
	}
#endif // _DEBUG

}

3、添加编辑框响应事件ON_EN_KILLFOCUS

void CListEditComboBoxDlg::OnEnKillfocusEdit1()
{
	SetListTest();
}
void CListEditComboBoxDlg::SetListTest()
{
	m_Edit.ShowWindow(SW_HIDE);
	if (m_col < 0 || m_row < 0) return;
	//修改

	CString key;
	m_Edit.GetWindowText(key);
	m_ListCtrl.SetItemText(m_row, m_col, key);
}

4、添加列表控件响应事件NM_CLICK,需要重点处理。

void CListEditComboBoxDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	NM_LISTVIEW  *pEditCtrl = (NM_LISTVIEW *)pNMHDR;
	if (pEditCtrl->iItem == -1)
	{
		return;
	}
	else if (pEditCtrl->iSubItem == 4 || pEditCtrl->iSubItem == 0 || pEditCtrl->iSubItem == 1)//编辑框
	{
		CRect rc;
		m_row = pNMItemActivate->iItem;//m_row选中行行号
		m_col = pNMItemActivate->iSubItem;//m_col选中行列号
		m_ListCtrl.GetSubItemRect(pNMItemActivate->iItem, pNMItemActivate->iSubItem, LVIR_LABEL, rc);//取得子项的矩形

		m_ListCtrl.ClientToScreen(&rc);
		ScreenToClient(&rc);
		char * ch = new char[128];
		m_ListCtrl.GetItemText(pNMItemActivate->iItem, pNMItemActivate->iSubItem, ch, 128);//取得子项的内容
		m_Edit.SetWindowText(ch);//将子项的内容显示到编辑框中
		m_Edit.MoveWindow(&rc);//将编辑框移动到子项上面,覆盖在子项上
		m_Edit.ShowWindow(SW_SHOW);//显示编辑框
		m_Edit.SetFocus();//使编辑框取得焦点
		m_Edit.CreateSolidCaret(1, rc.Height() - 5);//创建一个光标
		m_Edit.ShowCaret();//显示光标
		m_Edit.SetSel(0, -1);//使光标移到最后面
		delete[] ch;
	}
	else//在单元格处生成下拉列表项
	{
		if (m_bExistComboBox == true)
		{
			if (!(m_row == pEditCtrl->iItem && m_col == pEditCtrl->iSubItem))//如果点中的单元格不是之前创建好的
			{
				DestroyCombox(&m_ListCtrl, &m_ComBox, m_row, m_col);
				m_bExistComboBox = false;
				CreateCombox(pEditCtrl, &m_ComBox, m_row, m_col, m_bExistComboBox);//创建编辑框
				LoadComboBox(m_col);
				m_ComBox.ShowDropDown();//自动下拉
			}
			else//点中的单元格是之前创建好的
			{
				m_ComBox.SetFocus();//设置为焦点 
			}
		}
		else
		{
			m_row = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
			m_col = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
			CreateCombox(pEditCtrl, &m_ComBox, m_row, m_col, m_bExistComboBox);//创建编辑框
			LoadComboBox(m_col);
			m_ComBox.ShowDropDown();//自动下拉
		}
	}
	*pResult = 0;
}

5、重要成员。

protected:
	void Init();
	void SetListText();
	void InitTestText();
	void LoadComboBox(int col);//按列
	void SetListTest();

protected:
	CComboBox m_ComBox;
	bool m_bExistComboBox;
	void CreateCombox(NM_LISTVIEW  *pEditCtrl, CComboBox *pCreateObj, int &item, int &subItem, bool &bHaveCreate);//创建单元格下拉列表框函数
	void DestroyCombox(CListCtrl *pList, CComboBox *pCreateObj, int &item, int &subItem);//销毁单元格下拉列表框

6、效果。
在这里插入图片描述

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

MFC CListctrl里面使用编辑框和下拉框 的相关文章

  • Python pygame实现中国象棋单机版源码

    今天给大家带来的是关于Python实战的相关知识 文章围绕着用Python pygame实现中国象棋单机游戏版展开 文中有非常详细的代码示例 需要的朋友可以参考下 coding utf 8 Created on Sun Jun 13 15
  • 顺序、随机IO和Java多种读写文件性能对比

    概述 对于磁盘的读写分为两种模式 顺序IO和随机IO 随机IO存在一个寻址的过程 所以效率比较低 而顺序IO 相当于有一个物理索引 在读取的时候不需要寻找地址 效率很高 基本流程 总体结构 我们编写的用户程序读写文件时必须经过的OS和硬件交
  • HTTP学习重点

    1 HTTP与TCP关系 1 1 什么是HTTP协议 HTTP Hypertext Transfer Protocol 超文本传输协议 是一个简单的请求 响应协议 它通常运行在TCP之上 2 url URL Uniform Resource
  • web前端基础:CSS背景样式

    背景样式 设置元素的背景颜色 设置元素的背景图片 background color 设置元素的背景颜色 background image 把图像设置为背景 background position 设置背景图像的起始位置 background
  • 解决Django 配置mysql 遇到 No module named MySQLdb or MySQL-python

    解决Django 配置mysql 遇到 No module named MySQLdb or MySQL python 防止环境变量带来的一系列问题 先安装python 虚拟环境 pip install virtualenv 具体可浏览 h
  • 做短视频千万不要错过这5个视频素材网

    这个要看你创作什么内容 dy里面很多视频素材都是创作者自己拍摄 要不就插入一些网上找的视频素材 现在网上找到一些视频素材很多都是有版权 除非花钱买 也有免费的 但就是质量不算高 各取所需 下面我就推荐几个视频素材网站 你可以根据自己的情况选
  • 如何安装和使用vicuna

    Vicuna 是基于 LLaMa 微调得来的大规模语言对话模型 本文以 Vicuna 7B 模型为例 安装和使用 Vicuna 若需使用 Vicuna 13B 模型 仅需把参数 7B 改成 13B 即可 0 虚拟环境 在 conda 中创建
  • 用python 取得mysql随机一条记录的取巧办法

    网上有很多关于如何从数据库取得随机一条记录的办法 包括 SELECT RAND MAX id FROM random 还有据说是效率最低的办法 SELECT FROM foo ORDER BY RAND LIMIT 1 至于其他的方法 可以
  • stm32搭建mqtt_STM32+MQTT协议功能实现

    实例简介 STM32 F103VE 野火的那个 很常用的 移植好的MQtt协议 注册迪发物联的用户 连接就能行 自己亲测可用 也可以自己搭建MQTT服务器连接 实例截图 核心代码 STM32 TCP Client MQTT 完成 STM32
  • 多语言vue-i18n (vue2)

    1 安装 vue i18n npm install vue i18n 8 save npm install vue i18n save 9版本需要vue3 0 在vue2环境下 默认安装 npm install vue i18n 的版本是
  • mysql数据库优化方式

    引言 如何比较两个相同类型产品的好坏 在功能大致相同的情况下 剩下的就拼的是速度 比谁的代码优化的更好 提高代码质量 优化数据库 优化SQL语句提高查询效率 采用Nosql等等 这次我要记录的是8种mysql数据库优化方式 1 选取最适用的
  • 【OpenCV学习笔记】【编程实例】一(VS2010/MFC+OPenCV2.4.7读取图片和摄像头)

    问题 VS2010 MFC OpenCV 显示图片 链接 http jingyan baidu com article f71d60375ddd411ab641d1e3 html 说明 可以了解一个基本的应用OpenCV的MFC程序的基本流
  • IDEA单元测试控制台不能输入数据

    问题 在使用IDEA写单元测试方法 其中包含了输入语句 但在控制台无法输入数据 解决方案 其实这个是IDEA本身的配置问题 我们只需要修改IDEA 添加相应配置文件就好啦 具体操作如下 选择最上方工具栏中的Help gt Edit Cust
  • git pull时报错:Your local changes to the following files would be overwritten by merge

    1 产生原因 这种情况一般是由于 你在工作区修改了一些代码 但是还不打算提交 这时同步主干代码的时候 如果你修改的文件与主干分支的代码有冲突 那么拉取主干分支代码时就会报这个错误 2 简单示例 下面我通过一个简单的例子给大家展示一下这个报错
  • 正弦积分与余弦积分函数

    文章目录 一 被积分函数分析 二 积分函数分析 参考 在看天线理论时遇到了正弦积分与余弦积分函数 为了更好的理解这个函数的性质 使用Python将这两个函数的图像复现出来 同时画了被积函数的图像 图1 书上的公式示例 正弦积分函数 S i
  • mysql 实现批量添加和更新功能

    mapper xml文件配置 单独添加
  • 计算机毕业设计springboot基于Hadoop平台的电影推荐系统541039【附源码+数据库+部署+LW】

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 系统的选题背景和意义 选题背景 随着互联网的快速发展和大数据技术的成熟应用 电影推荐系统成为了电影行业中不可或缺的一部分 基于Hadoop平台
  • opengl es 3D要素——贴图

    前不久开始了正式的opengl es学习 目前为止 成就有 显示一些三维元素 一些可以自由旋转 一些可以用手指控制左右上下的旋转 下一步准备开始写光照了 在此之前先整理下思路 我的工程已经开始变得庞大了 需要声明下 我不太会把全部的代码贴出

随机推荐

  • 学计算机专业的打字要快么,怎样学电脑打字最快电脑新手如何快速学会打字

    01 在零基础的情况下 通过自学快速掌握键盘打字也是需要下一定的功夫的 首先需要说明的是 键盘上有很多按键 一个键盘具有许多的功能 分为了不同的区域 平常使用最多的是主键盘区 而在电脑上打字使用最多的是主键盘区里标有英文大写字母的26个键
  • javascript中的数据类型转换

    个人简介 作者简介 大家好 我是阿牛 个人主页 馆主阿牛 支持我 点赞 收藏 留言 系列专栏 web开发 格言 迄今所有人生都大写着失败 但不妨碍我继续向前 javascript中的数据类型转换 个人简介 前言 数值型转换为字符串类型 字符
  • 如何通过本地搭建wamp服务器并实现无公网IP远程访问

    文章目录 前言 1 Wamp服务器搭建 1 1 Wamp下载和安装 1 2 Wamp网页测试 2 Cpolar内网穿透的安装和注册 2 1 本地网页发布 2 2 Cpolar云端设置 2 3 Cpolar本地设置 3 公网访问测试 4 结语
  • Linux系统下串口调试助手putty,cutecom,xgcom

    系统 linux mint 18 3 xfce 64bit 串口驱动 ch340 系统已自带 没有测试pl2302 尝试了几个linux下的串口调试助手 这里总结一下 由于使用的是USB转串口 CH340 所以在 dev 目录下面看到的串口
  • 人脸识别经典算法三:Fisherface(LDA)

    Fisherface是由Ronald Fisher发明的 想必这就是Fisherface名字由来 Fisherface所基于的LDA Linear Discriminant Analysis 线性判别分析 理论和特征脸里用到的PCA有相似之
  • [杂乱笔记]algorithm头文件下的常用函数

    使用algorithm头文件 需要在头文件加using namespace std 1 常见的函数 max min abs swap int x 98 int y 7 int z 12 printf d d n max x y min y
  • 详细解剖大型H5单页面应用的核心技术点

    阐述下项目 Xut js 开发中一个比较核心的优化技术点 这是一套平台代码 并非某一个插件功能或者框架可以直接拿来使用 核心代码大概是6万行左右 不包含任何插件 这也并非一个开源项目 不能商业使用 只是为了作者开发方便同步修改代码而上传的源
  • FISCO-BCOS 八、ubuntu配置Java环境

    ubuntu配置Java环境需根据自己的java版本号进行细节修改 本文以jdk11 0 18版本为例 一 安装Java 安装默认Java版本 Java 8或以上 sudo apt install y default jdk 查询Java版
  • GPFS文件系统分析

    什么是GPFS文件系统 GPFS General Parallel File System 是IBM公司开发的高性能集群文件系统 从1998年 开始首先应用于AIX集群 2001年后应用于Linux集群 在集群的环境中 GPFS文件系统允许
  • 关于路由, 我好奇的那些点

    最近解锁了一个拯救自我的新技能 就是学习之前 可以先观察下知识时间线 相关人物 以及其他背景等 让那些规则不再变得辣么无聊 什么是路由 通俗的讲就是根据不同的url展示不同页面或者内容 路由的发展阶段 路由的概念最开始是在后端出现的 在以前
  • 大牛用十年功力带你彻底理解JVM垃圾回收器:ZGC,回收设计

    回收设计 ZGC的并发回收算法采用的也是 目的空间不变性 的设计 关于目的空间不变性的更多内容可以参考第7章 在第7章中提到 Shenandoah从JDK 13开始也采用 目的空间不变性 的设计 但是ZGC与Shenandoah相比 还是有
  • 前端页面多字段模糊查询

    前端页面多字段模糊查询 本文主要参考了大佬们的内容 整合记录一下具体内容 1 实现代码 arr是前端原有的列表数组 后台返回来的数据 var arr id 1 aa asd bb 阿斯顿 cc 123 id 2 aa Awr bb 艾沃瑞
  • 云原生 AI 工程化实践之 FasterTransformer 加速 LLM 推理

    01 背景 OpenAI 在 3 月 15 日发布了备受瞩目的 GPT4 它在司法考试和程序编程领域的惊人表现让大家对大语言模型的热情达到了顶点 人们纷纷议论我们是否已经跨入通用人工智能的时代 与此同时 基于大语言模型的应用也如雨后春笋般出
  • Java-String的用法

    Java String的用法 文章目录 Java String的用法 1 介绍 2 实例化String的两种方法 3 String内容的比较 3 1使用 进行基本数据类型的比较 3 2String中使用 比较字符串的内容 3 3使用equa
  • SpringCloud中ribbon的配置文件和属性配置原理

    https blog csdn net hry2015 article details 78357990 作者写的非常详细
  • Mac下使用命令行 mvn 给Maven打包

    使用命令行 mvn 给Maven打包 sudo mvn clean install Dmaven test skip true Dmaven javadoc skip true Dmaven test skip true 跳过单元测试 Dm
  • wms仓储信息化的应用和发展趋势

    随着在线零售市场日益成熟 电子商务不断蓬勃发展 电商仓储需求也呈现高速增长的态势 仓储业也进入到了质的变化阶段 wms仓储信息化的应用和发展趋势 在电商供应链中 企业尤为关心的 是如何把货物更快更准确地送到客户手中 以及如何应对随时变化的订
  • 畅购中

    项目第七天 ES类型 要答出 type版本前和版本后的改变 ES查询方法 使用ElasticsearchRestTemplate对象来构建 ES的默认规则 ES能够自动存储未提交创建字段信息的数据 目的 未指定时ES为了可以更好的支持聚合和
  • python列表索引超出范围怎么解决_Python的列表怎么用?你会吗?Python每日学习打卡...

    Python的列表怎么用 你会用吗 本文主要介绍了Python中列表 List 的详解操作方法 包含创建 访问 更新 删除 其它操作等 需要的朋友可以参考下 Python列表 1 创建列表 只要把逗号分隔的不同的数据项使用方括号括起来即可
  • MFC CListctrl里面使用编辑框和下拉框

    对于需要使用到子控件的单元格 就把子控件移动到需要使用的位置就好 1 创建工程 添加控件CEdit和CListCtrl到对话框 分别添加控件变量 protected CEdit m Edit CListCtrl m ListCtrl int