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 に答える