列表视图控件的创建
MFC为列表视图控件的操作提供了CListCtrl类。

如果我们不想在对话框模板中直接拖入List Control来使用列表视图控件,而是希望动态创建它,则要用到CListCtrl类的成员函数Create函数,原型如下:

virtual BOOL Create(DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID
);

参数rect为列表视图控件的位置和尺寸,pParentWnd为指向父窗口的指针,nID指定列表视图控件的ID,最复杂的一个参数同样还是dwStyle,它用于设定列表视图控件的风格,可以是以下风格的组合:

          风格                                                含义LVS_ALIGNLEFT                        显示格式是大图标或小图标时,标签放在图标的左边LVS_ALIGNTOP                         显示格式是大图标或小图标时,标题放在图标的上边LVS_AUTOARRANGE                 显示格式是大图标或小图标时,自动排列控件中的列表项LVS_EDITLABELS                      用户可以修改标签文本LVS_ICON                                 指定大图标显示格式LVS_LIST                                  指定列表显示格式LVS_NOCOLUMNHEADER         在报表格式中不显示列的表头LVS_NOLABELWRAP                显示格式是大图标时,使标签文本单行显示。默认是多行显示LVS_NOSCROLL                       列表视图控件无滚动条,此风格不能与LVS_LIST或LVS_REPORT组合使用LVS_NOSORTHEADER              报表格式的列表视图控件的表头不能作为排序按钮使用LVS_OWNERDRAWFIXED        由控件的拥有者负责绘制表项LVS_REPORT                           指定报表显示格式LVS_SHAREIMAGELISTS           使列表视图共享图像序列LVS_SHOWSELALWAYS           即使控件失去输入焦点,仍显示出项的选择状态LVS_SINGLESEL                       指定只能有一个列表项被选中。默认时可以多项选择LVS_SMALLICON                      指定小图标显示格式LVS_SORTASCENDING             按升序排列列表项LVS_SORTDESCENDING          按降序排列列表项

与前面的控件一样,除了以上风格一般我们还要为列表视图控件设置WS_CHILD和WS_VISIBLE风格。对于直接在对话框模板中创建的列表视图控件,其属性页中的属性与上述风格是对应的,例如,属性Alignment默认为Left,也就等价于指定了LVS_ALIGNLEFT风格。

CListCtrl类的主要成员函数

 UINT GetSelectedCount( ) const;**//该函数返回列表视图控件中被选择列表项的数量。**
POSITION GetFirstSelectedItemPosition( ) const;

获取列表视图控件中第一个被选择项的位置。返回的POSITION值可以用来迭代来获取其他选择项,可以当作参数传入下面的GetNextSelectedItem函数来获得选择项的索引。如果没有被选择项则返回NULL。
int GetNextSelectedItem(POSITION& pos) const;

该函数获取由pos指定的列表项的索引,然后将pos设置为下一个位置的POSITION值。参数pos为之前调用GetNextSelectedItem或GetFirstSelectedItemPosition得到的POSITION值的引用。返回值就是pos指定列表项的索引。

int GetItemCount( ) const;//获取列表视图控件中列表项的数量。
int InsertColumn(int nCol,const LVCOLUMN* pColumn );
int InsertColumn(int nCol,LPCTSTR lpszColumnHeading,int nFormat = LVCFMT_LEFT,int nWidth = -1,int nSubItem = -1 );

这两个函数用于在报表式列表视图控件中插入列。第一个函数中,nCol参数为插入列的索引,pColumn参数指向LVCOLUMN结构,其中包含了插入列的属性。第二个函数中,nCol参数也是插入列的索引,lpszColumnHeading参数为列标题字符串,nFormat参数为列中文本的对齐方式,可以是LVCFMT_LEFT、LVCFMT_RIGHT或LVCFMT_CENTER,nWidth参数为列宽,nSubItem为插入列对应列表子项的索引。两个函数在成功时都返回新列的索引,失败都返回-1。

 BOOL DeleteColumn(int nCol);

该函数用于删除列表视图控件中的某列。参数nCol为删除列的索引。删除成功则返回TRUE,失败返回FALSE。

 int InsertItem(int nItem,LPCTSTR lpszItem);

