listcontr
您还未登录!|登录|注册|帮助[*]首页
[*]业界
[*]移动
[*]云计算
[*]研发
[*]论坛
[*]博客
[*]下载
[*]更多
lilang66的专栏
[*]目录视图
[*]摘要视图
[*]订阅
投票赢好礼,周周有惊喜! 2014年4月微软MVP申请开始了! 消灭0回答,赢下载分 “我的2013”年度征文活动火爆进行中! 专访何海涛:“不正经”程序员的进阶之路 vc中的listctrl
分类: VS2010 C++2013-03-2615:08 93人阅读 评论(0) 收藏 举报VS2010MFC1. CListCtrl 样式及设置
2. 扩展样式设置
3. 数据插入
4. 一直选中Item
5. 选中和取消选中Item
6. 得到CListCtrl中所有行的checkbox的状态
7. 得到CListCtrl中所有选中行的序号
8. 得到item的信息
9. 得到CListCtrl的所有列的header字符串内容
10. 使CListCtrl中一项可见,即滚动滚动条
11. 得到CListCtrl列数
12. 删除所有列
13. 得到单击的CListCtrl的行列号
14. 判断是否点击在CListCtrl的checkbox上
15. 右键点击CListCtrl的item弹出菜单
16. CListCtrl进行大数据量更新时,避免闪烁
!时间仓促,此播客内容大多为网上整理,特向原作者表示感谢!
listCtrl控件多列显示一定要记得设置view属性 为report。 这个问题纠结了我好久啊啊啊 啊
1. CListCtrl 样式及设置
LVS_ICON: 每个item显示大图标
LVS_SMALLICON: 每个item显示小图标
LVS_LIST: 显示一列带有小图标的item
LVS_REPORT: 显示item详细资料
如windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”
LONG lStyle;
lStyle=GetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE); //获取当前窗口style
lStyle &= ~LVS_TYPEMASK; //清除显示方式位
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_ListCtrl.m_hWnd, GWL_STYLE, lStyle); //设置style
2. 扩展样式设置
DWORD dwStyle = m_ListCtrl.GetExtendedStyle(); //获取当前扩展样式
dwStyle |= LVS_EX_FULLROWSELECT; //选中某行使整行高亮(report风格时)
dwStyle |= LVS_EX_GRIDLINES; //网格线(report风格时)
dwStyle |= LVS_EX_CHECKBOXES; //item前生成checkbox控件
m_ListCtrl.SetExtendedStyle(dwStyle); //设置扩展风格
3. 数据插入
m_ListCtrl.InsertColumn(0,"名称",LVCFMT_LEFT,50); //插入列
m_ListCtrl.InsertColumn(1,"备注",LVCFMT_LEFT,50);
//直接插入:
int nRow=m_ListCtrl.InsertItem(0, "VC++"); //插入行
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");//设置数据
//LVITEM 结构插入:
LVITEM item={0};
item.iItem=0;//行号
item.mask=LVIF_TEXT; /*LVIF_IMAGE支持图标*/;
item.cchTextMax=15;//插入字符串长度
item.pszText="Visual C++ 6.0";
int nRow=m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(nRow,1,"Visual C++ 6.0");
4. 一直选中Item
选中style中的 Show selection always,
或者添加扩展样式 LVS_SHOWSELALWAYS
5. 选中和取消选中Item
int nIndex = 0;
//选中
m_ListCtrl.SetItemState(nIndex,LVIS_SELECTED |LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
//取消选中
m_ListCtrl.SetItemState(nIndex,0,LVIS_SELECTED|LVIS_FOCUSED);
6. 得到CListCtrl中所有行的checkbox的状态
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)== LVIS_SELECTED || m_ListCtrl.GetCheck(i))
{
str.Format(_T("第%d行的checkbox为选中状态"), i);
AfxMessageBox(str);
}
}
7. 得到CListCtrl中所有选中行的序号
//方法一:
CString str;
for(int i=0; i<m_ListCtrl.GetItemCount(); i++)
{
if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("选中了第%d行"), i);
AfxMessageBox(str);
}
}
//方法二:
POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
if(pos==NULL)
TRACE0("No items were selected!/n");
else
{
while(pos)
{
int nItem=m_ListCtrl.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!/n", nItem);
//添加其他操作
}
}
8. 得到item的信息
TCHAR szBuf;
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_ListCtrl.GetItem(&lvi);
关于得到设置item的状态,还可以参考msdn文章
Q173242: Use Masks to Set/Get Item States in CListCtrl
http://support.microsoft.com/kb/173242/en-us
9. 得到CListCtrl的所有列的header字符串内容
LVCOLUMN lvcol;
charstr;
int nColNum;
CString strColumnName;//假如有3列
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName = lvcol.pszText;
nColNum++;
}
10. 使CListCtrl中一项可见,即滚动滚动条
m_ListCtrl.EnsureVisible(i, FALSE);
11. 得到CListCtrl列数
int nHeadNum=m_ListCtrl.GetHeaderCtrl()->GetItemCount();
12. 删除所有列
方法一:
while(m_ListCtrl.DeleteColumn(0))
//因为你删除了第一列后,后面的列会依次向上移动。
方法二:
int nColumns = 3; //列数
for(int i=nColumns-1; i>=0; i--)
m_ListCtrl.DeleteColumn(i);
13. 得到单击的CListCtrl的行列号
添加listctrl控件的NM_CLICK消息相应函数
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
//方法一:
DWORD dwPos=GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
int nItem=m_ListCtrl.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 = 0;
}
14. 判断是否点击在CListCtrl的checkbox上
添加listctrl控件的NM_CLICK消息相应函数
void CMyDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos=GetMessagePos();
CPoint point(LOWORD(dwPos), HIWORD(dwPos));
m_ListCtrl.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt=point;
lvinfo.flags=LVHT_ABOVE;
UINT nFlag;
int nItem=m_ListCtrl.HitTest(point, &nFlag);
//判断是否点在checkbox上
if(nFlag==LVHT_ONITEMSTATEICON)
{
AfxMessageBox("点在listctrl的checkbox上");
}
*pResult = 0;
}
15. 右键点击CListCtrl的item弹出菜单
添加CListCtrl控件的NM_RCLICK消息相应函数
void CMyDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem!=-1)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0);
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, this );
}
*pResult = 0;
}
16. CListCtrl进行大数据量更新时,避免闪烁
m_ListCtrl.SetRedraw(FALSE);
//更新内容
m_ListCtrl.SetRedraw(TRUE);
m_ListCtrl.Invalidate();
m_ListCtrl.UpdateWindow();
//或者参考
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd.3a3a.setredraw.asp
更多0上一篇:mfc 新创建的线程如何获得 窗口控件对象下一篇:ListCtrl的用法查看评论
暂无评论
您还没有登录,请[登录]或[注册]* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场核心技术类目
全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFCWAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IISFedora XML LBS Unity Splashtop UML components WindowsMobile Rails QEMUKDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6Rackspace WebApp SpringSide Maemo Compuware 大数据 aptech Perl Tornado RubyHibernate ThinkPHP Spark HBase Pure Solr Angular CloudFoundry Redis ScalaDjango Bootstrap
个人资料
lilang66
[*]访问:19241次
[*]积分:428分
[*]排名:千里之外
[*]原创:18篇
[*]转载:38篇
[*]译文:0篇
[*]评论:0条
文章搜索
文章分类
[*]汇编---王爽(6)
[*]感悟心得(2)
[*]算法(2)
[*]java(5)
[*]VS2010 C++(23)
[*]调试(4)
[*]操作系统(6)
[*]硬件(1)
[*]linux C(1)
[*]vc6(1)
[*]生活(1)
[*]数据库(1)
[*]网络(1)
[*]python(0)
文章存档
[*]2014年01月(1)
[*]2013年12月(1)
[*]2013年11月(1)
[*]2013年10月(1)
[*]2013年09月(1)展开
阅读排行
[*]王爽--------汇编语言课程设计2(7395)
[*]vs2010设置技巧(1473)
[*]VS2010中MessageBox的用法(808)
[*]卸载jdk卸载不干净怎么办(658)
[*]int21H 各子程序功能(648)
[*]EDIT控件的用法(571)
[*]汇编程序(MASM)常见错误信息(419)
[*]'_beginthreadex': undeclared identifier(407)
[*]dos命令(400)
[*]linux进程创建过程与原理fork,vfork,clone的区别(389)
评论排行
[*]带头结点的链表初始化和不带头结点的链表初始化(0)
[*]_cdecl和_stdcal的区别(0)
[*]Linux脚本编写基础(0)
[*]硬盘接口SCSI IDE SATA区别(0)
[*]Linux用户(user)和用户组(group)的日常管理与操作教程概述(0)
[*]一个linux菜鸟的琢磨(0)
[*]Vmwareworkstation9.0安装linux redhat2.2.14(0)
[*]系统安装篇linux安装常见问题(0)
[*]网页资料收集(0)
[*]linux进程创建过程与原理fork,vfork,clone的区别(0)
推荐文章
公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告QQ客服 微博客服 论坛反馈 联系邮箱:webmaster@iyunv.com 服务热线:400-600-2320京 ICP 证 070598 号北京创新乐知信息技术有限公司 版权所有江苏乐知网络技术有限公司 提供商务支持Copyright © 1999-2014, CSDN.NET, All Rights Reserved 版权声明:本文为博主原创文章,未经博主允许不得转载。
页:
[1]