3

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

CVSListBox 控件为诸如添加或重命名项目以及更改它们的顺序之类的事情提供了可覆盖的虚函数——所有这些都很好地工作。

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

删除后获得通知的最佳方式是什么?

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

4

2 回答 2

1

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

  • 在 OnBeforeRemoveItem 覆盖中进行处理,就好像该项目已被删除一样
  • 引发您自己的 OnAfterItemRemoved 事件
  • 看看您是否可以获得底层列表控件的句柄(无论它可能是什么)并挂钩其中一个事件
于 2008-12-19T19:00:44.963 回答
0

Try something like this:

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);
        }
};

Hope it helps.

于 2012-08-19T17:43:43.447 回答