- スクリーンショットをご覧ください(サンプルです)
- 最初の列は「名前」、2番目の列は「ステータス」の2列のリストビューがあります
- 2列目の電球をクリックすると、ステータスが「オン」と「オフ」の間で変更されます
- 現在、複数選択機能を実装する必要があります。ctrl または shift を使用して複数の行を選択し、それらのいずれかの「電球」をクリックして、選択したすべてのアイテムのステータスを切り替えます。
問題は:
「電球」をクリックすると、選択したマルチが失われます。API GetSelectedCount を使用すると、0 が返されることを意味します。
私の調査:
「電球」をクリックすると、アイテム変更に関するイベントがトリガーされます。OnItemChanged イベントは OnClick イベントの前にトリガーされます (そのため、API GetSelectedCount はイベント OnClock で 0 を返します)。イベント OnItemChanged で複数選択されたアイテムをキャッシュしたかったのですが、すべてのアイテムが OnItemChanged イベントを 1 回トリガーするため失敗しました。
例: リスト ビューで 3 つの項目を複数選択し、3 番目の項目の「電球」をクリックすると、イベント OnItemChanged が 3 回トリガーされ、3 つの項目が選択解除されたことを通知します。そのため、(電球をクリック) の OnClick イベントでは、以前の操作でどの項目が選択されていたのかわかりません。
さらに、「電球」をクリックした後も複数選択を維持したいです。
どんな助けでも大歓迎ですか?
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemChanged)
ON_NOTIFY_REFLECT_EX(NM_CLICK, オンクリック)
void CListCtrl::OnItemChanged( NMHDR* pNMHDR, LRESULT* pResult ) {......}
BOOL CListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult) {......}