我是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;
}
任何人都可以帮助我。我在网上搜索了一些例子但我找不到任何例子。
答案 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
}
}