MFC CListCtrl 更新任何单元格的文本
Posted
技术标签:
【中文标题】MFC CListCtrl 更新任何单元格的文本【英文标题】:MFC CListCtrl updating text of any cell 【发布时间】:2013-01-08 16:16:41 【问题描述】:这个问题是为了了解如何以编程方式更新任何行。 细节。 我有一个 listcrtl,它接受来自文件或对话框中编辑控件的数据。添加项目后,我会知道我添加的位置,因此我可以更改其子项目文本。我什至在列表中实现了排序功能,所以现在位置不断变化。每行都有一个标识符列,以便我可以识别该行。 现在,从外部事件来看,如果我必须更改我知道的 ID 的其他列值,我必须首先通过比较 id 列找到项目的位置,然后使用该位置,我已经设置了 subitemtext .
这很好用,只是先找到行需要时间,然后需要更新列。
现在,为了直接获取该行,我需要一些帮助。 我经历过 http://msdn.microsoft.com/en-us/library/windows/desktop/hh298346(v=vs.85).aspx 但这不使用 MFC。请帮助我实现这一目标。
【问题讨论】:
【参考方案1】:如果您有很多项目,您应该考虑切换到Virtual Lists。这是访问数据的最快方式。如果您不想为此投入时间,那么对您来说最简单的方法是:
-
当您填充 CListCtrl 时,使用 SetItemData() 方法将每个项目的 ID 存储在项目数据中。该 ID 将始终与商品相关联,即使在重新排序后也是如此。
当您需要定位所需项目时,只需扫描所有项目,但不要使用 GetItemText()。请改用 GetItemData()。这会更快
【讨论】:
到现在为止,我的物品不多,所以我不得不使用虚拟列表。所以,我只是想知道,是否有办法跟踪项目,比如保存指向每个列表项目的指针映射,这样,即使位置发生变化,仍然可以访问指针以获取项目。但这显示了一些局限性。另一种方法是为所有这些 id 保留一个地图,并在排序时重新填充地图。看起来那个正在工作。但是,如果我们可以直接访问列表项,那将有很大帮助。 @Naresh:如果您需要通过指针直接访问您的项目,您应该使用虚拟列表框。尽管虚拟列表框主要是出于性能原因,但性能并不是决定何时使用它们的唯一因素。以上是关于MFC CListCtrl 更新任何单元格的文本的主要内容,如果未能解决你的问题,请参考以下文章
MFC CListCtrl::SetItemText() 不工作
如果任何列中都不需要图像/图标,MFC CListCtrl 是不是合适?