CListCtrl控件的标题栏添加checkbox
来源:互联网 发布:淘宝联盟店铺活动推广 编辑:程序博客网 时间:2024/05/22 01:27
CListCtrl控件的标题栏添加checkbox
CListCtrl控件添加checkbox很容易,直接设置CListCtrl的风格就可以了。但是在标题栏也添加checkbox,实现全选和全不选,貌似都只能采取自绘的形式。具体步骤介绍如下。
1创建CListCtrl控件,并设置其风格为checkbox;
至于怎么添加CListCtrl我这里就不介绍了,网上很资料很多,我只介绍使用checkbox这部分。首先设置CListCtrl的风格,让每一列最前面出现勾选框。
(注:本文使用的CListCtrl的申明为:CListCtrl m_searchresultlist; )
m_searchresultlist.SetExtendedStyle(m_searchresultlist.GetExtendedStyle()|LVS_EX_CHECKBOXES);
2为标题栏添加一个checkbox
首先要添加checkbox的BMP资源文件,在对话框初始化创建一个包含这个bitmap的image list ,然后将这个imagelist添加到标题栏。
checkboxe.bmp
BOOL DataSearchDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when theapplication's main window is not a dialog
SetIcon(m_hIcon,TRUE); //Set big icon
SetIcon(m_hIcon,FALSE); //Set small icon
// TODO: Add extra initialization here
CRect rect;
//获取文件显示列表位置和大小
m_searchresultlist.GetClientRect(&rect);
//列表空间添加checkbox风格
m_searchresultlist.SetExtendedStyle(m_searchresultlist.GetExtendedStyle()|LVS_EX_CHECKBOXES);
//为视图表添加列
m_searchresultlist.InsertColumn(0,_T("文件名"),LVCFMT_CENTER,rect.Width()/3,0);
//在表头上添加checkbox
/*CHeaderCtrl* */pHeadCtrl =m_searchresultlist.GetHeaderCtrl();
ASSERT(pHeadCtrl->GetSafeHwnd());
VERIFY(m_checkImgList.Create(IDB_CHECKBOXES, 16, 3, RGB(255,0,255)));
int i = m_checkImgList.GetImageCount();
pHeadCtrl->SetImageList(&m_checkImgList);
HDITEMhdItem;
hdItem.mask= HDI_IMAGE | HDI_FORMAT;
VERIFY(pHeadCtrl->GetItem(0, &hdItem) );
hdItem.iImage= 1;
hdItem.fmt|= HDF_IMAGE;
VERIFY( pHeadCtrl->SetItem(0, &hdItem) );
return TRUE; // return TRUE unless you set the focus to a control
}
3添加点击表头的消息响应函数
ON_NOTIFY(HDN_ITEMCLICK,0, &DataSearchDlg::OnItemclickList);
设置标题栏checkbox显示状态,和列表的checkbox全选或全不选
void DataSearchDlg::OnItemclickList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADERphdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
// TODO: Add your control notification handler code here
int nItem =phdr->iItem;
if (0 != nItem)
return;
HDITEMhdItem;
hdItem.mask= HDI_IMAGE | HDI_FORMAT;
pHeadCtrl =m_searchresultlist.GetHeaderCtrl();
ASSERT(pHeadCtrl->GetSafeHwnd());
VERIFY(pHeadCtrl->GetItem(nItem, &hdItem) );
if (hdItem.iImage == 1)
hdItem.iImage = 2;
else
hdItem.iImage = 1;
VERIFY(pHeadCtrl->SetItem(nItem, &hdItem) );
BOOL bl =hdItem.iImage == 2 ? TRUE : FALSE;
int nCount = m_searchresultlist.GetItemCount();
for(nItem = 0; nItem < nCount; nItem++)
{
ListView_SetCheckState(m_searchresultlist.GetSafeHwnd(), nItem, bl);
}
*pResult =0;
}
4 添加列表项目变化响应函数
ON_NOTIFY(LVN_ITEMCHANGED,IDC_LIST1, &DataSearchDlg::OnItemchangedList)
根据列表checkbox的状态显示标题栏checkbox,如果每列的checkbox都选中则调整标题栏的checkbox也选中
void DataSearchDlg::OnItemchangedList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEWpNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: Add your control notification handler code here
if (LVIF_STATE== pNMLV->uChanged)
{
BOOLblAllChecked = TRUE;
int nCount =m_searchresultlist.GetItemCount();
for(int nItem = 0;nItem < nCount; nItem++)
{
if (!ListView_GetCheckState(m_searchresultlist.GetSafeHwnd(), nItem) )
{
blAllChecked = FALSE;
break;
}
}
HDITEMhdItem;
hdItem.mask = HDI_IMAGE;
if (blAllChecked)
hdItem.iImage = 2;
else
hdItem.iImage = 1;
pHeadCtrl= m_searchresultlist.GetHeaderCtrl();
ASSERT(pHeadCtrl->GetSafeHwnd());
VERIFY(pHeadCtrl->SetItem(0, &hdItem) );
}
*pResult =0;
}
效果展示如下:
- CListCtrl控件的标题栏添加checkbox
- CListCtrl控件的标题栏添加checkbox
- CListCtrl控件(4)重绘CListCtrl控件的标题栏
- 列表标题栏添加CheckBox
- CListCtrl的checkbox操作
- 修改 CListCtrl 的标题栏颜色;重写 CListCtrl 标题栏
- 标题栏添加控件
- CListCtrl 控件添加复选框
- 为DataGrid添加CheckBox控件的例子
- Gridview添加Checkbox控件的使用
- MFC CView中添加CListCtrl控件的方法
- VC的CListCtrl控件
- VC的CListCtrl控件
- VC的CListCtrl控件
- VC的CListCtrl控件
- VC的CListCtrl控件
- VC的CListCtrl控件
- VC的CListCtrl控件
- 交大OJ 1760 Higher Mathematics
- 【PLSQL】 定义record记录
- linux-gcc 编译时头文件和库文件搜索路径
- 嵌入式Linux操作系统的版本查询
- JS判断用户浏览设备是移动设备还是PC机
- CListCtrl控件的标题栏添加checkbox
- leetCode :Validate Binary Search Tree
- linux系统中各个路由表的研究
- Ansible@一个高效的配置管理工具--Ansible configure management--翻译(四)
- 下载破解ZendStudio 10.5
- G - Specialized Four-Digit Numbers(1.5.2)
- opencv 2.x学习笔记(十)随机数发生器、绘制文字
- 说一说struts2 验证框架使用过程中遇到的问题
- php多表连接mysql数据库,输出相同的字段名