[置顶] CListCtrl控件列表项和列表头图标的显示
2017-09-19 14:19
661 查看
1、为CListCtrl控件绑定一个控件变量:m_List。
2、插入三个ICON作为列表项的图标显示,ID分别为:IDI_ICON1、IDI_ICON2、IDI_ICON3。插入两个Bitmap作为列表头图标的显示图标,ID分别为:IDB_BITMAP1、IDB_BITMAP2。
3、基本步骤都是:1、Create创建图像列表; 2、向图像列表里添加多个图标; 3、将CImageList对象绑定到CListCtrl控件或是CHeaderCtrl控件中; 4、插入列表项时,根据图标的索引插入图标。
具体代码:
首先变量声明:
其次,初始化函数中显示列表项图标,并对列表头图标进行一些初始化操作:
对于列表头图标进行显示,还需为控件添加LVN_COLUMNCLICK消息:
2、插入三个ICON作为列表项的图标显示,ID分别为:IDI_ICON1、IDI_ICON2、IDI_ICON3。插入两个Bitmap作为列表头图标的显示图标,ID分别为:IDB_BITMAP1、IDB_BITMAP2。
3、基本步骤都是:1、Create创建图像列表; 2、向图像列表里添加多个图标; 3、将CImageList对象绑定到CListCtrl控件或是CHeaderCtrl控件中; 4、插入列表项时,根据图标的索引插入图标。
具体代码:
首先变量声明:
public: CListCtrl m_List; CImageList m_imagelist;//定义列表项的图标列表 CImageList m_hbmpList;//定义列表头的图标列表 int m_nCol; //当前带有图标列表头的索引 BOOL m_bOrder; //根据true和false选择图标进行显示 afx_msg void OnColumnclickList(NMHDR *pNMHDR, LRESULT *pResult); };
其次,初始化函数中显示列表项图标,并对列表头图标进行一些初始化操作:
BOOL C列表项和列表头图标添加Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); //......省略其它自动生成的代码 //初始化List控件表头 m_List.InsertColumn(0,"第一列",LVCFMT_CENTER,170,-1); m_List.InsertColumn(1,"第二列",LVCFMT_CENTER,170,-1); m_List.InsertColumn(2,"第三列",LVCFMT_CENTER,170,-1); m_List.SetExtendedStyle(m_List.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); //第一步:Create创建图像列表 m_imagelist.Create(16,16,ILC_COLOR32|ILC_MASK,3,3); //第二步:向图像列表里添加多个图标 m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3)); //第三步:将CImageList对象绑定到CListCtrl控件中 m_List.SetImageList(&m_imagelist,LVSIL_SMALL); //第四步,插入列表项时,根据图标的索引插入图标 int nCount = m_List.GetItemCount(); m_List.InsertItem(nCount,"北京",nCount); m_List.SetItemText(nCount,1,"上海"); m_List.SetItemText(nCount,2,"广州"); nCount = m_List.GetItemCount(); m_List.InsertItem(nCount,"深圳",nCount); m_List.SetItemText(nCount,1,"天津"); m_List.SetItemText(nCount,2,"武汉"); nCount = m_List.GetItemCount(); m_List.InsertItem(nCount,"杭州",nCount); m_List.SetItemText(nCount,1,"南京"); m_List.SetItemText(nCount,2,"成都"); /*====================================================*/ //第一步:Create创建图像列表 m_hbmpList.Create(16,16,ILC_COLOR32|ILC_MASK,2,2); //第二步:加载两个位图 CBitmap b1,b2; b1.LoadBitmap(IDB_BITMAP1); b2.LoadBitmap(IDB_BITMAP2); //第三步:将加载的位图添加到图像列表中,透明色指定白色 m_hbmpList.Add(&b1,RGB(255,255,255)); m_hbmpList.Add(&b2,RGB(255,255,255)); //第四步:将CImageList对象绑定到CHeaderCtrl控件中 CHeaderCtrl* pHeader = m_List.GetHeaderCtrl(); pHeader->SetImageList(&m_hbmpList); m_nCol = -1;//初始时没有列表头带有图标 m_bOrder = FALSE; return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
对于列表头图标进行显示,还需为控件添加LVN_COLUMNCLICK消息:
//单击列表标题的响应函数 void C列表项和列表头图标添加Dlg::OnColumnclickList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); NM_LISTVIEW* pList = (NM_LISTVIEW*)pNMHDR; int nCol = pList->iSubItem;//点击的是哪个子列,索引从0开始 int nImageIndex = 0; CHeaderCtrl* pHeader = m_List.GetHeaderCtrl(); HDITEM hDi = {HDI_FORMAT|HDI_IMAGE}; if (nCol != m_nCol) { if (m_nCol > -1)//单击不同列时删除旧图标 { pHeader->GetItem(m_nCol,&hDi); hDi.fmt &= ~HDF_IMAGE; pHeader->SetItem(m_nCol,&hDi); } //显示新图标 m_nCol = nCol; pHeader->GetItem(m_nCol,&hDi); hDi.fmt |= HDF_IMAGE; hDi.iImage = 0; pHeader->SetItem(m_nCol,&hDi); } else//否则单击相同列,取反显示 { m_bOrder = !m_bOrder; nImageIndex = (m_bOrder == FALSE ? 0:1); pHeader->GetItem(nCol,&hDi); hDi.fmt |= HDF_IMAGE; hDi.iImage = nImageIndex; pHeader->SetItem(nCol,&hDi); } *pResult = 0; }
相关文章推荐
- LVITEM 列表视图控件(List Control) 显示图标
- 在列表控件中显示文件图标与类型
- CListCtrl控件图标显示和动态更换实现
- 百度地图添加自定义Marker+显示覆盖层次优先级+自定义图标+自定义图标文字+图标跳的+自定义信息窗口+按键切换地图样式+滚轮控件
- iOS- 显示数据列表最常用的一个控件UITableView
- 如何基于MFC的CListCtrl实现虚拟列表控件
- VC CListCtrl 图标不显示的问题
- jquery一款点击图标伸缩式显示操作区的控件
- 安卓控件使用系列35:ListView列表控件显示表单的使用方法2
- iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
- CListctrl 获取指定列表的图标序号
- 不让自己的应用程序在桌面的图标列表里启动显示的方法
- 关于CListCtrl控件中无法显示新插入列的问题
- 平滑,3D,iTunes风格的 图像列表控件CListCtrl-CAlbumCtrl类
- CListCtrl列表控件---总结
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- VC中给列表控件CListCtrl添加复选框
- VC获取Excel所有工作表名,并将其显示到一个CListCtrl控件中
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理