【MFC 学习笔记】CheckListBox
ListBox是MFC中文本列表控件,CheckListBox是继承了ListBox的MFC中自带的一种控件,和ListBox的区别就是在每条文本前面有一个选择框。
1. 设置
如果是需要复选,那么需要设置一下。到你的对话框界面,在ListBox的属性上设置:
Owner Draw - Fixed,
Has Strings - True。
2. 添加变量
自己添加的是ListBox的变量,而后自己将CListBox改成CCheckedBox。
3. 加入项
m_checklist.AddString(_T("Monday"));
m_checklist.AddString(_T("Tuesday"));
m_checklist.AddString(_T("Wednesday"));
m_checklist.AddString(_T("Thusday"));
m_checklist.AddString(_T("Friday"));
m_checklist.AddString(_T("Saturday"));
m_checklist.AddString(_T("Sunday"));
加入这些项的结果截图:
4. 当前选择
要知道用户当前选择可以使用消息响应:LBN_SELCHANGE来随时跟踪选择。
要知道当前的选择可以使用函数GetCurSel()
void CDlgCheckList::OnLbnSelchangeList()
{
curSel = m_checklist.GetCurSel();
CString curSel_str;
curSel_str.Format("Current Select: %d",curSel);
m_edit_show.SetWindowTextA(curSel_str);
}
结果:
5. 不自动排列
使用函数AddString的时候,列表默认的是自动排列的,要取消排列只需要在属性-->sort-->false即可
m_checklist.AddString(_T("Friday"));
m_checklist.AddString(_T("Saturday"));
m_checklist.AddString(_T("Sunday"));
m_checklist.AddString(_T("Monday"));
m_checklist.AddString(_T("Tuesday"));
m_checklist.AddString(_T("Wednesday"));
m_checklist.AddString(_T("Thusday"));
结果:
6. 获得选择
获得选择可以使用GetCheck函数得到,该函数返回的是int值的
BST_CHECKED:The check box is checked.
BST_UNCHECKED:The check box is not checked.
BST_INDETERMINATE:The check box state is indeterminate.
void CDlgCheckList::OnBnClickedGetSel()
{
CString selItems;
for(int i = 0 ; i < m_checklist.GetCount() ; i++)
{
if(m_checklist.GetCheck(i))
selItems.Format("%s,%d",selItems,i);
}
m_edit_show.SetWindowTextA(selItems);
}
结果:
7. 设置选择
与前面方法类似,使用函数setCheck,第一个参数是需设置的Item的序号,第二个参数是需设置的Item的值,使用上面列出的int值进行赋值
void CDlgCheckList::OnBnClickedSelAll()
{
for(int i = 0; i < m_checklist.GetCount(); i++)
{
m_checklist.SetCheck(i,BST_CHECKED);
}
}
结果: