CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

急...哪位大俠用過CListCtrl::GetItem().....請教用法..

楼主zxw2844(赵轩)2005-08-02 19:06:50 在 VC/MFC / 基础类 提问

哪位大俠用過CListCtrl::GetItem().....請教用法..  
   
  我常試用CListCtrl::GetItem()來得到當前鼠標所在的行,列,和取出它的文本,---可惜都不成功!  
   
  希望各位大俠幫幫小弟!!!!... 问题点数:20、回复次数:11Top

1 楼Jarrylogin(正经事情我不会,歪门邪道样样行)回复于 2005-08-02 19:28:32 得分 5

//   Get   the   image   index   and   state   of   this   item.    
  ZeroMemory   (   &rItem,   sizeof(LVITEM)   );  
  rItem.mask     =   LVIF_IMAGE   |   LVIF_STATE;//LVIF_STATE,状态  
  rItem.iItem   =   nItem;  
  rItem.stateMask   =   LVIS_SELECTED;  
  m_list.GetItem   (   &rItem   );  
   
  获取rItem结构中对应的image和state两项的值  
  rItem应该是一个LVITEM结构体变量,   BOOL   GetItem(LVITEM   *   pItem),返回一个LVITEM结构体数据,是listctrl中的一个item,由rItem来保存  
  GetItem(LVITEM   *   pItem)指要取得控件中某个Item的信息,Item和要取得的信息由pItem指定,  
  typedef   struct   _LVITEM   {    
          UINT   mask;   //指定那些项是需要填充的  
          int   iItem;   //指定Item索引  
          int   iSubItem;   //如果小要取得的是Item的一个子项,在这里指定它的索引  
          UINT   state;    
          UINT   stateMask;    
          LPTSTR   pszText;    
          int   cchTextMax;    
          int   iImage;    
          LPARAM   lParam;  
  #if   (_WIN32_IE   >=   0x0300)  
          int   iIndent;  
  #endif  
  #if   (_WIN32_IE   >=   0x560)  
          int   iGroupId;  
          UINT   cColumns;   //   tile   view   columns  
          PUINT   puColumns;  
  #endif  
  }   LVITEM,   *LPLVITEM;    
  这个结构的具体含义MSDN上都有,自己看吧  
   
  Top

2 楼zxw2844(赵轩)回复于 2005-08-08 12:49:54 得分 0

怎么没有用啊!  
  ..........................  
  ............................求助!!!Top

3 楼orbit(走了走了)回复于 2005-08-08 13:19:02 得分 0

照抄他的代码肯定没用啊,要理解各个参数的意义,自己选择合适的参数使用,查MSDN是正途Top

4 楼orbit(走了走了)回复于 2005-08-08 13:22:09 得分 0

CListCtrl::GetHotItem  
   
  就在msdn上Top

5 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-08-08 13:22:31 得分 5

int   CurSel=m_ListCtrl.GetNextItem(-1,LVNI_ALL   |   LVNI_SELECTED);     //得到选中行的索引值  
   
  if(CurSel!=-1)   //返回1,表示没有行被选中  
  {  
  CString   strName=m_ListCtrl.GetItemText(CurSel,0);   //取0列的值  
  }  
   
  else  
      AfxMessageBox("你没有选中");Top

6 楼leonone()回复于 2005-08-08 13:51:16 得分 5

你可以响应鼠标消息,如NM_DBLCLK,自己派生一个CListCtrl,响应该消息  
  void   CMyListCtrl::OnNMDblclk(NMHDR   *pNMHDR,   LRESULT   *pResult)  
  {  
            pResult   =   0;  
   
          LPNM_LISTVIEW     pNMListView   =   (LPNM_LISTVIEW)pNMHDR;  
   
          int   index=pNMListView->iItem;  
          //得到当前发送消息的item索引  
          //你可以在MSDN中查看一下NMLISTVIEW结构体,里面有很多信息的  
          //相信这样应该OKle  
   
  }  
  Top

7 楼zxw2844(赵轩)回复于 2005-08-08 20:40:48 得分 0

....得到當前鼠標所在的行,列,和取出它的文本-----我用別的方法已經實現了,只是想常試用CListCtrl::GetItem()來實現!!!!  
  MSDN中:BOOL   GetItem(LVITEM*   pItem   )   const;  
            當*.mask   =   LVIF_COLUMNS;時,   出錯了,說LVIF_COLUMNS沒有定義...  
  ......................?????  
   
  另一個問題!!!  
                            如何實現用鼠標選擇一格紀錄,而且不是一整條紀錄..并且可以通過拖動鼠標同時選擇多條紀錄(多個單元格)--------只需在同一列能夠實現就可以了(同一列下,用鼠標拖動選擇多個單元格紀錄...)!!  
   
  -----------希望各位達人可以幫幫我,---Top

8 楼kenskens(☆☆☆☆☆☆)回复于 2005-08-08 21:03:58 得分 0

借楼主宝地一用:  
  void   CMyListCtrl::OnItemChanged(NMHDR   *pNMHDR,   LRESULT   *pResult)  
  {  
            pResult   =   0;  
   
          LPNM_LISTVIEW     pNMListView   =   (LPNM_LISTVIEW)pNMHDR;  
   
          int   index=pNMListView->iItem;  
           
          if(   (index   !=   -1)   &&   (pNMListView->uNewState   ==   3)   )  
          {  
                    //   为什么只有当uNewState==3时才是当前选中项的索引呢?而且此前函数还会被调用两次  
                    //   一次uOldState为2,一次为1,这两次的iItem值都是以前选项的索引,我查文档得知2  
                    //   是selected,   1是focus,   但是并没有值为3的解释  
          }  
  }  
   
  故想请教一下3是代表什么呢,还有这个oldState和newState,当选项发生改变时,为何会有一系列的变化,都各自代表什么意思呢??Top

9 楼zxw2844(赵轩)回复于 2005-08-09 18:21:43 得分 0

upTop

10 楼wxshzf(oldriver)回复于 2005-08-09 18:27:58 得分 0

LPNM_LISTVIEW     pNMListView   =   (LPNM_LISTVIEW)pNMHDR;  
  Top

11 楼lixiaosan(小三)回复于 2005-08-09 18:31:56 得分 5

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);  
  }  
  *pResult   =   0;  
  }  
  Top

相关问题

  • CListCtrl::GetItem的用法
  • 请教 CListCtrl 的用法
  • 请教:CListCtrl结合CImageList的用法
  • 请教CListCtrl的一个用法
  • CListCtrl的用法
  • CListCtrl的用法问题?
  • IWebBrowser用法请教
  • 请教TQuery用法?
  • 求教TPrinter用法
  • 求教 TIniFile用法???

关键词

  • win32
  • 结构
  • ritem
  • lvinfo
  • getitem
  • lvitem
  • clistctrl
  • iitem
  • lvif
  • dwpos

得分解答快速导航

  • 帖主:zxw2844
  • Jarrylogin
  • kugou123
  • leonone
  • lixiaosan

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo