我一直在玩列表视图并遇到了这篇文章:如何检测 CListCtrl 选择更改?
但是,那里使用的代码有一个主要流程,它不适用于多项选择(如该线程中所指出的那样)。所以我的问题是如何使代码与多选一起工作(例如,使用 shift 或 ctrl 进行选择)?
我一直在玩列表视图并遇到了这篇文章:如何检测 CListCtrl 选择更改?
但是,那里使用的代码有一个主要流程,它不适用于多项选择(如该线程中所指出的那样)。所以我的问题是如何使代码与多选一起工作(例如,使用 shift 或 ctrl 进行选择)?
我编写了一个方便的函数来查看您的 OnItemChanged 通知是否是由于选择更改:
BOOL IsItemSelChanged(NMLISTVIEW* pNMListView)
{
// call this from your OnItemchangedMyListCtrl function in your dialog class
if(!(pNMListView->uChanged & LVIF_STATE))
{
return(FALSE);
}
if((pNMListView->uOldState & LVIS_SELECTED) == (pNMListView->uNewState & LVIS_SELECTED))
{
return(FALSE);
}
return(TRUE);
}
处理LVN_ITEMCHANGED
和LVN_ODSTATECHANGED
,所有你需要的......
如果列表视图控件具有 LVS_OWNERDATA 样式,并且用户通过按住 SHIFT 键并单击鼠标来选择一系列项目,则不会为每个选定或取消选择的项目发送 LVN_ITEMCHANGED 通知。相反,您将收到一个 LVN_ODSTATECHANGED 通知,指示一系列项目已更改状态。