2012-10-31 53 views
1

我是MFC & BGCControlBar的新手。
現在我打算使用CBCGPListCtrl其定義爲:如何在CListCtrl中插入項目到第二列

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

回答

0

你需要一個網格控件,而不是一個CListCtrl(或派生類)。實際上,可以在其他專欄中增加對版本的支持,但是這是對工作的一種欺騙,而不是我向新人推薦的那種東西。

根據this page of their web site,他們有一個網格控件。

0

爲了使MFC CListCtrl可編輯,您需要做一些事情。這是一個沒有進入太多細節非常全面的介紹:

  1. 正如上面提到那是相當多的工作,你需要得到從CListCtrl的一類,因爲CListCtrl的本身並不會讓你明確編輯所有的列。

  2. 給定一個光標位置CPoint,您需要一個例程來計算您單擊的特定單元格的行號/列號。

  3. 在派生的CListCtrl類中,您還需要一種方法來編輯所選單元格,並創建並顯示適當大小的可見控件。

  4. 創建派生的CEdit控制,使得它在發送完成後發送LVN_ENDLABELEDIT消息和自毀。

一個例子Visual Studio 2010的項目中實現的可編輯列表控件是從該網站下載:

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

在運行/調試的例子,你會得到一個例子對話框項目實施的編輯列表控制如圖所示:

enter image description here