【发布时间】:2023-03-30 16:43:01
【问题描述】:
在 MFC 对话框中,我使用了带有复选框的 CListCtrl。我想禁用多复选框选择,以便用户一次只能选择一个复选框。实现这一目标的最佳方法是什么。我已经这样做了
void SomeClass::OnClickList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
int nSelectedItemIndex = -1;
nSelectedItemIndex = m_ListCtrl.GetNextItem(-1, LVNI_SELECTED);
int nCount = m_ListCtrl.GetItemCount();
for(int nItem = 0; nItem < nCount; nItem++)
{
m_ListCtrl.SetCheck(nItem,false);
}
if(nSelectedItemIndex != -1)
m_ListCtrl.SetCheck(nSelectedItemIndex,true);
*pResult = 0;
}
不知何故,我认为这种方法不太合适,可以通过其他方式变得更好。欢迎所有建议。
编辑:更新:编写代码后,一切正常,但我面临一个新问题。 在 OnItemChanged 消息处理函数中调用 SetCheck() 函数,它再次调用相同的函数,创建递归。因此选择更改有点慢。如何避免这种情况。请帮忙。 ????
【问题讨论】: