Visual studio C++ MFC之列表控件CListCtrl Control
2017-04-11 15:06
323 查看
背景
本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题。正文
列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以下则描述一些典型应用。列表型控件的创建当然,所有控件均有两种实现方式,一是在对话框模版中直接将控件
List Control拖入对应的窗口上,另一种则是通过
ClistCtrl内的成员函数Creat(..)来创建。本文只记录前者,避免过于繁琐。当然也可以根据
Creat(...)函数的参数来创建,详见第三部分的关于
鸡啄米博客的参考链接。
为了能对添加的列表型控件进行操作,因此需要在对应的属性控件添加变量——在对应的窗口的树形控件右击选择
添加变量,取一个变量名,此处为
m_Devinfolist,至此则由VS自动创建了该控件的控制变量
m_Devinfolist。
在列表型控件上添加元素
获取列表型控件的大小,调用函数GetClientRect function(..),
CRect Rect;m_devinfoList.GetClientRect(&Rect);
为列表型控件定义风格,调用函数SetExtendedStyle(..),
// 参数类型为 DWORD dwNewStyle m_devinfoList.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);dwNewStyle定义的既是列表风格,
LVS_REPORT则代表list风格为列表型——list控件有四种风格;
Icon/
Small Icon/
List/
Report。本例程使用的是
Report类型。
LVS_EX_FULLROWSELECT代表当一列被选择时,该列均会高亮显示。
LVS_EX_GRIDLINES则表示有网格。
为列表型控件添加列,调用函数InsertColumn(..),
/* 参数 1:新创建的列索引,0为起始值; 参数 2:列显示的名称; 参数 3:文字的对齐方式,有LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_CENTER三种选项;当列为第0项的时候,这个参数不起作用。若要其起作用,可以先创建,然后删除它,再重新创建就起作用了。 参数 4:列的宽度,这个时候上一步获得的控件大小的值就起作用了; 参数 5:此列的子项个数,后面会调用InserItem,因此,此处为0。 */m_devinfoList.InsertColumn(0, _T("设备参数名称"), LVCFMT_CENTER, Rect.Width()/5, 0); m_devinfoList.InsertColumn(1, _T("设备参数值"), LVCFMT_LEFT, (Rect.Width()/5)*4, 0);
在树形控件上添加子项,调用函数InsertItem(..),
/*此函数有4个函数原型,此处我调用的函数原型为 int InsertItem(int nItem,LPCTSTR lpszItem ); 参数1:插入Item的索引,0为起始值。这个可以理解为行数。 参数2:插入的Item的名称 */ m_devinfoList.InsertItem(0,_T("Node ID")); m_devinfoList.InsertItem(1,_T("软件版本信息")); m_devinfoList.InsertItem(2,_T("硬件版本信息")); m_devinfoList.InsertItem(3,_T("设备类型")); m_devinfoList.InsertItem(4,_T("")); m_devinfoList.InsertItem(5,_T("设备状态")); m_devinfoList.InsertItem(6,_T("主机输入参数")); m_devinfoList.InsertItem(7,_T("主机输出参数")); m_devinfoList.InsertItem(8,_T("主机输入数据")); m_devinfoList.InsertItem(9,_T("主机输出数据"));此时,即创建出来了一个2列10行的列表,如下图所示:
在第二列下面添加文字,调用函数SetItemText(..),
/*此函数的原型为 BOOL SetItemText(int nItem,int nSubItem,LPCTSTR lpszText ); 参数1:Item的索引,可以理解为哪一行; 参数2:子索引,可以理解为哪一列; 参数3:要设置的文字。 */ m_devinfoList.SetItemText(0, 1, CstrNodeid); m_devinfoList.SetItemText(1, 1, _T("Version 0.0.1")); m_devinfoList.SetItemText(2, 1, _T("Version 0.0.1")); m_devinfoList.SetItemText(3, 1, _T("IO设备")); m_devinfoList.SetItemText(4, 1, _T("")); m_devinfoList.SetItemText(5, 1, _T("初始化状态")); m_devinfoList.SetItemText(6, 1, _T("01 08 02 16")); m_devinfoList.SetItemText(7, 1, _T("03 08 04 16")); m_devinfoList.SetItemText(8, 1, _T("0F 13 32"));最终的效果如下:
单击列表型控件,获取鼠标单击的行数值,并获取对应行对应列的文本。首先在列表型控件上右击添加事件处理程序,消息类型选择
NM_CLICK,类列表选择控件所在的对话框类,生成代码
void CwzCANDeviceExploer001Dlg::OnNMClickdevshowList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); *pResult = 0;// TODO: 在此添加控件通知处理程序代码*pResult = 0; }
在上述代码内调用函数GetNextItem(..)来获取鼠标单击列表型控件的行数,
//该函数的原型为int GetNextItem(int nItem, int nFlags) const;/* 函数功能:从指定的Item(行数)开始搜索符合flag标识条件的行,并返回Item的索引值(行数) 参数1:从哪个Item(行数)开始,-1代表找到第一个符合flag标识条件的Item。 参数2:LVIS_SELECTED代表被选中的Item,还有LVNI_FOCUSED,获取焦点的Item等等。 */int selpos = m_devinfoList.GetNextItem(-1,LVIS_SELECTED);解析
selpos即可知道用户单击的是列表哪一行,接着调用函数GetItemText(..),
// 该函数有两个函数原型,此处我调用的函数原型为CString GetItemText(int nItem, int nSubItem) const;/* 参数1: 哪个Item(哪一行); 参数2: 哪个SubItem(哪一列)。 */Cstring Cstrinfo; Cstrinfo = m_devinfoList.GetItemText(0, 1);至此即可实现单击列表型控件,获取鼠标单击的行数值,并获取对应行对应列的文本。
参考链接:
鸡啄米的博客VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上);鸡啄米的博客VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下);
Msdn帮助文档CListCtrl Class;
至此记录完毕。记录时间:2017-2-22
记录地点:深圳WZ
相关文章推荐
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- 【VS开发】MFC CListCtrl列表控件的消息响应
- C++ MFC combo box和list control控件的使用
- MFC中的列表控件CListCtrl
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- MFC编程入门之二十八(常用控件:列表视图控件List Control上)
- 高级列表控件ListCtrl关联的MFC中的类:CListCtrl
- C++ MFC combo box和list control控件的使用
- MFC List Control 控件添加单元格编辑和单元格下拉列表项
- MFC中的列表控件CListCtrl
- MFC 列表控件CListCtrl详解
- VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)
- MFC中的列表视图控件CListCtrl(转)
- VS2010/MFC编程初识一【ListControl列表视图控件和SliderControl滑块控件的 基本用法】
- C++ 关于MFC List Control 控件的总结
- MFC中的列表控件CListCtrl
- C++控件:ListControl列表控件的使用方法
- C++ MFC Tab Control 控件的一些用法
- MFC列表控件(ListControl)
- VS2013/MFC编程入门之二十八(常用控件:列表视图控件List Control 下)