1

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

我得到的是一个列表(如图),我只能编辑第一列,数据不能保留。如何编辑第二列文本并使数据可保留?

在此处输入图像描述

4

2 回答 2

0

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

根据他们网站的这个页面,他们有一个网格控件。

于 2012-10-31T21:39:32.693 回答
0

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

  1. 如上所述,这是一项相当多的工作,您需要从 CListCtrl 派生一个类,因为 CListCtrl 本身不允许您显式编辑所有列。

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

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

  4. 创建一个派生CEdit控件,以便它发送LVN_ENDLABELEDIT消息并在完成时自毁。

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

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

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

在此处输入图像描述

于 2014-05-12T19:34:31.187 回答