CListCtrl的用法总结

1 CListCtrl的风格

CListCtrl的风格有四种:

  • LVS_ICON: 为每个item显示大图标
  • LVS_SMALLICON: 为每个item显示小图标
  • LVS_LIST: 显示一列带有小图标的item
  • LVS_REPORT: 显示item详细资料

分别对应着资源管理器查看菜单下的大图标,小图标,列表,详细资料。

可以在控件属性视图下设置:View属性.

也可以用代码来设置,如下:

DWORD SetView(
   int iView 
);

以下解说均以report风格为例.


2 设置CListCtrl风格及扩展风格

获取及设置风格代码示例代码如下:

LONG lStyle;
lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style

获取及设置扩展风格示例代码如下:

DWORD dwStyle = m_list.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)
dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)
dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件
m_list.SetExtendedStyle(dwStyle); //设置扩展风格

3 插入数据

插入列,示例代码如下:

m_list_av.InsertColumn(0,"PID");
m_list_av.InsertColumn(1,"name");
m_list_av.InsertColumn(2,"value");

CRect rect;
m_list_av.GetClientRect(rect);                    //获得当前客户区信息
m_list_av.SetColumnWidth(0,rect.Width()/6);       //设置列的宽度。
m_list_av.SetColumnWidth(1,rect.Width()/2);
m_list_av.SetColumnWidth(2,rect.Width()/3);

也可用另一种方式,如:

m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列,LVCFMT_LEFT为对齐方式,40为列宽
m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );

插入行,示例代码如下:

CString str;
for(int i=0; i<m_av_count; i++){
	m_list_av.InsertItem(i,m_avs[i].name);
	str.Format("%04x",m_avs[i].pid);
	m_list_av.SetItemText(i,0,str);
	m_list_av.SetItemText(i,1,m_avs[i].name);
	GetValueAsStirng(&m_avs[i],str);
	m_list_av.SetItemText(i,2,str);
}

另一个示例如下:

CString strText;
int nColumnCount = m_myListCtrl.GetHeaderCtrl()->GetItemCount();

// Insert 10 items in the list view control.
for (int i = 0; i < 10; i++)
{
	strText.Format(TEXT("item %d"), i);

	// Insert the item, select every other item.
	m_myListCtrl.InsertItem(LVIF_TEXT | LVIF_STATE, i, strText, 
		(i % 2) == 0 ? LVIS_SELECTED : 0, LVIS_SELECTED, 0, 0);

	// Initialize the text of the subitems.
	for (int j = 1; j < nColumnCount; j++)
	{
		strText.Format(TEXT("sub-item %d %d"), i, j);
		m_myListCtrl.SetItemText(i, j, strText);
	}
}

4 一直选中一行

在默认情况下,当选一行,再点击其它地方时,原先选中的一行会推动高亮显示,如果你想保留高亮显示,则可以在属性面板上找到属性Always Show Selection,并设置为true.

也可用设置扩展风格的方式设置,如:

dwStyle |= LVS_SHOWSELALWAYS;
m_list.SetExtendedStyle(dwStyle); //设置扩展风格


5 选中和取消一行

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

另一种方式,包含获取选择项和设置:

// Set the selection mark to the first item only if no other item is 
// selected.
if (m_myListCtrl.GetSelectionMark() == -1)
	m_myListCtrl.SetSelectionMark(0);

在单选时可用以上方法。

6 获取选择项

CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
     if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
     {
          str.Format(_T("选中了第%d行"), i);
          AfxMessageBox(str);
     }
}

另一种方法:

POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
    TRACE0("No items were selected!\n");
else
{
    while (pos)
    {
        int nItem = m_list.GetNextSelectedItem(pos);
        TRACE1("Item %d was selected!\n", nItem);
        // you could do your own processing on nItem here
    }
}

获取单选项的示例代码:

POSITION pos =m_CLC_Record.GetFirstSelectedItemPosition();
if (pos == NULL)
{
	AfxMessageBox("请先选择一项记录!");
	return;
}
else
{
	int nSel =m_CLC_Record.GetNextSelectedItem(pos);
	//do something
}


7 绑定数据

// If any item's data is equal to zero then reset it to -1.
for (int i=0; i < m_myListCtrl.GetItemCount(); i++)
{
	if (m_myListCtrl.GetItemData(i) == 0)
	{
		m_myListCtrl.SetItemData(i, (DWORD) -1);
	}
}


参考:http://www.cnblogs.com/cy163/archive/2006/10/15/529790.html


