使用扩展样式LVS_EX_CHECKBOXES删除listcontrol中的已检查项目

时间:2015-12-23 11:29:36

标签: mfc listcontrol

我是MFC的新手。我有LVS_EX_CHECKBOXES的listcontrol。我想为listcontrol中的已检查项添加删除功能。

到目前为止,我已经编写了一个处理程序代码来获取CListCtrl的通知:

void CAppDlg::OnListItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMLISTVIEW pLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    if (pLV->uNewState) // item checked
    {
        //delete functionality 
    }

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

任何人都可以帮助我。我在网上搜索了一些例子但我找不到任何例子。

1 个答案:

答案 0 :(得分:0)

以下是确定项目检查状态是否已更改的正确方法:

void CAttrSelectorDlg::OnLvnItemchangedAttrList(NMHDR* pNMHDR, LRESULT *pResult)
{   
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

    int nItem = pNMLV->iItem;

    // get old check box state
    BOOL bPrevState = ( BOOL ) ( ( ( pNMLV->uOldState & LVIS_STATEIMAGEMASK ) >> 12 ) - 1 );
    if ( bPrevState < 0 )   // On startup there's no previous state
        bPrevState = FALSE;  // assing as false (unchecked)

    // get new check box state
    BOOL bNewState = ( BOOL ) ( ( ( pNMLV->uNewState & LVIS_STATEIMAGEMASK ) >> 12 ) - 1 );
    if ( bNewState < 0 )   // non-check box notification
        bNewState = FALSE;

    if (bPrevState != bNewState)
    {
        // state changed. DO STUFF
    }
    *pResult = 0;
}

对于您的任务,我建议您使用删除按钮删除所选(已选中)的项目:

for (int i=0; i<m_AttrList.GetItemCount(); i++)
{
    BOOL bCheck = m_AttrList.GetCheck(i);
    if (bCheck)
    {
        // item is checked
    }
}