2008-12-19 48 views
3

我剛剛將一個新的(MFC Feature Pack)CVSListBox控件添加到項目中。控件中的項目列表由我的應用程序中的一些其他對象跟蹤,所以我需要在發生任何更改時從列表框中收集大量通知,以便我可以更新其他內容。對於那些不知道控件的人來說,有一個按鈕欄提供基本的添加/刪除/重新排序功能。刪除後的CVSListBox通知

CVSListBox控件爲添加或重命名項目以及更改項目等提供了可覆蓋的虛擬功能 - 所有這些都很好地工作。

但是,對於刪除項目,唯一的覆蓋是OnBeforeRemoveItem,它被稱爲BEFORE項目被刪除,並從哪個人必須返回TRUE/FALSE以允許刪除。一旦刪除發生,沒有具體的通知。

在刪除後獲得通知的最佳方式是什麼?

很明顯,在這裏可能會破解一些可怕的事情,因爲刪除後會有一個選擇更改的事件,並且可以在刪除之前保留一個標記,以表示下一個選擇更改爲特別。但我覺得我錯過了更清潔,更明顯的東西。有什麼建議麼?

回答

1

假設該項目將真正成爲每次刪除,你既可以:

  • 做處理在OnBeforeRemoveItem覆蓋作爲如果該項目已移除
  • 提出自己的OnAfterItemRemoved事件
  • 看看你是否能夠控制潛在的列表控件(無論它是什麼)並掛鉤其中一個事件
0

試試這樣的:

class my_lbox : public CVSListBox 
{ 
    protected: 

     BOOL OnBeforeRemoveItem(int what_item) 
     { 
      CString txt = GetItemText(what_item); 
      DWORD_PTR idata = GetItemData(what_item); 

      if(true) //up to you to check if this item can be removed 
      { 
       OnAfterRemoveItem(txt,idata); 
       return TRUE; 
      } 
      return FALSE; 
     } 

     void OnAfterRemoveItem(const CString& txt, DWORD_PTR idata) 
     { 
      CString info; 
      info.Format(L"Removing item:'%s'",txt); 

      MessageBox(info); 
     } 
}; 

希望它有幫助。