如何将项目插入到 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的第一列插入到第三

组合2个字符串的最快方法,将字符串从第二列交错到整个数据帧中的第一列

情景linux--如何得出一个文件的第二列?

如何在 MFC 的 CListCtrl 中插入位图或其他图像对象?