具有 LVS_EX_CHECKBOXES 样式的 CListCtrl

Posted

技术标签:

【中文标题】具有 LVS_EX_CHECKBOXES 样式的 CListCtrl【英文标题】:CListCtrl with LVS_EX_CHECKBOXES style 【发布时间】:2013-04-29 08:43:31 【问题描述】:

我正在使用带有 LVS_EX_CHECKBOXES 样式的 CListCtrl。 而且我需要随时选中至少两个复选框。

我该怎么做?

【问题讨论】:

【参考方案1】:

首先您需要捕获LVN_ITEMCHANGING 通知,这最容易通过从CListCtrl 派生您自己的类(例如,称为CMyListCtrl)然后添加如下消息映射条目来完成:

BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
    ON_NOTIFY_REFLECT(LVN_ITEMCHANGING, &CMyListCtrl::OnLvnItemchanging)
END_MESSAGE_MAP()

然后,您可以像这样编写消息处理程序:

void CMyListCtrl::OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult)

    // an item has changed
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    // by default, allow change
    *pResult = 0;

    // see if item was checked or unchecked
    if ((pNMLV->uNewState & 0x2000) == 0x2000)
    
        // item was checked - do anything you like here
    
    else if ((pNMLV->uNewState & 0x1000) == 0x1000)
    
        // item was unchecked - see how many selections we have
        if (/* pseudocode */ number of selected items < 2)
        
            // disallow change
            *pResult = 1;
        
    

条件是伪代码,因此您可以决定如何跟踪选择的数量 - 可以通过向上述方法添加代码来保持计数,或者在其中放置一个循环以获取每个项目的检查状态并统计一下。

我认为这应该足以让您继续前进,所以如果您遇到问题,请更新您的问题。

【讨论】:

以上是关于具有 LVS_EX_CHECKBOXES 样式的 CListCtrl的主要内容,如果未能解决你的问题,请参考以下文章

只需要 CListCtrl 控件中的某些行具有复选框

如何将复选框控件添加到 mfc 中的列表控件子项

MFC - 带有可选复选框的 CListCtrl 行

错误显示“无法获取样式表 (#) 的文本:未找到具有给定 id 的样式表”,这是啥意思?

具有 BigPicture 样式和 BigText 样式的 Android 通知

如何显示具有多种样式的图层图