How to detect a CListCtrl selection change?

前端 未结 4 780
囚心锁ツ
囚心锁ツ 2020-12-10 10:33

I want to execute some code when the user selects a row in a CListCtrl (report view, I don\'t care about the other viewing modes).

How do I catch this event? is the

4条回答
  •  独厮守ぢ
    2020-12-10 10:58

    There are a few notifications based on what's happening.

    If you are selecting an item and nothing is selected yet, you will get one LVIF_STATE change notification: uNewState & LVIS_SELECTED. The newly selected item will be found at:

    pNMListView->iItem
    

    If an item is selected before you select a new object, you'll get three state changes:

    First you will be informed that the previous item in focus is losing focus:

    pNMListView->uOldState & LVIS_FOCUSED
    

    Then you will be notified that the old item is being unselected:

    pNMListView->uOldState & LVIS_SELECTED
    

    Finally, you will get the new item selection state:

    pNMListView->uNewState & LVIS_SELECTED
    

    (again look at iItem for newly selected item)

    So the pitfall we ran across is that, because item deselection results in two notifications, we were doing a lot of repetitive, sometimes detrimental, processing. What we ended up doing was only doing this processing for the 2nd message (pNMListView->uOldState & LVIS_SELECTED), and skipping the same processing after the loss of focus notification.

提交回复
热议问题