2
  1. スクリーンショットをご覧ください(サンプルです)
  2. 最初の列は「名前」、2番目の列は「ステータス」の2列のリストビューがあります
  3. 2列目の電球をクリックすると、ステータスが「オン」と「オフ」の間で変更されます
  4. 現在、複数選択機能を実装する必要があります。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) {......}

スクリーンショットのサンプル

4

1 に答える 1