- 请看屏幕截图(这是一个示例)
- 我有一个包含 2 列的列表视图,第一列是“名称”,第二列是“状态”
- 当我单击第二列中的灯泡时,它将在状态“开”和“关”之间切换
- 目前,我需要实现一个多选功能。就是用ctrl或者shift选择多行,然后点击其中任意一个“灯泡”,切换所有选中项的状态。
问题是:
当我单击“灯泡”时,选择的多重将丢失。这意味着当我使用 API GetSelectedCount 时,它将返回 0。
我的调查:
当我点击“灯泡”时,将触发关于项目更改的事件。并且 OnItemChanged 事件将在 OnClick 事件之前触发(这就是 API GetSelectedCount 将在事件 OnClock 中返回 0 的原因)。我想在事件 OnItemChanged 中缓存多选项目,但我失败了,因为每个项目都会触发一次 OnItemChanged 事件。
例如:如果我在列表视图中多选了 3 个项目,然后单击第 3 个项目的“灯泡”,则会触发 3 次 OnItemChanged 事件,以通知这 3 个项目未被选中。所以,在(点击灯泡)的OnClick事件中,我不知道在之前的操作中选择了哪些项目。
此外,单击“灯泡”后,我仍然想保留多选。
任何帮助都感激不尽?
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemChanged)
ON_NOTIFY_REFLECT_EX(NM_CLICK, OnClick)
void CListCtrl::OnItemChanged(NMHDR* pNMHDR, LRESULT* pResult) {......}
BOOL CListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) {......}