删除后的CVSListBox通知

时间:2008-12-19 14:20:01

标签: c++ mfc mfc-feature-pack

我刚刚将一个新的(MFC Feature Pack)CVSListBox控件添加到项目中。控件中的项目列表由我的应用程序中的其他一些对象跟踪,因此当需要更改时,我需要从列表框中获取大量通知,以便我可以更新其他内容。对于那些不了解控件的人,有一个按钮栏,提供基本的添加/删除/重新排序功能。

CVSListBox控件提供可覆盖的虚拟函数,用于添加或重命名项目以及更改其顺序 - 所有这些都很有效。

但是,对于删除项目,唯一的覆盖是OnBeforeRemoveItem,在删除项目之前调用它,并且必须从中返回TRUE / FALSE以允许删除。删除发生后,没有具体的通知。

删除后获取通知的最佳方法是什么?

显然,在这里可能会破坏一些可怕的东西,因为在删除之后会有一个选择更改的事件,并且可以在删除之前保留一个标记,以表示下一个选择更改是特殊的。但我觉得我错过了更清洁,更明显的东西。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

假设每次都真正删除该项目,您可以:

  • OnBeforeRemoveItem中的处理覆盖,就像项目已被删除一样
  • 提升您自己的OnAfterItemRemoved事件
  • 看看你是否可以获得基础列表控件的处理(无论它是什么)并挂钩其中一个事件

答案 1 :(得分: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);
        }
};

希望它有所帮助。