1

我是 MFC 的新手。我有一个列表控件LVS_EX_CHECKBOXES。我想为列表控件中的选中项目添加删除功能。

到目前为止,我已经编写了一个处理程序代码来从以下位置获取通知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;
}

谁能帮我。我在网上搜索了示例,但找不到任何示例。

4

1 回答 1

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
    }
}
于 2015-12-23T15:27:19.387 回答