MFC控件——列表控件——ListCtrl (转)

VC 列表控件 CListCtrl成员
详见MSDN
http://msdn.microsoft.com/en-us/library/Aa453379

CListCtrl 类封装“列表视图控件”功能,显示每个包含图标(列表视图中)和标签的收集。除图标和标签外,每一项还能有显示在图标和标签的右边的列中的信息。此控件(以及CListCtrl类)只适用于运行于Windows 95和Windows NT 3.51及更高版本的程序。

视图
  列表视图控件可用四种不同方式显示其内容,称为“视图”。
· 图标视图
     每一项以全尺寸图标(32×32像素)出现,下面有一个标签。用户可在列表视图窗口拖动项到任意位置。 
· 小图标
     视图每一项以小图标(16×16像素)出现,右边有一个标签。用户可在列表视图窗口拖动项到任意位置。 
· 列表视图
     每一项以小图标出现,下面有一个标签。项按列排列,不能拖动到列表视图窗口的任何位置。 
· 报表视图
     每一项在本行上出现,右边有排列成列的附加信息。最左边的列包含小图标和标签,下一列包含应用指定的子项。嵌入标题控件实现这些列。要了解报表视图标题控件和列的更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:给控件添加列(报表视图)”。 
 
 
扩展风格
  除了标准列表风格,类CListCtrl支持一系列提供丰富功能的扩展风格。此功能的一些示例包括:
· 逗留选择
  有效时,若光标保持在某项上一段时间,则允许自动选择该项。 
· 虚列表视图
  如果有效,允许控件支持DWORD项。通过把管理应用项数据放在最顶上而成为可能。除了项选择和焦点信息,所有项信息必须由应用管理。要了解更多信息,请参阅联机文档“Visual C++程序员指南”中的“使用CListCtrl:虚列表控件”。 
· 单击或双击激活
  如果有效,允许热跟踪(项文本自动高亮显示)和高亮显示项的单击和双击激活。 
· 拖放列表命令
  如果有效,允许拖放列表视图控件中列的记录。只对报表视图有效。 
 
 
CListCtrl类的成员
    构造函数ClistCtrl 构造一个CListCtrl对象 
    Create 创建列表控件并将其附加给CListCtrl对象 
 
    属性GetBkColor 获取列表视图控件的背景色 
    SetBkColor 设置列表视图控件的背景色 
    GetImageList 获取用于绘制列表视图项的图象列表的句柄 
    SetImageList 指定一个图象列表到列表视图控件 
    GetItemCount 获取列表视图控件中的项的数量 
    GetItem 获取列表视图项的属性 
    GetCallbackMask 获取列表视图控件的回调掩码 
    SetCallbackMask 设置列表视图控件的回调掩码 
    GetNextItem 查找指定特性和指定指定项关系的列表视图项 
    GetFirstSeletedItemPosition 在列表视图控件中获取第一个选择的列表视图项的位置 
    GetNextSeletedItem 为重复而获取下一个选择的列表视图 
    GetItemRect 获取项的有界矩形 
    SetItemPosition 在列表视图控件中移动一项到指定位置 
    GetItemPosition 获取列表视图项的位置 
    GetStringWidth 指定需要显示所有指定字符串的最小列宽 
    GetEditControl 获取用于编辑一个项文本的编辑控件的句柄 
    GetColumn 获取控件的列的属性 
    SetColumn 设置列表视图列的属性 
    GetColumnWidth 获取报表视图或列表视图中的列的宽度 
    SetColumnWidth 改变报表视图或列表视图中的列的宽度 
    GetCheck 获取与某项相关的状态图象的当前显示状态 
    SetCheck 设置与某项相关的状态图象的当前显示状态 
    GetViewRect 获取列表视图控件中所有项的有界矩形 
    GetTextColor 获取列表视图控件的文本颜色 
    SetTextColor 设置列表视图控件的文本颜色 
    GetTextBkColor 获取列表视图控件的文本背景色 
    SetTextBkColor 设置列表视图控件的文本背景色 
    GetTopIndex 获取最高级项的索引 
    GetCountPerPage 计算可正好垂直放入列表视图控件中的项的数目 
    GetOrigin 获取列表视图控件的最初的当前视图 
    SetItemState 改变列表视图控件的项的状态 
    GetItemState 获取列表视图控件的项的状态 
    GetItemText 获取列表视图项或子项的文本 
    SetItemText 设置列表视图项或子项的文本 
    SetItemCount 准备一个列表视图控件以添加大量的项 
    GetItemData 获取与某项相关的应用所指定的值 
    SetItemData 设置项的应用指定的值 
    GetSelectedCount 获取列表视图控件中选择项的数量 
    SetColumnOrderArray 设置列表视图控件的列序(左或右) 
    GetColumnOrderArray 获取列表视图控件的列序(左或右) 
    SetIconSpacing 设置列表视图控件中的图标的距离 
    GetHeaderCtrl 获取列表视图控件的标题控件 
    GetHotCursor 获取在热调试对列表视图控件有效时使用的游标 
    SetHotCursor 设置在热调试对列表视图控件有效时使用的游标 
    GetSubItemRect 获取列表视图控件中某项的有界矩形 
    GetHotItem 获取当前在游标下的列表视图项 
    SetHotItem 设置列表视图控件的当前热项 
    GetSelectionMark 获取列表视图控件的选择屏蔽 
    SetSelectionMark 设置列表视图控件的选择屏蔽 
    GetExtendedStyle 获取列表视图控件的当前扩展风格 
    SetExtendedStyle 设置列表视图控件的当前扩展风格 
    SubItemHitTest 指定哪个列表视图项在指定位置,若存在 
    GetWorkAreas 获取列表视图控件的当前工作区 
    GetNumberOfWorkAreas 获取列表视图控件的当前工作区数量 
    SetItemCountEx 设置虚列表视图控件的项的数量 
    SetWorkAreas 设置列表视图控件中图标可以显示的区域 
    ApproximateViewRect 指定显示列表视图控件项所需的宽度和高度 
    GetBkImage 获取列表视图控件的当前背景图象 
    SetBkImage 设置列表视图控件的当前背景图象 
    GetHoverTime 获取列表视图控件的当前逗留时间 
    SetHoverTime 设置列表视图控件的当前逗留时间 
 
