我刚刚将一个新的(MFC Feature Pack)CVSListBox控件添加到项目中。控件中的项目列表由我的应用程序中的其他一些对象跟踪,因此当需要更改时,我需要从列表框中获取大量通知,以便我可以更新其他内容。对于那些不了解控件的人,有一个按钮栏,提供基本的添加/删除/重新排序功能。
CVSListBox控件提供可覆盖的虚拟函数,用于添加或重命名项目以及更改其顺序 - 所有这些都很有效。
但是,对于删除项目,唯一的覆盖是OnBeforeRemoveItem,在删除项目之前调用它,并且必须从中返回TRUE / FALSE以允许删除。删除发生后,没有具体的通知。
删除后获取通知的最佳方法是什么?
显然,在这里可能会破坏一些可怕的东西,因为在删除之后会有一个选择更改的事件,并且可以在删除之前保留一个标记,以表示下一个选择更改是特殊的。但我觉得我错过了更清洁,更明显的东西。有什么建议吗?
答案 0 :(得分:1)
假设每次都真正删除该项目,您可以:
答案 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);
}
};
希望它有所帮助。