在列表框删除项目时收到通知
Getting notified when a list box has an item removed?
我使用 CListBox::SetItemData 在我的所有者绘制的 CListBox 派生类中存储指向某些数据的指针,我希望列表框本身跟踪它并在不再需要时释放内存。
为此,我需要在每次删除项目时收到通知(包括LB_RESETCONTENT以及删除项目的所有其他可能情况)。是否有一个或多个事件可以处理来实现这一点?
作为它的主人用一种LBS_OWNERDRAW*
风格绘制的,你可以留意WM_DELETEITEM
;
当列表框或组合框或列表框或 组合框被销毁或当项目被移除时
LB_DELETESTRING
、LB_RESETCONTENT
、CB_DELETESTRING
或CB_RESETCONTENT
消息。系统为每个已删除的内容发送一条WM_DELETEITEM
消息 项目
No. 列表框仅针对用户执行的操作生成通知。 用户无法删除、添加或清空列表框,这只能由您自己的代码完成。 所以这里的哲学是,控件不必告诉你你已经知道的事情。 您可以在修改内容的代码中任意生成自己的消息。 但是,当然,从 CListBox 继承您自己的类并添加您自己的虚拟方法会更好。
由于您已经对列表框进行了子类化,因此"正确"的设计(IMO)是将数据管理功能添加到列表框中,然后它将知道何时删除项目并可以根据需要删除数据。我的意思是,假设您的列表跟踪人员,您将添加AddPerson(Person p)和RemovePerson(Person p)方法到您的类中。RemovePerson 的实现将从列表中删除相应的条目,并删除与之相关的所有数据。因此,不要使用 CListBox::D eleteString 来删除内容,请使用您自己实现的更高级别的 API。
这很容易 - 只需对列表框进行子类化,并为LB_DELETESTRING和LB_RESETCONTENT添加消息处理程序
详情请看这里:
http://www.codeguru.com/cpp/controls/listbox/article.php/c4759/CListBox-with-the-Horizontal-Scroll-Bar-that-Works.htm
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- C++ 从链表中删除项目时出现问题
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 从 QTreeView 中删除项目时取消选择所有行
- 从传递给新线程C++的矢量中删除项目
- 如何创建一个函数,该函数可以从一个qtreewidget中删除项目并将其添加到另一个函数
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看
- 如何在不删除C++集中删除项目?
- CMake 正在删除项目 c++
- 如何从 qmake 中的包含路径中删除项目的根目录
- 从多个 std::vector 中删除项目的最快方法
- 这是从 std::vector 中删除项目的有效方法吗?
- 从C 列表中删除项目
- STD :: MAP-如何查找或添加,然后可以在一次搜索中删除项目
- 使用迭代器从Boost多指数中删除项目时的一致性
- C++从指针数组中删除项目
- 如何设置CMAKE_INTDIR或CMAKE_CFG_INTDIR来删除项目配置
- 如何从std::列表中删除项目
- 尝试从__FILE__中删除项目路径
- 在列表框删除项目时收到通知