如何使用 CListCtrl 就地编辑列?

Posted

技术标签:

【中文标题】如何使用 CListCtrl 就地编辑列?【英文标题】:How to edit columns in-place with CListCtrl? 【发布时间】:2008-10-31 15:32:24 【问题描述】:

我希望 CListCtrl.EditLabel() 用于列表的任何列。如何实现这样的功能?

【问题讨论】:

【参考方案1】:

这是可行的,但它确实需要通过鼠标点击和焦点事件进行大量填充。

简而言之,您捕获鼠标左键按下消息并将其转换为单元格点击详细信息(即行和列索引)。

使用这些单元格详细信息,您无法确定列表视图单元格的大小和位置以及其中包含的文本值。

现在使用上一步中的大小和位置详细信息直接在此单元格上创建一个 CEdit 控件,并为其提供单元格的文本值。

最后一步是处理 CEdit 的焦点和键盘输入事件,以便可以将 CEdit 的文本详细信息放回列表视图单元格中。

它确实需要大量的编码,但如果做得好,它确实可以很好地替代网格控件。

【讨论】:

【参考方案2】:

不要尝试使用 CListCtrl。

使用MFC Grid Control。我们成功地将其部署在现成的应用程序中。它为所有单元格提供就地编辑、复选框、旋转等,以及列和行标题、自动大小、自动扩展、颜色、拖放。

【讨论】:

更好地使用codeproject.com/KB/list/CGridListCtrlEx.aspx在Vista/Win7上并不难看

以上是关于如何使用 CListCtrl 就地编辑列?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 CListctrl 中的行和列重复

如何通过点击“取消”键取消 CListCtrl 中的编辑?

如何停止显示 CListCtrl 的底部滚动条?

虚拟 CListCtrl 自动大小

验证列表控件就地编辑

如何为不可见的列优化 CListCtrl LVN_GETDISPINFO?