VC驿站

查看: 634|回复: 19

《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

[复制链接]
51_avatar_middle
online_admins 发表于 2018-11-24 01:19:37 | 显示全部楼层 |阅读模式
1、控件简介:
ListCtrl 高级列表控件也是我们平时编程过程中很常用的一个控件,一般涉及到报表展示、记录展示之类的,都需要ListCtrl 高级列表控件。例如:任务管理器啊,文件列表啊,等等都是ListCtrl 高级列表控件来实现的。

2、控件的风格样式:
LVS_ICON: 为每个item显示大图标
LVS_SMALLICON: 为每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料

直观的理解:Windows资源管理器,“查看” 标签下的 “大图标,小图标,列表,详细资料”
具体可以通过代码指定控件的风格样式,也可以方便点,从控件的属性中直接修改:
对应控件的 View 属性:Icon、Small Icon、List、Report 四项。
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

大家看到了吧,主要就是针对这四种风格样式!
比较常用的还是第四种:报表样式!

3、动态设定 ListCtrl 的风格样式:
①、拖动ListCtrl控件到对话框界面上面;
②、绑定CListCtrl类型的控件类型变量:m_List;
③、样式设定:
  1. LONG lStyle = 0;
  2. lStyle = GetWindowLong(m_List.GetSafeHwnd(), GWL_STYLE);//获取当前窗口样式
  3. lStyle &= ~LVS_TYPEMASK; //清除显示掩码
  4. lStyle |= LVS_REPORT; //设置报表样式
  5. SetWindowLong(m_List.GetSafeHwnd(), GWL_STYLE, lStyle);//设置新样式
复制代码


我们教程中重点讲解 LVS_REPORT 报表样式的 ListCtrl,其他风格,大家课后自行研究吧,网上也有不少这方面的文章!

4、动态设定 ListCtrl 的扩展风格:
  1. DWORD dwStyle = m_List.GetExtendedStyle();
  2. dwStyle |= LVS_EX_FULLROWSELECT;    //选中某行使整行高亮(只适用于Report风格)
  3. dwStyle |= LVS_EX_GRIDLINES;        //网格线(只适用于Report风格)
  4. dwStyle |= LVS_EX_CHECKBOXES;       //item 前生成 CheckBox 复选框
  5. //dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES;
  6. m_List.SetExtendedStyle(dwStyle); //设置扩展风格
复制代码

《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

5、插入列信息:
使用 InsertColumn 插入列信息:
  1. m_List.InsertColumn(0, _T("列1"), LVCFMT_LEFT, 50);
  2. m_List.InsertColumn(1, _T("列2"), LVCFMT_LEFT, 50);
  3. m_List.InsertColumn(2, _T("列3"), LVCFMT_LEFT, 50);
复制代码

《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

InsertColumn 各个参数的讲解,详见视频教程!

6、插入行信息:
  1. m_List.InsertItem(m_List.GetItemCount(), _T("111"));
  2. m_List.InsertItem(m_List.GetItemCount(), _T("222"));
  3. m_List.InsertItem(m_List.GetItemCount(), _T("333"));
复制代码

《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

InsertItem 各个参数的讲解,详见视频教程!

7、设置行文本信息:
  1. m_List.SetItemText(0, 1, _T("aaa"));
  2. m_List.SetItemText(0, 2, _T("bbb"));
  3. m_List.SetItemText(1, 1, _T("ccc"));
  4. m_List.SetItemText(1, 2, _T("ddd"));
复制代码


《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

8、选中和取消选中一行:
int nIndex = 0;
  1. //选中
  2. m_List.SetFocus(); //这句别忘了,不然不能高亮
  3. m_List.SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
复制代码

  1. //取消选中
  2. m_List.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);
复制代码


9、遍历控件的所有行条目:
  1. int nCount = m_List.GetItemCount();
  2. for (int idx = 0; idx < nCount; ++idx)
  3. {
  4.     CString strText = m_List.GetItemText(idx, 0);
  5.     strText = m_List.GetItemText(idx, 1);
  6.     strText = m_List.GetItemText(idx, 2);
  7. }
复制代码


10、遍历获得当前选中的行:
  1. POSITION pos = m_List.GetFirstSelectedItemPosition();
  2. while (pos)
  3. {
  4.     int nItem = m_List.GetNextSelectedItem(pos);
  5. }
复制代码


大家课后找资料,看看如何能根据第9点的遍历方式,获得当前选中的行号!

11、遍历获得当前CheckBox选中的行:
  1. int nCount = m_List.GetItemCount();
  2. for (int idx = 0; idx < nCount; ++idx)
  3. {
  4.     BOOL bCheck = m_List.GetCheck(idx);
  5.     if (bCheck)
  6.     {
  7.         CString strText;
  8.         strText.Format(_T("第%d行被勾选了!"), idx);
  9.         MessageBox(strText);
  10.     }
  11. }
复制代码


12、删除行:
删除指定的行:m_List.DeleteItem(1);
删除所有的行:m_List.DeleteAllItems();
大家课后试试:如果我想删除列表控件中索引为0和2的行,怎么删除呢?大家试试
用for循环的话,如何来写代码呢?大家课后试试!

13、编辑指定的行文本:(其实这个跟之前讲解的TreeCtrl很像)
①、将ListCtrl控件的 Edit Labels 设置为 True;
②、响应ListCtrl控件的 LVN_BEGINLABELEDIT 和 LVN_ENDLABELEDIT
③、在 LVN_ENDLABELEDIT 响应函数中加入:
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
m_List.SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, pDispInfo->item.pszText);
备注:这里只能编辑(索引为0的)第1列的文本,其他列的没办法编辑,要想编辑也不是不能,就得自己来搞了!
其实有很多写好的开源控件类,大家直接拿过来用就可以了,多了很多功能。

14、插入图标:跟树形控件 TreeCtrl 的用法基本一致,算是给大家留一个小作业了,自己搞定吧!

15、开源控件类:

https://www.codeproject.com/Arti ... ontrol-with-subitem
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... that-allows-other-c
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... l-and-Grouping-Rows
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... er-listview-control
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... ewer-using-ListCtrl
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... ient-version-of-rep
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Articles/3495/Registry-List-Control
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... operty-List-Control
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... it-individual-cells
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... i-line-List-Control
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... -Based-on-CListCtrl
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

https://www.codeproject.com/Arti ... istCtrl-Give-user-a
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

16、再来个小作业:
如何让CListCtrl选中行始终保持其蓝色高亮状态,即使在失去焦点的时候?

具体操作细节见视频教程的演示和讲解!

第16课免费试看,下载地址回复后可见:
游客,如果您要查看本帖隐藏内容请回复

#######################################################
获得所有教学视频、课件、源代码以及售后答疑请咨询客服QQ:
VC驿站官方客服QQ:8260671
#######################################################




上一篇:《实用VC编程之玩转控件》第15课:Tree树形控件
下一篇:VC中的控件ID命名后,再次修改怎么把上次的命名删除

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

98_avatar_middle
在线会员 发表于 2018-11-24 10:11:46 | 显示全部楼层
继续学习

楼主辛苦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
在线会员 发表于 2018-11-24 12:37:56 | 显示全部楼层
又有更新太好啦,谢谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

69_avatar_middle
在线会员 发表于 2018-11-24 20:37:00 | 显示全部楼层
谢谢楼主分享,非常感谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

95_avatar_middle
在线会员 发表于 2018-11-25 11:36:15 | 显示全部楼层
继续学习楼主辛苦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
online_vip 发表于 2018-11-26 09:40:22 | 显示全部楼层
感谢Syc大神的分享。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

76_avatar_middle
在线会员 发表于 2018-11-26 10:11:56 | 显示全部楼层
感谢Syc大神的分享。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

10_avatar_middle
online_vip08 发表于 2018-11-27 09:44:53 | 显示全部楼层
感谢老大又更新了,速度下载学习

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

90_avatar_middle
在线会员 发表于 2018-11-28 10:46:44 | 显示全部楼层
学习,学习!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

22_avatar_middle
在线会员 发表于 2018-11-28 16:16:24 | 显示全部楼层
《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件《实用VC编程之玩转控件》第16课:ListCtrl高级列表控件

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

08_avatar_middle
在线会员 发表于 2018-11-29 20:56:22 | 显示全部楼层
谢谢楼主分享,非常感谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

02_avatar_middle
在线会员 发表于 2018-11-30 03:09:25 | 显示全部楼层
老大辛苦了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
在线会员 发表于 2018-11-30 15:27:45 | 显示全部楼层
感谢分享,楼主辛苦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

57_avatar_middle
在线会员 发表于 2018-11-30 19:04:27 | 显示全部楼层

继续学习

楼主辛苦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

62_avatar_middle
online_vip 发表于 2018-12-1 15:11:31 | 显示全部楼层
第16课免费试

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

56_avatar_middle
在线会员 发表于 2018-12-2 09:33:23 | 显示全部楼层
第16课:ListCtrl高级列表控件

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

83_avatar_middle
online_vip 发表于 2018-12-3 18:25:58 | 显示全部楼层

继续学习

楼主辛苦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

13_avatar_middle
online_vip 发表于 2018-12-4 10:01:19 | 显示全部楼层
helloworld

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

36_avatar_middle
在线会员 发表于 2018-12-4 15:04:03 | 显示全部楼层
看看 不错的啊

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

61_avatar_middle
在线会员 发表于 前天 21:22 | 显示全部楼层

谢谢楼主分享,非常感谢

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ| 小黑屋|手机版| VC驿站 ( 辽ICP备09019393号 )  tongdun|网站地图wx_jqr

GMT+8, 2018-12-18 20:09

Powered by CcTry.CoM

© 2018 VC驿站.

返回顶部