设为首页 收藏本站
查看: 2003|回复: 0

[Cloudstack] listcontr

[复制链接]

尚未签到

发表于 2015-10-14 09:40:49 | 显示全部楼层 |阅读模式
您还未登录!|登录|注册|帮助


  • 首页
  • 业界
  • 移动
  • 云计算
  • 研发
  • 论坛
  • 博客
  • 下载
  • 更多
lilang66的专栏


  • DSC0000.gif 目录视图
  • DSC0001.gif 摘要视图
  • DSC0002.gif 订阅
投票赢好礼,周周有惊喜!      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&#43;&#43;)
{
   if(m_ListCtrl.GetItemState(i, LVIS_SELECTED)==    LVIS_SELECTED || m_ListCtrl.GetCheck(i))
   {
     str.Format(_T(&quot;第%d行的checkbox为选中状态&quot;), i);
     AfxMessageBox(str);
    }
  }


7. 得到CListCtrl中所有选中行的序号

//方法一:
  CString str;
  for(int i=0; i<m_ListCtrl.GetItemCount(); i&#43;&#43;)
  {
    if(m_ListCtrl.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
    {
      str.Format(_T(&quot;选中了第%d行&quot;), i);
      AfxMessageBox(str);
     }
   }

//方法二:
  POSITION pos=m_ListCtrl.GetFirstSelectedItemPosition();
  if(pos==NULL)
   TRACE0(&quot;No items were selected!/n&quot;);
  else
  {
   while(pos)
    {
      int nItem=m_ListCtrl.GetNextSelectedItem(pos);
      TRACE1(&quot;Item %d was selected!/n&quot;, nItem);
      //添加其他操作
     }
   }

8. 得到item的信息
TCHAR szBuf[1024];
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;
char  str[256];
int   nColNum;
CString strColumnName[3];//假如有3列

nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
   strColumnName[nColNum] = lvcol.pszText;
   nColNum&#43;&#43;;
  }


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(&quot;单击的是第%d行第%d列&quot;,
    lvinfo.iItem, lvinfo.iSubItem);
    AfxMessageBox(strtemp);
   }
  // 方法二:
  NM_LISTVIEW* pNMListView=(NM_LISTVIEW*)pNMHDR;
  if(pNMListView->iItem!=-1)
  {
    CString strtemp;
    strtemp.Format(&quot;单击的是第%d行第%d列&quot;,
    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(&quot;点在listctrl的checkbox上&quot;);
   }
   *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网站的观点或立场 DSC0003.png 核心技术类目
全部主题 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
    个人资料

    DSC0004.jpg
    lilang66 DSC0005.gif

    • 访问:19241次
    • 积分:428分
    • 排名:千里之外


    • 原创:18篇
    • 转载:38篇
    • 译文:0篇
    • 评论:0条


    文章搜索



    文章分类


  • 汇编---王爽(6)
  • 感悟心得(2)
  • 算法(2)
  • java(5)
  • VS2010 C&#43;&#43;(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 DSC0006.gif           版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-126507-1-1.html 上篇帖子: pthread_mutex_lock的实现!! 下篇帖子: HQL语言入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表