操作
    InsertItem 在列表视图控件中插入一个新项 
    DeleteItem 从控件中删除一项 
    DeleteAllItems 从控件中删除所有项 
    FindItem 查找具有指定的字符的列表视图项 
    SortItems 使用应用定义的比较函数排序列表视图项 
    HitTest 指定哪个列表视图在指定的位置上 
    EnsureVisible 保证项是可见的 
    Scroll 滚动列表视图控件的内容 
    ReDrawItems 强迫列表视图控件刷新一些项 
    Update 强迫控件刷新一个指定的项 
    Arrange 调整一栏里的项 
    EditLabel 开始项文本该处编辑 
    InsertColumn 插入列表视图控件中的新列 
    DeleteColumn 从列表视图控件中删除一列 
    CreateDragImage 为指定的项构造一个拖动图象列表 
可覆盖的函数DrawItem 当自绘制控件的可视部分改变时被调用
 

CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理

     LVN_BEGINDRAG 鼠标左键正在被触发以便进行拖放操作(当鼠标左键开始拖拽列表视图控件中的项目时产生)

     LVN_BEGINRDRAG 鼠标右键正在被触发以便进行拖放操作(当鼠标右键开始拖拽列表视图控件中的项目时产生)

     LVN_BEGINLABELEDIT 开始编辑项的文本

     LVN_COLUMNCLICK 单击列(当鼠标单击列表视图控件列标题时产生)

     NM_CLICK 当鼠标单击列表视图控件时产生

     LVN_COLUMNCLICK 单击列

     LVN_DELETEALLITEMS 删除所有项

     LVN_DELETEITEM 删除某个项

     NM_DBLCLK 当鼠标双击列表视图控件时产生

     LVN_ENDLABELEDIT 结束对项文本的编辑

     LVN_GETDISPINFO 请求需要显示的信息

     LVN_GETINFOTIP 请求显示在工具提示窗口内的附加的文本信息

     LVN_HOTTRACK 鼠标滑过某个项

     LVN_INSERTITEM 当向列表视图控件插入项目时产生

     lVN_ITEMACTIVATE 激活某个项

     LVN_ITEMCHANGED 某个项已经发生变化

     LVN_ITEMCHANGING 某个项目正在发生变化

     NM_KILLFOCUS 当视表列图控件失去焦点时产生

     LVN_KEYDOWN 某个键被按下

     LVN_MARQUEEBEGIN 开始某个边框选择

     NM_OUTOFMEMORY 当内存溢出时产生

     LVN_ODCACHEHINT 虚拟列表控件的显示区域的内容发生了变化

     LVN_ODSTATECHANGED 虚拟列表的控件的某个项或某个范围内的项已经发生变化

     LVN_ODFINDITEM 需要拥有者查找一个特定的回调项

     NM_RCLICK 当鼠标右键单击列表视图控件时产生

     NM_RDBLCLK 当鼠标右键双击列表视图控件时产生

     NM_SETFOCUS 当列表视图控件获得焦点时产生

     LVN_SETDISPINFO 父窗口必须更新控件为项所维护的信息

 

注解:

     HDN:Header Notify
     LVN:ListView control Notify
     NM:Notify Message
     TVN:TreeView control Notify

 

LVN_ITEMCHANGED消息的处理

消息处理函数:

void C***Dlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult)
{
      NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

      if(pNMListView->uChanged==LVIF_STATE)
     {
           if(pNMListView->uNewState & LVIS_SELECTED)
          {
               //处理内容
               int nItem=pNMListView->iItem;
               CString value[6];
               for(int i=0;i<6;i++)
              {
                   value[i]=m_List.GetItemText(nItem,i);
              }
          }
    }
    *pResult = 0;
}

 

消息处理函数中的两个if条件句一定要有,否则可能出现多次进入处理内容的问题。

 

鼠标双击列表项事件的处理

响应NM_DBLCLK消息:

void CDisSalaryDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult)
{
       NM_LISTVIEW *pNMListView=(NM_LISTVIEW *)pNMHDR;

       int nItem=pNMListView->iItem;
       if(nItem>=0 && nItem<m_List.GetItemCount())            //判断双击位置是否在有数据的列表项上面
      {
            .............
      }


      *pResult = 0;
}

 

消息处理函数中的if语句很重要,用于判断双击位置是否在有数据的列表项上面。因为NM_DBLCLK消息是CListCtrl控件(整体)消息,只要是在CListCtrl控件范围之内执行此事件就会产生该消息,而不一定要在有数据的列表项上面。

#visual c++

转载于:https://www.cnblogs.com/LuckyRookie/p/3368188.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值