如何在CListCtrl中将Item插入第二列

时间:2012-10-31 01:56:12

标签: c++ list user-interface mfc edit

我是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;
}

我得到的是一个列表(如图中所示),我只能编辑第一列并且数据无法保留。 如何编辑第二列文字并使数据可保留?

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要网格控件而不是CListCtrl(或派生类)。实际上,可以在其他专栏中添加对版本的支持,但这是一个很好的工作,而不是我向新手推荐的那种东西。

根据this page of their web site,他们有一个网格控件。

答案 1 :(得分:0)

为了使MFC CListCtrl可编辑,您需要做一些事情。这是一个非常广泛的概述,不会涉及太多细节:

  1. 如上所述,它需要从CListCtrl派生一个类,因为CListCtrl本身不允许您显式编辑所有列。

  2. 在给定光标位置CPoint的情况下,您需要一个例程来计算您单击的特定单元格的行/列号。

  3. 在派生的CListCtrl课程中,您还需要一种方法来编辑所选单元格,创建并显示适当大小的CEdit控件。

  4. 创建派生CEdit控件,以便在完成时发送LVN_ENDLABELEDIT消息并自行破坏。

  5. 可从此站点下载实现可编辑列表控件的Visual Studio 2010项目示例:

    http://www.technical-recipes.com/2014/making-a-mfc-list-control-editable/

    在运行/调试示例时,您将获得一个实现可编辑列表控件的示例对话框项目,如下所示:

    enter image description here