向列表视图控件中插入新的列表项。参数nItem为要插入项的索引,参数lpszItem为要插入项的标签字符串。如果插入成功则返回新列表项的索引,否则返回-1。

   BOOL DeleteItem(int nItem);

从列表视图控件中删除某个列表项。参数nItem指定了要删除的列表项的索引。删除成功则返回TRUE,否则返回FALSE。

 CString GetItemText(int nItem,int nSubItem) const;

获取指定列表项或列表子项的显示文本。参数nItem指定了列表项的索引,参数nSubItem指定了列表子项的索引。

 BOOL SetItemText(int nItem,int nSubItem,LPCTSTR lpszText);

设置指定列表项或列表子项的显示文本。参数nItem和nSubItem同GetItemText。参数lpszText为要设置的显示文本字符串。如果设置成功则返回TRUE,否则返回FALSE。

  DWORD_PTR GetItemData(int nItem) const;

该函数用于获取指定列表项的附加32位数据。参数nItem为列表项的索引。返回值就是由nItem指定列表项的附加32位数据。

   BOOL SetItemData(int nItem,DWORD_PTR dwData);

该函数用于为指定列表项设置附加32位是数据。参数nItem为列表项的索引,参数dwData为列表项的附加32位数据。

以下为一个例子
新建一个基于对话框的MFC程序,
先消掉所有的控件,手动在工具箱中拖一个控件至界面,并将ID改为IDC_LISTCTRL,同时设置属性View为Report,关联控件变量m_listCtrl. 新建静态文本框和编辑框,改变两者的ID和caption,并将编辑框关联数值变量为m_strSelectLan
在InitDialog中添加如下代码
/

    //TODO: 在此添加额外的初始化代码CRect rect;m_listCtrl.GetClientRect(&rect);DWORD dwStyle = m_listCtrl.GetExtendedStyle();m_listCtrl.SetExtendedStyle(dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);m_listCtrl.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width() / 3, 0);m_listCtrl.InsertColumn(1, _T("2012年排名"), LVCFMT_CENTER, rect.Width() / 3, 1);m_listCtrl.InsertColumn(2, _T("2011年排名"), LVCFMT_CENTER, rect.Width() / 3, 2);m_listCtrl.InsertItem(0, _T("Java"));m_listCtrl.SetItemText(0, 1, _T("1"));m_listCtrl.SetItemText(0, 2, _T("1"));m_listCtrl.InsertItem(1, _T("C"));m_listCtrl.SetItemText(1, 1, _T("2"));m_listCtrl.SetItemText(1, 2, _T("2"));m_listCtrl.InsertItem(2, _T("C#"));m_listCtrl.SetItemText(2, 1, _T("3"));m_listCtrl.SetItemText(2, 2, _T("6"));m_listCtrl.InsertItem(3, _T("C++"));m_listCtrl.SetItemText(3, 1, _T("4"));m_listCtrl.SetItemText(3, 2, _T("3"));

单击CListCtrl控件,右键选择“添加事件响应函数”,类列表选择*dlg,消息类型选择
NM_CLICK,也就是用户在控件内单击鼠标左键的事件响应函数。进入对应的函数
void CMy74CListCtrlDlg::OnNMClickListctrl(NMHDR
pNMHDR, LRESULT
pResult)
添加代码如下:


// TODO: 在此添加控件通知处理程序代码*pResult = 0;/第一种方法/*NMLISTVIEW* pnmLV = (NMLISTVIEW*)pNMHDR;if (-1 != pnmLV->iItem) {m_strSelectLan = m_listCtrl.GetItemText(pnmLV->iItem, 0); UpdateData(false);}*///********第二种方法**************//找出鼠标的位置DWORD dwPos = GetMessagePos();CPoint point(LOWORD(dwPos), HIWORD(dwPos));m_listCtrl.ScreenToClient(&point);//CListCtrl的父类是CWnd定义结构体LVHITTESTINFO lvinfo;lvinfo.pt = point;获取行号信息int item = m_listCtrl.HitTest(&lvinfo);if (-1 != item) {m_strSelectLan = m_listCtrl.GetItemText(item, 0);UpdateData(false);}

