LISTCTRL控件方法
- 以下未经说明,listctrl默认view风格为report
- -------------------------------------------------------------------------------
- . CListCtrl 风格
- LVS_ICON: 为每个item显示大图标
- LVS_SMALLICON: 为每个item显示小图标
- LVS_LIST: 显示一列带有小图标的item
- LVS_REPORT: 显示item详细资料
- 直观的理解:windows资源管理器,"查看"标签下的"大图标,小图标,列表,详细资料
- --------------------------------------------------------------------------------
- . 设置listctrl风格及扩展风格
- 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); //设置扩展风格
- 注:listview的style请查阅msdn
- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp
- --------------------------------------------------------------------------------
- . 插入数据
- m_list.InsertColumn( , );//插入列
- m_list.InsertColumn( , );
- //新插入的在上面
- , ");// 插入行
- m_list.SetItemText(nRow, , "jacky");//设置其它列数据
- //新插入的数据在下面
- int nIndex = m_list.GetItemCount();
- LV_ITEM lvItem;
- lvItem.mask = LVIF_TEXT ;
- lvItem.iItem = nIndex; //行数
- lvItem.iSubItem = ;
- lvItem.pszText = (char*)(LPCTSTR)strCount; //第一列
- //在最后一行插入记录值.
- m_list.InsertItem(&lvItem);
- //插入其它列
- m_list.SetItemText(nIndex,,strLat);
- --------------------------------------------------------------------------------
- . 一直选中item
- 选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS
- --------------------------------------------------------------------------------
- . 选中和取消选中一行
- ;
- //选中
- m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
- //取消选中
- m_list.SetItemState(nIndex, , LVIS_SELECTED|LVIS_FOCUSED);
- --------------------------------------------------------------------------------
- . 得到listctrl中所有行的checkbox的状态
- m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
- CString str;
- ; i<m_list.GetItemCount(); i++)
- {
- if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))
- {
- str.Format(_T("第%d行的checkbox为选中状态"), i);
- AfxMessageBox(str);
- }
- }
- --------------------------------------------------------------------------------
- . 得到listctrl中所有选中行的序号
- 方法一:
- CString str;
- ; 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
- }
- }
- --------------------------------------------------------------------------------
- . 得到item的信息
- TCHAR szBuf[];
- LVITEM lvi;
- lvi.iItem = nItemIndex;
- lvi.iSubItem = ;
- lvi.mask = LVIF_TEXT;
- lvi.pszText = szBuf;
- lvi.cchTextMax = ;
- m_list.GetItem(&lvi);
- 关于得到设置item的状态,还可以参考msdn文章
- Q173242: Use Masks to Set/Get Item States in ClistCtrl
- http://support.microsoft.com/kb/173242/en-us
- --------------------------------------------------------------------------------
- . 得到listctrl的所有列的header字符串内容
- LVCOLUMN lvcol;
- ];
- int nColNum;
- CString strColumnName[];//假如有4列
- nColNum = ;
- lvcol.mask = LVCF_TEXT;
- lvcol.pszText = str;
- lvcol.cchTextMax = ;
- while(m_list.GetColumn(nColNum, &lvcol))
- {
- strColumnName[nColNum] = lvcol.pszText;
- nColNum++;
- }
- --------------------------------------------------------------------------------
- . 使listctrl中一项可见,即滚动滚动条
- m_list.EnsureVisible(i, FALSE);
- --------------------------------------------------------------------------------
- . 得到listctrl列数
- int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
- --------------------------------------------------------------------------------
- . 删除所有列
- 方法一:
- ))
- 因为你删除了第一列后,后面的列会依次向上移动。
- 方法二:
- ;
- ; i>=; i--)
- m_list.DeleteColumn (i);
- --------------------------------------------------------------------------------
- . 得到单击的listctrl的行列号
- 添加listctrl控件的NM_CLICK消息相应函数
- void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- // 方法一:
- /*
- DWORD dwPos = GetMessagePos();
- CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
- m_list.ScreenToClient(&point);
- LVHITTESTINFO lvinfo;
- lvinfo.pt = point;
- lvinfo.flags = LVHT_ABOVE;
- int nItem = m_list.SubItemHitTest(&lvinfo);
- if(nItem != -1)
- {
- CString strtemp;
- strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);
- AfxMessageBox(strtemp);
- }
- */
- // 方法二:
- /*
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- if(pNMListView->iItem != -1)
- {
- CString strtemp;
- strtemp.Format("单击的是第%d行第%d列",
- pNMListView->iItem, pNMListView->iSubItem);
- AfxMessageBox(strtemp);
- }
- */
- *pResult = ;
- }
- --------------------------------------------------------------------------------
- . 判断是否点击在listctrl的checkbox上
- 添加listctrl控件的NM_CLICK消息相应函数
- void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- DWORD dwPos = GetMessagePos();
- CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
- m_list.ScreenToClient(&point);
- LVHITTESTINFO lvinfo;
- lvinfo.pt = point;
- lvinfo.flags = LVHT_ABOVE;
- UINT nFlag;
- int nItem = m_list.HitTest(point, &nFlag);
- //判断是否点在checkbox上
- if(nFlag == LVHT_ONITEMSTATEICON)
- {
- AfxMessageBox("点在listctrl的checkbox上");
- }
- *pResult = ;
- }
- --------------------------------------------------------------------------------
- . 右键点击listctrl的item弹出菜单
- 添加listctrl控件的NM_RCLICK消息相应函数
- void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- )
- {
- DWORD dwPos = GetMessagePos();
- CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
- CMenu menu;
- VERIFY( menu.LoadMenu( IDR_MENU1 ) );
- CMenu* popup = menu.GetSubMenu();
- ASSERT( popup != NULL );
- popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
- }
- *pResult = ;
- }
- . item切换焦点时(包括用键盘和鼠标切换item时),状态的一些变化顺序
- 添加listctrl控件的LVN_ITEMCHANGED消息相应函数
- void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
- {
- NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
- // TODO: Add your control notification handler code here
- CString sTemp;
- )
- {
- sTemp.Format("%d losted focus",pNMListView->iItem);
- }
- &&
- (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
- {
- sTemp.Format("%d got focus",pNMListView->iItem);
- }
- if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
- (pNMListView->uNewState & LVIS_SELECTED) == )
- {
- sTemp.Format("%d losted selected",pNMListView->iItem);
- }
- && (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
- {
- sTemp.Format("%d got selected",pNMListView->iItem);
- }
- *pResult = ;
- --------------------------------------------------------------------------------
- . 得到另一个进程里的listctrl控件的item内容
- http://www.codeproject.com/threads/int64_memsteal.asp
- --------------------------------------------------------------------------------
- . 选中listview中的item
- Q131284: How To Select a Listview Item Programmatically
- http://support.microsoft.com/kb/131284/en-us
- --------------------------------------------------------------------------------
- . 如何在CListView中使用CListCtrl的派生类
- http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/
- --------------------------------------------------------------------------------
- . listctrl的subitem添加图标
- m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);
- m_list.SetItem(..); //具体参数请参考msdn
- }
- str.Format("你双击了:%d行,%d列",pList->iItem,pList->iSubItem);
- MessageBox(str);
- *pResult = ;
- }
- 常用操作:
- 、添加列标题头:InsertColumn
- 、获取与设置列宽:GetColumnWidth、SetColumnWidth
- 、添加一行:InsertItem、SetItemText
- 、获取与设置单元文本:GetItemText、SetItemText
- 、允许多行选中时,获取选中的行数:GetSelectedCount
- 、单行选中时,获取选中的行:GetSelectionMark
- 、选中某行:SetItemState(n, LVIS_SELECTED, LVIS_SELECTED);取消选中的行SetItemState(n,,-);使用此函数前需要先调用SetFocus();
- 、获取某行的状态是否为选中:GetItemState(n, LVIS_SELECTED) == LVIS_SELECTED
- 、删除所有行:DeleteAllItems
- 、删除指定列:DeleteColumn
- 、删除指定行:DeleteItem
- 、获取与设置列表控件的背景色:GetBkColor、SetBkColor
- 、获取与设置文字背景色:GetTextBkColor、SetTextBkColor
- 、获取与设置文字前景色:GetTextColor、SetTextColor
- 、获取与设置Check:GetCheck、SetCheck,使用前需要设置控件属性SetExtendedStyle(LVS_EX_CHECKBOXES);使控件有勾选功能
- 、获取与设置图标列表:GetImageList、SetImageList
- 、获取与设置行附加数据:GetItemData、SetItemData
- 、获取与设置扩展风格样式:GetExtendedStyle、SetExtendedStyle
- 、设置正行选中与网格线:SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
- 、让ListCtrl支持编辑的功能:
- ①、将属性中的 Edit Labels 设置为 True;
- ②、响应控件的 LVN_EDNLABELEDIT 消息,添加如下代码:
- CString strText;
- m_ListCtrl.GetEditControl()->GetWindowText(strText);
- m_ListCtrl.SetItemText(pDispInfo->item.iItem, pDispInfo->item.iSubItem, strText);
- 、多行可选时,跳到第一个被选中的行,即使第一个被选中的行可视。
- POSITION pos = pView->GetListCtrl().GetFirstSelectedItemPosition();
- int nFirstSel = pView->GetListCtrl().GetNextSelectedItem(pos);
- )
- {
- pView->GetListCtrl().EnsureVisible(nFirstSel,FALSE);
- }
- 列表中添加图标代码:
- UINT nIconID[] = {IDI_ICON1,IDI_ICON2,IDI_ICON3,IDI_ICON4,IDI_ICON5};//图标ID
- m_ImageList.Create(,,ILC_COLOR24,);//初始化CImageList类,sizeof(nIconID)/sizeof(UINT)为图标个数,后面的0表示CImageList在sizeof(nIconID)/sizeof(UINT)个图标个数的基础上可再添加多少个图标。
- m_ImageList.SetBkColor(RGB(,,));//设置背景色为白色
- ; i < sizeof(nIconID)/sizeof(UINT); i++)
- {
- m_ImageList.Add(AfxGetApp()->LoadIcon(nIconID[i]));//将图标添加到CImageList
- }
- m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);//设置列表控件显示图标
- m_ListCtrl.InsertColumn(,_T(,);
- m_ListCtrl.InsertColumn(,_T(,);
- m_ListCtrl.InsertColumn(,_T(,);
- m_ListCtrl.InsertItem(,_T();//后面的0表示添加CImageList中的第0个图标
- m_ListCtrl.InsertItem(,_T();//后面的1表示添加CImageList中的第1个图标
- m_ListCtrl.InsertItem(,_T();
- m_ListCtrl.SetItemText(,,_T("));
- m_ListCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);//设置控件有勾选功能
- DWORD dwStyle = m_ListCtrl.GetExtendedStyle();
- m_ListCtrl.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT);设置控件选中行的功能
LISTCTRL控件方法的更多相关文章
- VC/MFC ListCtrl 控件功能使用汇总(转)
以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...
- ListCtrl控件
一 CListCtrl类型 LVS_EDITLABELS LVS_OWNERDRAWFIXED LVS_REPORT LVS_SHOWSELALWAYS LVS_SINGLESEL LVS_SMALL ...
- ListCtrl控件的使用
list contrl控件的使用 .建立基于对话框的应用程序,布置界面,设置属性. 注意添加的是listctrl控件,不是listbox控件,在控件工具箱的倒数第五行list control控件. 属 ...
- duilib中ListCtrl控件的实现
转载请说明出处,谢谢~~ 昨天在编程群里聊天,提到了ListCtrl,然后有网友找我,他需要做一个ListCtrl控件,我看过需求后接下了这个活.今天就把大致的思路和过程记录一下.首先看<任务书 ...
- ListCtrl控件着色
最近在写一款山寨的反病毒软件,大致功能已经实现,还有一些细小的环节需要细化. 其中,在界面编程中,就用到了给ListCtrl控件着色,查看了网上一些文章,终于实现了. 其实说白了,原理很简单,就是Li ...
- 使用CSV控件方法实现参数化
一.录制脚本 二.下面介绍如何使用CSV控件方法实现参数化 1. 添加-->配置元件-->csv Data Set Config Filename:文件的来源 Variable Name ...
- JQuery自定义用户控件方法汇总
首先必用 JQuery.fn.extend方法 使用方法: jQuery.fn.extend({}); 其次 相应控件配置参数设置: jQuery.fn.extend({ uploadPreview: ...
- Auto.js 特殊定位控件方法 不能在ui线程执行阻塞操作,请使用setTimeout代替
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! Auto.js 特殊定位控件方法 操作环 ...
- bcb安装控件方法汇总
1.BCB 菜单: Project->Options->Packages->Add[喝小酒的网摘]http://blog.const.net.cn/a/8496.htm如果是BCB6 ...
随机推荐
- ucenter单点登录
首先我们先来了解下Ucenter登录步骤 1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和passwo ...
- Asp.NetCore之组件写法
本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也通过调用验证码接口来自定义 ...
- BootstrapBootbox居中
/* 模态框居中样式 */ .bootbox-container { position: fixed; ; ; ; ; ; overflow-y: auto; } .bootbox-container ...
- JAVA 发送邮件代码---发送HTML内容
依赖包:mail.jar JAR链接地址: http://pan.baidu.com/s/1o8LNl0Y 密码: ja52 package com.dava; import java.util.Pr ...
- 关于html5调用手机相机(原创)
很久没写随笔了 从ios6开始,webview支持html <input type="file">标签,用来调取手机的相册和相机,但是没有权限提示,不知道是不是我写的有 ...
- 性能优化之AJAX
明天就放假啦~哈哈.四月份好像还没有输出呢,吓得我赶紧写点东西... Ajax是高性能JavaScript的基础. Ajax,从最基本的层面来说,是一种与服务器通信而无需重载页面的方法.数据可以从服务 ...
- 在Caffe中实现模型融合
模型融合 有的时候我们手头可能有了若干个已经训练好的模型,这些模型可能是同样的结构,也可能是不同的结构,训练模型的数据可能是同一批,也可能不同.无论是出于要通过ensemble提升性能的目的,还是要设 ...
- python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
- Twitter数据抓取的方法(二)
Scraping Tweets Directly from Twitters Search Page – Part 2 Published January 11, 2015 In the previo ...
- MySQL最常用分组聚合函数
一.聚合函数(aggregation function)---也就是组函数 在一个行的集合(一组行)上进行操作,对每个组给一个结果. 常用的组函数: AVG([distinct] expr) 求平均值 ...