8 隐藏表头

有两种方法:

第一种:在属性面板中找到No Column Header属性,设置为true。

第二种:动态创建时使用LVS_NOCOLUMNHEADER。

9 获取总行数

int nCount =m_myListCtr.GetItemCount();


10 滚屏

//滚屏
m_CLC_Record.EnsureVisible(nCount-1,false);


11 双击一行

为CListCtrl添加NM_DBLCK事件.

示例代码:

void CTestDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: Add your control notification handler code here
	NMLISTVIEW* pMListView=(NMLISTVIEW*) pNMHDR;
    	int nIndex = pMListView->iItem;

	RecordData *pdata =(RecordData *)m_CLC_Record.GetItemData(nIndex);
	m_ComboSendType.SetCurSel(pdata->SendFmt);
	m_ComboSendFrmType.SetCurSel(pdata->FrameType);
	m_ComboSendFrmFmt.SetCurSel(pdata->FramFmt);
	m_EditSendFrmID.Format("%08x",pdata->FrameID);
	m_EditSendData =m_CLC_Record.GetItemText(nIndex,4);
	m_Delay =pdata->DelayTime;
	UpdateData(false);
	*pResult = 0;
}


12 获取Item字符串

m_EditSendData =m_CLC_Record.GetItemText(nIndex,4);


CListCtrl风格设置 CListCtrl样式: LVS_ICON 指定为图标视图,为每个item显示大图标 LVS_REPORT 指定报表视图,显示item详细资料 LVS_SMALLICON 指定为小图标视图,为每个item显示小图标 LVS_LIST 指定为列表视图,显示一列带有小图标的i... 阅读详情

相关推荐

别再纠结高边低边了!用TI BQ76952设计两轮车BMS,手把手教你选对架构(附电路图)

本文深度解析基于TI BQ76952芯片的电动两轮车BMS设计策略,涵盖高边/低边驱动选择、四种基础架构的电流路径分析及选型决策矩阵。通过实战案例分享,帮助工程师优化BMS架构,提升系统可靠性和成本效益,特别适合电摩和共享单车应用场景。

weixin_42665255的博客 513

CListCtrl控件详解

Create创建列表控件并将其附加给CListCtrl对象。

milanleon的专栏 2万+

稳健自适应波束形成学习(2):自适应计算对角加载量方法——基于广义线性组合的鲁棒Capon波束形成

对于快拍数相对阵元数较小时,样本协方差矩阵不能很好对协方差矩阵进行估计。常规的对角加载量需要根据经验值或不断手动调整进行测试,没有一个明确的准则和推导。该篇介绍一种自适应计算对角加载量的方法,且能适应快拍数相对阵元数较小时的情况。均匀线阵阵元数:18;载波频率30MHz;通信信号来波方向0°、来波估计偏差0.5°;干扰来波方向30°;通信信号信噪比10dB;干扰信号信噪比60dB。也即在干扰角度生成66dB的零陷,通信信号受到16dB的衰减。

a1uajug的博客 825

MFC CListCtrl 虚拟列表使用详解

CListCtrl 是MFC 库的一个列表控件,用于显示数据的。可以通过 InsertItem 快速向列表添加一行数据,并且用 SetItemText 设置其后面列的数据项。但是本篇文章重点不是介绍 CListCtrl 控件的基本使用方法,而是介绍 CListCtrl 的扩展功能“虚拟列表”。使用 InsertItem 方法可以显示少量数据,但是数据量大或者是频繁刷新列表数据时,会出现缓慢甚至卡顿的现象。虚拟列表可以很好的解决该问题。1、处理 LVN_GETDISPINFO 消息。

baidu_15765107的博客 6331

论文阅读《Eigen-GNN: A Graph Structure Preserving Plug-in for GNNs》

好久没看论文了,感觉好生疏 关于这篇文章的大致脉络,这篇文章已经介绍过了。

且视他人之疑目如盏盏鬼火,大胆地去走你的夜路 461

【滚雪球学数学建模】第4.1节·概率与统计建模,一文搞懂!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1348

MFC总结之CListCtrl用法及技巧(一)

本文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧。当初学习时,查了很多资料,零零碎碎的作了些记录,现在主要是来做个总结,方便以后查阅。主要包括以下十三点内容:基本操作、获取选中行的行号、复选框操作、动态设置选中行的字体颜色、设置选中行的背景颜色、禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与向下移动、动态调整大小问题、避免闪烁问题。

茅庐 5万+

