MFC如何让ListCtrl的CheckBox只有一个处于选中状态

Posted swust_wjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC如何让ListCtrl的CheckBox只有一个处于选中状态相关的知识,希望对你有一定的参考价值。

1、
  要让ListCtrl的每一行的第一列为CheckBox,需要做如下设置:
  listCtrl.SetExtendedStyle(m_listCtrl.GetExtendedStyle()|LVS_EX_CHECKBOXES); 


2、 
 为了限制ListCtrl只能有一行的CheckBox处于选中状态,则需要:
 响应ListCtrl的 LVN_ITEMCHANGED 消息:
 例如:
 ON_NOTIFY(LVN_ITEMCHANGED, IDC_LC_CONFIG, OnLvnItemchangedLcConfig)


void CRestorePage::OnLvnItemchangedLcConfig(NMHDR *pNMHDR, LRESULT *pResult)

 LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

 if(m_LcConfig.GetCheck(pNMLV->iItem))                                                             //m_LcConfig是你的ListCtrl控件变量
  UnCheckOtherItem(m_LcConfig, pNMLV->iItem);
 *pResult = 0;



其中UnCheckOtherItem(...)的代码如下
void CRestorePage::UnCheckOtherItem(CListCtrl& listCtrl, int index)

 for (int i=0;i<listCtrl.GetItemCount();++i)
 
  if(i == index)
   continue;
  listCtrl.SetCheck(i,FALSE);
 

以上是关于MFC如何让ListCtrl的CheckBox只有一个处于选中状态的主要内容,如果未能解决你的问题,请参考以下文章

MFC ListControl使用方法

在mfc中,如何在listctrl中动态显示数据?

MFC ListCtrl如何查找某一行的上一行或者下一行

如何在 SDI 中使用 MFC CListCtrl

在MFC中使用listctrl控件,要修改某行某列的值

vc mfc 中的listctrl控件 垂直滚动条置于最底端