列表视图控件是否有选择更改事件?

时间:2009-01-23 14:41:41

标签: c winapi listview

是否有与LBN_SELCHANGE相同的事件,但对于列表视图?

4 个答案:

答案 0 :(得分:3)

使用LVN_ODSTATECHANGED进行活动。

event参数是指向类型NMLVODSTATECHANGED的结构的指针。使用uNewStateuOldState位字段来确定哪些是选择更改(因为还有其他更改)。您正在寻找LVIS_SELECTED标志。

答案 1 :(得分:2)

使用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;
}

答案 2 :(得分:1)

但是不要信任此事件处理程序中的ListView_GetSelectionMark() - 使用

获取所选项目

ListView_GetNextItem(list_hwnd, -1, LVNI_SELECTED);

答案 3 :(得分:0)

 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
      }