1

我一直在玩列表视图并遇到了这篇文章:如何检测 CListCtrl 选择更改?

但是,那里使用的代码有一个主要流程,它不适用于多项选择(如该线程中所指出的那样)。所以我的问题是如何使代码与多选一起工作(例如,使用 shift 或 ctrl 进行选择)?

4

2 回答 2

0

我编写了一个方便的函数来查看您的 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);
}
于 2012-06-01T22:59:44.967 回答
0

处理LVN_ITEMCHANGEDLVN_ODSTATECHANGED,所有你需要的......

如果列表视图控件具有 LVS_OWNERDATA 样式,并且用户通过按住 SHIFT 键并单击鼠标来选择一系列项目,则不会为每个选定或取消选择的项目发送 LVN_ITEMCHANGED 通知。相反,您将收到一个 LVN_ODSTATECHANGED 通知,指示一系列项目已更改状态。

于 2021-08-20T01:43:40.750 回答