后仿真中《SDF反标必懂连载篇》之 Negative Delay (理论篇)

今天,学习一下SDF文件中的负数延时问题。比如下面的图片中的SETUPHOLD 中的hold time 为负数。

那么菜的博客 2573

CListCtrl 用法总结

CListCtrl 用法总结 1. CListCtrl 风格      LVS_ICON: 为每个item显示大图标      LVS_SMALLICON: 为每个item显示小图标      LVS_LIST: 显示一列带有小图标的item      LVS_REPORT: 显示item详细资料      直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,

wwwcs59的专栏 713

Python爬虫-爬取猫眼演出数据

本文是该专栏的第53篇,后面会持续分享python爬虫干货知识。猫眼平台除了有影院信息之外,它还涵盖了演出信息,比如说“演唱会,音乐节,话剧音乐剧,脱口秀,音乐会,戏曲艺术,相声”等等各种演出相关信息。而本文,笔者将以猫眼平台为例,基于Python爬虫实现获取各种演出信息的数据。废话不多说,具体细节部分以及详细思路逻辑,笔者将在正文结合完整代码进行详细说明。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 568

LearningToRank(LTR)排序算法LGBMRanker的原理和使用

1. 写在前面 在最近新闻推荐的比赛中, 接触到了一个排序模型LGBMRanker, 该模型与普通的分类模型LGBMClassifier不太一样, 普通的分类模型在进行推荐的时候, 往往是先预测某个商品或者文章用户会不会点击, 也就是它的目标是预测用户点击某篇文章或者某个商品的概率, 然后根据这个概率值进行排序, 排完之后,把最靠前的几个返回回来给用户进行推荐。 而LGBRanker模型, 它不关心用户点击某篇文章的概率, 而是根据用户点击或者不点击的这个行为, 直接去预测最后商品或者文章的一个相对顺序,

Miracle8070 1万+

MFC总结之CListCtrl用法及技巧

文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧。当初学习时,查了很多资料,零零碎碎的作了些记录,现在主要是来做个总结,方便以后查阅。主要包括以下十三点内容:基本操作、获取选中行的行号、复选框操作、动态设置选中行的字体颜色、设置选中行的背景颜色、禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与向下移动、动态调整大小问题、避免闪烁问题。 ...

阿哲的专栏 1637

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

CListCtrl基本用法

 CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。最近使用了这个控件,有心得总结如下:      (Dialog模式)                                                                                        

馋嘴猪没胃口 2万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CListCtrl的Report(详细)视图基本用法

简单介绍 CListCtrl的报表视图,即LVS_REPORT,也可叫做详细视图,可以显示多列,而其它几个视图LVS_LIST、LVS_ICON、LVS_SMALLICON则没有多列显示功能。 基本用法 在对话框中可以通过VS的工具来拖拽一个CListCtrl到界面上,但在非对话框中只能用Create或CreateEx来创建。由此可看出,尽早学会用Create或CreateEx来创建一个CList...

憧憬,思考,奋斗,飞翔 3696

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

CListCtrl用法

以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn--------------------------------------------------------------------------------1. CListCt

Laiger001的专栏 1142

CListCtrl用法 CListCtrl使用详解 (代码)

说明:此篇博文 也是关于CListCtrl的用法 该文源代码示例较多 最适合初学者,所以转载来大家一起分享  CListCtrl用法 VC之CListCtrl使用 一、对话框里添加CListCtrl控件 如果想要在对话框初始化时生成ListCtrl,那么首先在该对话框的CP

半杯咖啡 2108

CListCtrl的用法

CListCtrl的用法<br />1. CListCtrl 风格<br />      LVS_ICON: 为每个item显示大图标<br />      LVS_SMALLICON: 为每个item显示小图标<br />      LVS_LIST: 显示一列带有小图标的item<br />      LVS_REPORT: 显示item详细资料<br />      直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”<br /> 2. 设置listctrl 风格及

qrsssh的专栏 680

MFC CListCtrl的用法

2009-11-13 01:16CListCtrl的用法先来介绍REPORT类型的CListCtrl:首先使用下面的语句设置CListCtrl的style:DWORD SetExtendedStyle( DWORD dwNewStyle );其中LVS_EX_CHECKBOXES 表示添加CheckBoxLVS_EX_FULLROWSELECT 表示

n70joey的专栏 971
上一篇: 简单的java静态导入
下一篇: 内省(Introspector)
piperzero
博客等级 码龄21年 1377粉丝 504原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值