在界面上成组地显示含有多个数据项的数据集,是列表控件的主要用途。如下图所示,Windows 资源管理器中文件列表的显示就是列表控件的一个典型应用。 从数据显示的角度看,列表控件的功能已经比较强大了(支持大图标、小图标、列表、详细资料等多种显示方式;支持排序、查找、定位、增删等)。但美中不足的是,它不支持数据项的编辑功能。在很多的实际应用中,需要在显示数据的同时,允许用户“就地”对某些数据项进行修改。例如,在 Windows 资源管理器中,我们可以在浏览文件夹的同时修改其中任何一个文件的名字。这主要得益于 Windows 资源管理器中所使用的列表控件支持字段编辑功能。否则,简单的文件名修改也会变成一件很麻烦的事情。 因此,标准的列表控件只适合用于数据集的显示,而具有数据编辑功能的列表控件却可以在更广的范围里得到应用。本文重点介绍其实现过程。 1.基本原理 在列表控件上实现可编辑功能的原理非常简单,借助一个编辑框控件即可达到目的。具体步骤如下:①从 CListCtrl 派生一个子类,并拦截某个意味着进入编辑状态的消息,获取需要编辑的数据项的相关信息。所拦截的消息通常选择鼠标消息(例如双击),这样更容易确定数据项在列表控件中的位置(行号、列号)及其所占的区域。②将一个编辑框控件移动到待编辑数据项所在的区域上,装入待编辑的数据并显示出来,供用户进行修改。③编辑结束后将修改后的数据返回给列表控件,让其在对应的子项上显示新的数据。 2.实现过程 1)在 VC 6.0 中,新建一个基于对话框的项目,名称:Exam02。 2)编辑对话框资源,删除 IDOK 按钮和静态标签;保留 IDCANCEL 按钮,将其标题改为“退出”;添加一个列表控件,将其显示风格改为 report。利用类向导为列表控件添加一个关联变量 m_list(Type:CListCtrl)。在 CExam02Dlg::OnInitDialog 函数中添加如下代码: m_list.InsertColumn(0,_T("1"),LVCFMT_LEFT,100); m_list.InsertColumn(1,_T("2"),LVCFMT_LEFT,100); m_list.InsertColumn(2,_T("3"),LVCFMT_LEFT,100); m_list.InsertColumn(3,_T("4"),LVCFMT_LEFT,100); m_list.InsertItem(0,_T("123")); m_list.SetItemText(0,1,_T("c")); m_list.SetItemText(0,2,_T("d")); m_list.SetItemText(0,3,_T("e")); m_list.InsertItem(1,_T("456")); m_list.SetItemText(1,1,_T("f")); m_list.SetItemText(1,2,_T("g")); m_list.SetItemText(1,3,_T("h")...