Есть ли событие изменения выбора для элемента управления списком? - PullRequest
4 голосов
/ 23 января 2009

Есть ли событие, эквивалентное LBN_SELCHANGE, но для просмотра списка?

Ответы [ 4 ]

3 голосов
/ 23 января 2009

Используйте LVN_ODSTATECHANGED для события.

Параметр события является указателем на структуру типа NMLVODSTATECHANGED. Используйте битовые поля uNewState и uOldState, чтобы определить, какие из них являются изменениями выбора (поскольку есть и другие изменения). Вы ищете флаг LVIS_SELECTED.

2 голосов
/ 04 октября 2015

Используйте LVN_ITEMCHANGED код уведомления.

NOTIFY_HANDLER(IDC_FILELIST, LVN_ITEMCHANGED, OnListViewItemChanged)

LRESULT CMainDlg::OnListViewItemChanged(int, LPNMHDR hdr, BOOL&) {
    NMLISTVIEW* lpStateChange = reinterpret_cast<NMLISTVIEW*>(hdr);
    if ((lpStateChange->uNewState ^  lpStateChange->uOldState) & LVIS_SELECTED) {
        // Do something
    }
    return 0;
}
1 голос
/ 31 января 2011

Но не доверяйте ListView_GetSelectionMark () в этом обработчике событий - получите выбранный элемент с помощью

ListView_GetNextItem(list_hwnd, -1, LVNI_SELECTED);

0 голосов
/ 23 января 2009
 case WM_NOTIFY:
  NMLISTVIEW *VAL_notify = (NMLISTVIEW*)VII_lParam;
  if(VAL_notify->hdr.code == LVN_ITEMCHANGED && VAL_notify->hdr.idFrom == IDC_SOMECONTROL  && (VAL_notify->uNewState & LVIS_SELECTED))
      {
      // Use VAL_notify->iItem as the new selected item
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...