如何将项目插入到 CListCtrl 的第二列
Posted
技术标签:
【中文标题】如何将项目插入到 CListCtrl 的第二列【英文标题】:How to insertItem to 2nd colum in CListCtrl 【发布时间】:2012-10-31 01:56:11 【问题描述】:我是 MFC 和 BGCControlBar 的新手。 现在我打算使用 CBCGPListCtrl 定义为:
class BCGCBPRODLLEXPORT CBCGPListCtrl : public CListCtrl
&
CBCGPListCtrl m_wndWatch;
现在我打算更改演示代码:
int CWatchBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
if (CBCGPDockingControlBar::OnCreate(lpCreateStruct) == -1)
return -1;
m_Font.CreateStockObject (DEFAULT_GUI_FONT);
CRect rectDummy;
rectDummy.SetRectEmpty ();
// Create output pane:
const DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_VSCROLL | LVS_REPORT | LVS_EDITLABELS ;
m_wndWatch.Create (dwStyle, rectDummy, this, ID_LIST_1);
m_wndWatch.SendMessage (LVM_SETEXTENDEDLISTVIEWSTYLE, 0,
LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_wndWatch.InsertColumn (0, _T("Variable"), LVCFMT_LEFT, 100);
m_wndWatch.InsertColumn (1, _T("Value"), LVCFMT_LEFT, 100);
m_wndWatch.InsertItem (0, _T("m_nCount"));
m_wndWatch.SetItemText (0, 1, _T("100"));
m_wndWatch.SetFont (&m_Font);
return 0;
我得到的是一个列表(如图),我只能编辑第一列,数据不能保留。 如何编辑第二列文本并使数据可保留?
【问题讨论】:
【参考方案1】:您需要一个网格控件而不是 CListCtrl(或派生类)。实际上,可以在其他专栏中添加对版本的支持,但这是一项非常繁琐的工作,而不是我推荐给新手的那种事情。
根据this page of their web site,他们有一个网格控件。
【讨论】:
【参考方案2】:为了使 MFC CListCtrl 可编辑,您需要做一些事情。这是一个非常广泛的概述,没有涉及太多细节:
如上所述,这是一项相当多的工作,您需要从 CListCtrl 派生一个类,因为 CListCtrl 本身不允许您显式编辑所有列。
在给定光标位置CPoint
的情况下,您需要一个例程来计算您单击的特定单元格的行/列数。
在派生的CListCtrl
类中,您还需要一个方法来编辑选定的单元格,创建并显示适当大小的CEdit
控件。
创建一个派生的CEdit
控件,以便它发送LVN_ENDLABELEDIT
消息并在完成时自毁。
一个实现可编辑列表控件的 Visual Studio 2010 项目示例可从该站点下载:
http://www.technical-recipes.com/2014/making-a-mfc-list-control-editable/
在运行/调试示例后,您将获得一个示例对话框项目,该项目实现了一个可编辑的列表控件,如下所示:
【讨论】:
以上是关于如何将项目插入到 CListCtrl 的第二列的主要内容,如果未能解决你的问题,请参考以下文章
如何将两个熊猫列混合到一个数据框中,第一列的第一个元素,第二列的第二个元素等等? [复制]
编写vb代码,一个excel工作表有很多sheet,把所有sheet的第二列删除,然后把所有sheet的第一列插入到第三