是否有与LBN_SELCHANGE
相同的事件,但对于列表视图?
答案 0 :(得分:3)
使用LVN_ODSTATECHANGED
进行活动。
event参数是指向类型NMLVODSTATECHANGED
的结构的指针。使用uNewState
和uOldState
位字段来确定哪些是选择更改(因为还有其他更改)。您正在寻找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
}