我使用CListBox :: SetItemData来存储指向我所有的CListBox派生类中的某些数据的指针,我希望列表框本身可以跟踪它并在不再需要时释放内存。
为此,我需要在每次删除项目时收到通知(包括LB_RESETCONTENT以及删除项目的所有其他可能情况)。是否有可以实现的事件或事件?
答案 0 :(得分:1)
没有。 ListBox仅为用户执行的操作生成通知。用户无法删除,添加或清空列表框,只能通过您自己的代码完成。所以这里的理念是控制不必告诉你你已经知道的事情。您可以在修改内容的代码中任意生成自己的消息。但是当然从CListBox继承你自己的类并添加你自己的虚拟方法会更好。
答案 1 :(得分:1)
由于其所有者使用其中一种LBS_OWNERDRAW*
样式绘制,您可以注意WM_DELETEITEM
;
列表框或列表框时发送给列表框或组合框的所有者 组合框被销毁或项目被删除
LB_DELETESTRING
,LB_RESETCONTENT
,CB_DELETESTRING
或CB_RESETCONTENT
信息。系统会为每个已删除的消息发送WM_DELETEITEM
消息 项目
答案 2 :(得分:1)
由于你已经对列表框进行了子类化,因此“正确”设计(IMO)将数据管理功能添加到列表框中,然后列表框可以知道何时删除项目并可以根据需要删除数据。我的意思是,假设你的列表记录了人,你可以在你的类中添加AddPerson(Person p)和RemovePerson(Person p)方法。 RemovePerson的实现将从列表中删除相应的条目,并删除与其相关的所有数据。因此,不要使用CListBox :: DeleteString删除内容,使用您自己实现的更高级别的API。
答案 3 :(得分:0)
这很简单 - 只需子类化列表框并为LB_DELETESTRING和LB_RESETCONTENT添加消息处理程序
详情请见此处: