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

本文转载自:VC驿站

https://www.cctry.com/thread-297487-1-1.html

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;
③、样式设定:

LONG lStyle = 0;
lStyle = GetWindowLong(m_List.GetSafeHwnd(), GWL_STYLE);//获取当前窗口样式
lStyle &= ~LVS_TYPEMASK; //清除显示掩码
lStyle |= LVS_REPORT; //设置报表样式
SetWindowLong(m_List.GetSafeHwnd(), GWL_STYLE, lStyle);//设置新样式

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

4、动态设定 ListCtrl 的扩展风格:

DWORD dwStyle = m_List.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;    //选中某行使整行高亮(只适用于Report风格)
dwStyle |= LVS_EX_GRIDLINES;        //网格线(只适用于Report风格)
dwStyle |= LVS_EX_CHECKBOXES;       //item 前生成 CheckBox 复选框
//dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES;
m_List.SetExtendedStyle(dwStyle); //设置扩展风格

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

5、插入列信息:
使用 InsertColumn 插入列信息:

m_List.InsertColumn(0, _T("列1"), LVCFMT_LEFT, 50);
m_List.InsertColumn(1, _T("列2"), LVCFMT_LEFT, 50);
m_List.InsertColumn(2, _T("列3"), LVCFMT_LEFT, 50);

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

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

6、插入行信息:

m_List.InsertItem(m_List.GetItemCount(), _T("111"));
m_List.InsertItem(m_List.GetItemCount(), _T("222"));
m_List.InsertItem(m_List.GetItemCount(), _T("333"));

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

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

7、设置行文本信息:

m_List.SetItemText(0, 1, _T("aaa"));
m_List.SetItemText(0, 2, _T("bbb"));
m_List.SetItemText(1, 1, _T("ccc"));
m_List.SetItemText(1, 2, _T("ddd"));

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

8、选中和取消选中一行:
int nIndex = 0;

//选中
m_List.SetFocus(); //这句别忘了,不然不能高亮
m_List.SetItemState(nIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);

//取消选中
m_List.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);

9、遍历控件的所有行条目:

int nCount = m_List.GetItemCount();
for (int idx = 0; idx < nCount; ++idx)
{
    CString strText = m_List.GetItemText(idx, 0);
    strText = m_List.GetItemText(idx, 1);
    strText = m_List.GetItemText(idx, 2);
}

10、遍历获得当前选中的行:

POSITION pos = m_List.GetFirstSelectedItemPosition();
while (pos)
{
    int nItem = m_List.GetNextSelectedItem(pos);
}

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

11、遍历获得当前CheckBox选中的行:

int nCount = m_List.GetItemCount();
for (int idx = 0; idx < nCount; ++idx)
{
    BOOL bCheck = m_List.GetCheck(idx);
    if (bCheck)
    {
        CString strText;
        strText.Format(_T("第%d行被勾选了!"), idx);
        MessageBox(strText);
    }
}

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课免费试看,下载地址:

https://www.cctry.com/thread-297487-1-1.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值