热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【MFC-12】VS2010/MFC之列表框控件动态编辑(ListControlEdit)

一、开发环境1、VS2010;2、C++MFC;二、主要目标及重点1、目标:实现在双击列表框时的动态修改,包括:1)双击空白
一、开发环境


1、VS2010;

2、C++ / MFC;


二、主要目标及重点


1、目标:实现在双击列表框时的动态修改,包括:

      1)双击空白处时自动添加一行;

      2)双击已有数据时使用显示编辑框实现动态修改子项。

2、重点内容:

      1)List Control控件NM_DCLICK消息响应事件;

      2)Edit Control的KillFocus消息响应;

      3)Edit Control的动态显示及隐藏;

      4)List Control获取指定行和列的编号,并获取指定行和列的内容及修改赋值。


三、开发示例


1、创建基于对话框的MFC应用程序,删除原有的静态文本;

2、添加一个List Control控件和一个Edit Control控件,并分别关联控制变量m_ListTem和m_EditTest(List Control控件适当调整大小,Edit Control大小不用调整);

3、初始化对话框函数OnInitDialog中实现List Control控件和Edit Control控件的初始化,代码如下:

m_edit.ShowWindow(SW_HIDE);
CRect rect;
m_ListTest.GetClientRect(&rect);
int iLength = rect.Width();
m_ListTest.SetExtendedStyle(m_ListTest.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListTest.InsertColumn(0, _T("编号"), LVCFMT_CENTER, 40);
m_ListTest.InsertColumn(1, _T("频率(Hz)"), LVCFMT_CENTER, 80);
m_ListTest.InsertColumn(2, _T("加速度(g)"), LVCFMT_CENTER, (iLength - 120)/3);
m_ListTest.InsertColumn(3, _T("速度(m/s)"), LVCFMT_CENTER, (iLength - 120)/3);
m_ListTest.InsertColumn(4, _T("位移(mm)"), LVCFMT_CENTER, (iLength - 120)/3);


4、对话框头文件中添加int型变量m_Row和m_Col,用于保存双击时选中的行和列号,并初始化为-1(未选中状态);

5、为List Control控件添加NM_DBLCLK消息响应,并添加代码如下:

void CListControlDlg::OnNMDblclkListTest(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	CRect rc;
	CString strTemp;
	NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
	m_Row = pNMListView->iItem;
	m_Col = pNMListView->iSubItem;

	if (pNMListView->iItem == -1)	//选择空白处,添加一行,并设置焦点为最后一行,第二列
	{
		m_Row = m_ListTest.GetItemCount();
		strTemp.Format(_T("%d"), m_Row + 1);
		m_ListTest.InsertItem(m_Row,strTemp);
		m_ListTest.SetItemState(m_Row, LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
		m_ListTest.EnsureVisible(m_Row, FALSE);
		//m_Col = 1;
	}

	if (m_Col != 0)	// 选择子项
	{
		m_ListTest.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);
		m_edit.SetParent(&m_ListTest);
		m_edit.MoveWindow(rc);
		m_edit.SetWindowTextW(m_ListTest.GetItemText(m_Row, m_Col));
		m_edit.ShowWindow(SW_SHOW);
		m_edit.SetFocus();//设置Edit焦点
		m_edit.ShowCaret();//显示光标
		m_edit.SetSel(0, -1);//全选
	}
	
	*pResult = 0;
}

6、为Edit Control控件添加EN_KILLFOCUS消息响应,并添加代码如下:

void CListControlDlg::OnEnKillfocusEditInsert()
{
	// TODO: 在此添加控件通知处理程序代码
	CString str;
	m_edit.GetWindowTextW(str);
	m_ListTest.SetItemText(m_Row, m_Col, str);
	m_edit.ShowWindow(SW_HIDE);
}


7、生成 ---> 生成解决方案,即可测试运行,效果下图所示:


图1  初始化效果


图2  动态修改子项


图3  动态添加一行

备注:

源码下载链接:http://download.csdn.net/detail/qingyang8513/9473162


参考:

1)http://blog.csdn.net/xianglifighter/article/details/17592209




推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
author-avatar
魔者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有