CListCtrl列表控件复选框组合使用
CListCtrl列表控件复选框组合使用
功能展示
列表控件经常会与其他控件嵌套使用,如与编辑框组合,与列表框组合,与复选框组合,当前例程实现列表控件与复选框组合使用,效果如图。程序初始化给列表控件添加复选框及默认勾选些复选框,并设置复选框文字,双击复选框可获得复选框状态;
要点提示
列表控件使用复选框可使用其自身的成员函数实现SetExtendedStyle(LVS_EX_CHECKBOXES); 复选框的勾选状态设置可用其自身的成员函数SetCheck(m, bstate); m为子项索引,bstate为勾选选项; 勾选的状态可用函数GetCheck(m)获取,m为子项索引 实现功能 1.新建基于对话框的应用程序 2.拖拽一列表控件,关联变量 CListCtrl m_ctrlList;
3.在程序初始化初始化列表控件 - //设置列表控件的报表显示方式
- m_ctrlList.ModifyStyle(LVS_ICON | LVS_SMALLICON | LVS_LIST, LVS_REPORT);
- //设置列表控件使用复选框
- m_ctrlList.SetExtendedStyle(LVS_EX_CHECKBOXES);
- //在列表控件中插入列
- for (int n = 0; n < 4; n++)
- {
- CString strColumnHeading = _T("");
- strColumnHeading.Format(_T("Column %d"), n);
- m_ctrlList.InsertColumn(n, strColumnHeading, LVCFMT_LEFT, 100);
- }
- //在列表控件中插入行
- for (int m = 0; m < 10; m++)
- {
- m_ctrlList.InsertItem(m, _T(""));
- m_ctrlList.SetCheck(m, m%2);//隔行勾选
- for (int n = 1; n < 4; n++)
- {
- CString strText = _T("");
- strText.Format(_T("SubItem %d %d"), m, n);
- m_ctrlList.SetItemText(m, n, strText);
- }
- }
复制代码
4.添加列表控件LVN_ITEMCHANGED消息的处理函数,实现复选框子项的状态切换; - void CGkbc8Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- if (pNMListView->uOldState == 0 && pNMListView->uNewState == 0)//都没状态就不是复选框
- return;
- if( m_ctrlList.GetCheck(pNMListView->iItem) )
- m_ctrlList.SetItemText(pNMListView->iItem, pNMListView->iSubItem, _T("FALSE"));
- else
- m_ctrlList.SetItemText(pNMListView->iItem, pNMListView->iSubItem, _T("TRUE"));
- *pResult = 0;
- }
复制代码5.添加列表控件NM_DBLCLK消息处理函数,实现双击子项时获取子项复选框的状态 - void CGkbc8Dlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- if(pNMListView->iItem == -1)
- return;
- CString sText;
- if( m_ctrlList.GetCheck(pNMListView->iItem) )
- sText.Format("第%d行已勾选",pNMListView->iItem);
- else
- sText.Format("第%d行未勾选",pNMListView->iItem);
- MessageBox(sText);
- }
复制代码 如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|