2008-12-19 52 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); 
     } 
}; 

希望它有帮助。