20200220 MFC之列表控件技术总结 CListCtrl (一)相关推荐

  1. MFC下列表控件的使用

    MFC下列表控件的使用 2012-11-09 16:46:57|  分类: 程序VC相关 |  标签: |字号大中小 订阅 1.应该加入头文件 #include <Atlbase.h> 2 ...

  2. Visual studio C++ MFC之列表控件CListCtrl Control

    背景 本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题. 正文 列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以 ...

  3. MFC之列表控件ListCtrl

    MFC列表控件ListCtrl如图: 列表控件ListCtrl样式属性(风格)有: Icon大图标,SmallIcon小图标.List列表.Report报告 ,但今天只谈Report报告样式: 一:基 ...

  4. MFC 给列表控件发送左键单击、双击、以及右键单击消息

    void CTestsetting::SendClickToList() {NMITEMACTIVATE NMItemActive;NMHDR thdr;thdr.code = NM_CLICK; / ...

  5. mfc mysql clistctrl_MFC控件使用总结——CListCtrl - mlidify的专栏 - CSDN博客

    MFC控件使用总结--CListCtrl 收藏 CListCtrl介绍 列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值.LVS_ICON ,LVS_SM ...

  6. MFC 列表控件CListCtrl加载类似QQ界面的头像与文字

    本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn.InsertItem.SetItemTe ...

  7. MFC列表控件ListControl和树控件TreeControl

    列表控件 列表相关的类:CListCtrl-父类是CWnd,本质是一个控件: CListView-父类是CView,本质是一个视图.相当于在视图中嵌入了一个CListCtrl控件 列表控件的使用 1. ...

  8. VC6.0 MFC 列表框 列表控件 添加 修改 删除

    VC6.0 MFC 列表框 列表控件 添加 修改 删除 写在前面:列表框是很常用,并且很重要的一个控件,那么接下来,就跟随我的脚步,去探索它的奥秘吧! 一.未卜先知 1.编译运行后,点击"学 ...

  9. MFC中CImageList(图形列表控件)、CTreeCtrl(树形列表控件)的简单用法

    网上资料: CImageList控件:用来保存一组相同大小的图标或位图,它没有图形显示界面,主要用途是为其它控件提供图形列表.可以通过索引访问图标或位图. CImageList常用的函数有: 函数 说 ...

最新文章

  1. 《Swift 权威指南》——导读
  2. ASP.NET(C#)常用数据加密和解密方法汇总
  3. springmvc使用spring自带日期类型验证
  4. javaScript数据类型(包括基本数据类型和非基本数据类型)
  5. 微型计算机继电器控制,可编程控制器与微机及继电器控制的区别 -解决方案-华强电子网...
  6. 图论 —— 图的连通性 —— Tarjan 求强连通分量
  7. Magento: 根据产品属性加载产品信息 Load A Category or Product by an Attribute
  8. oracle如何获取自增id,oracle实现自增id
  9. 最小路径问题_BFS
  10. Sublime text2空格替换tab键
  11. sip协议的功能及其应用
  12. 168.Excel表列名称
  13. JavaScript如何调用摄像头
  14. Panasonic: FP-X0 L30R 使用 FPWIN GR7 通讯及编程
  15. 计算机网络的三大功能,计算机网络主要功能
  16. RN 启动开发服务器时报错 ReferenceError: SHA-1 for file
  17. svchost.exe占用cpu过高怎么处理(原因及解决办法)
  18. 人脸识别支付欺诈手段和防范措施
  19. Android 三大图片缓存原理、特性对比
  20. FI MM CO T-CODE

热门文章

  1. 郴州职高哪个学计算机好,2021湖南郴州有什么职高学校
  2. Customizing Navigation Bar and Status Bar in iOS 7
  3. E+H悬浮物测量传感器CUS51D-AAD1A3
  4. ASP.NET Core 集成AAD认证在Docker中运行时要注意的一个问题
  5. 135编辑器html点击图片播放音乐,怎么用135编辑器排版 公众号怎么做点击切换图片...
  6. 《光剑教教义:五信 九训 十诫 九罪》
  7. LEARUN快速开发平台,让开发变得更简单
  8. ggplot2——饼图篇
  9. 世界三大质量奖项介绍---波多里奇奖(转载)
  10. 使用 Screen 创建并管理多个 shell