本文主要讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn、InsertItem、SetItemText向列表插入数据,CImageList插入BMP图片或ICON图标.

一.创建项目及界面

1.创建项目
    创建项目名为"QQList"的基于MFC对话框的应用程序.资源视图中对话框IDD_QQLIST_DIALOG删除"TODE"和按钮,并添加List Control控件.

2.添加成员变量
    项目->类向导->类名为"CQQListDlg"->成员变量点击"IDC_LIST1"添加成员变量public(访问) CListCtrl(变量类型) m_list(变量名).同时添加成员变量CImageList m_imList调用其函数实现添加图片.

3.插入3张BMP图片
    右键"资源视图"中"Dialog"->选择"添加资源"->点击"Bitmap"->导入本地图片3张(工程文件res文件夹中).其ID分别为IDB_BITMAP1,IDB_BITMAP2,IDB_BITMAP3.
注意:在加载图片时,已经使用画图把图片修改为64*64像素的24位彩色BMP图片,在后面对应的m_imList.Create(64,64,ILC_COLOR24,10,20)函数即加载它.倘若选择ILC_COLOR或32*32会出现几位黑白色或大小失真现象.

4.添加自定义函数
    在"类向导"中向CQQListDlg中添加方法void CQQListDlg::InsertPicAndWord(void)该函数即实现添加图片和文字功能.
其中QQListDlg.h中的代码如下图所示:

public://成员变量CListCtrl m_list;            // 列表控件 IDC_LIST1CImageList m_imList;         // 图像列表(相同大小图像集合)
public://成员函数void InsertPicAndWord(void); // 实现插入图片和文字

二.源代码

其中主代码void CQQListDlg::InsertPicAndWord(void)如下:

// 调用该函数实现向CListCtrl中加载图片和文字
void CQQListDlg::InsertPicAndWord(void)
{// 设置CListCtrl控件扩展风格:整行选中\绘制表格\子项目图标列表DWORD dwStyle; dwStyle = m_list.GetExtendedStyle();  dwStyle = dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES ;m_list.SetExtendedStyle(dwStyle);   // 载入64*64像素 24位真彩(ILC_COLOR24)图片m_imList.Create(64,64,ILC_COLOR24,10,20);    // 创建图像序列CImageList对象CBitmap * pBmp = NULL;pBmp = new CBitmap(); pBmp->LoadBitmapW(IDB_BITMAP1);              // 载入位图IDB_BITMAP1m_imList.Add(pBmp,RGB(0,0,0));  delete pBmp;  //pBmp = new CBitmap();  pBmp->LoadBitmapW(IDB_BITMAP2);  m_imList.Add(pBmp,RGB(0,0,0));  delete pBmp;//pBmp = new CBitmap();  pBmp->LoadBitmapW(IDB_BITMAP3);  m_imList.Add(pBmp,RGB(0,0,0));  delete pBmp;// 设置CImageList图像列表与CListCtrl控件关联 LVSIL_SMALL小图标列表m_list.SetImageList(&m_imList,LVSIL_SMALL);// 向列表视图控件InsertColumn插入3列数据 CRect mRect;m_list.GetWindowRect(&mRect);                     // 获取控件矩形区域int length = mRect.Width();m_list.InsertColumn(0, _T("用户头像"), LVCFMT_CENTER, length / 4, -1);m_list.InsertColumn(1, _T("用户名"), LVCFMT_CENTER, length / 4, -1);m_list.InsertColumn(2, _T("QQ格言"), LVCFMT_CENTER, length / 2, -1);// 添加数据 InsertItem向列表中插入主项数据 SetItemText向列表中的子项写入数据int nRow;                                        // 记录行号 LVITEM lvItem={0};                               // 列表视图控 LVITEM用于定义"项"的结构//第一行数据lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE;   // 文字、图片、状态lvItem.iItem = 0;                                // 行号(第一行)lvItem.iImage = 0;                               // 图片索引号(第一幅图片 IDB_BITMAP1)lvItem.iSubItem = 0;                             // 子列号nRow = m_list.InsertItem(&lvItem);               // 第一列为图片m_list.SetItemText(nRow,1,_T("dog"));            // 第二列为名字m_list.SetItemText(nRow,2,_T("人生在于奋斗"));     // 第三列为格言//第二行数据lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE;   // 文字、图片、状态lvItem.iItem = 1;                                // 行号(第二行)lvItem.iImage = 1;                               // 图片索引号(第二幅图片 IDB_BITMAP2)lvItem.iSubItem = 0;                             // 子列号nRow = m_list.InsertItem(&lvItem);     m_list.SetItemText(nRow,1,_T("cat"));  m_list.SetItemText(nRow,2,_T("快乐生活每一天"));  //第二行数据lvItem.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_STATE;   // 文字、图片、状态lvItem.iItem = 2;                                // 行号(第三行)lvItem.iImage = 2;                               // 图片索引号(第三幅图片 IDB_BITMAP3)lvItem.iSubItem = 0;                             // 子列号nRow = m_list.InsertItem(&lvItem);      m_list.SetItemText(nRow,1,_T("pig"));   m_list.SetItemText(nRow,2,_T("Eastmount制作"));
}

同时需要在初始化程序时调用该函数即可实现:

BOOL CQQListDlg::OnInitDialog()
{...// TODO: 在此添加额外的初始化代码InsertPicAndWord();      // 调用该函数实现加载图片和文字return TRUE;             // 除非将焦点设置到控件,否则返回 TRUE
}

注意:现在可能你运行后会遇到一个错误就是SetItemText、InsertColum加载的数据和图片不能显示.Why?
那是需要设置CListCtrl控件IDC_LIST1属性View为Report风格.ListCtrl有四种风格:
Icons(图标)使用32*32大小图标显示列表
Small Icons(小图标)使用16*16大小图标显示单一列表
List(列表)使用Small Icons,可有多列,第二列必须填充之前必须填充第一列,自上而下排序
Report(报表)编程者自定义的格式显示列表
如果程序中想要在加载ICON图标,则代码为:

HICON hIcon;
m_imList.Create(32,32,ILC_COLOR24,10,20);
hIcon = AfxGetApp()->LoadIconW(IDI_ICON_GREE);
m_imList.Add(hIcon); 

程序运行结果:

希望文章能够对大家有所帮助,同时如果文章中有错误或不足之处,还请大家海涵.同时感谢文章资料的作者和向我提出该问题的那个同学.(By:Eastmount 2014-2-28 夜2点 原创:http://blog.csdn.net/eastmount)
下载源代码地址:http://download.csdn.net/detail/eastmount/6972035
参考资料及在线笔记:
(1).
ListCtrl控件,Report风格列表中添加图片 - ribut9225(主要讲述加载图片)
http://blog.csdn.net/ribut9225/article/details/6905165
(2).VC MFC列表视图(CListCtrl)控件 - 无尽的路(讲述CListCtrl加载图文字 附图)
http://hi.baidu.com/3582077/item/38858bb484e11477254b090a
(3).CListCtrl基础用法 - welkangm(详细讲述CListCtrl概述、加载数据 获取行号 删除行)
http://welkangm.blog.163.com/blog/static/190658510201232032336899/
(4).CListCtrl加载图片技术 - woshishushangdezhu(可参考加载动态路径下的图片F:\\)
http://blog.csdn.net/woshishushangdezhu/article/details/3938433
(5).如何更改CListCtrl每行的高度(可参考rwx_tech的回答设置行高度)
http://bbs.csdn.net/topics/60367436

MFC 列表控件CListCtrl加载类似QQ界面的头像与文字相关推荐

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

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

  2. 如何实现SAP UI5 Web Component React控件的加载效果

    假设我使用SAP UI5 Web Component的React控件, 比如柱状图和折线图: 导入useState函数,默认加载状态为false: 每次点击屏幕后,首先将Loading状态使用切换函数 ...

  3. MapGis二次开发——基础地图目录树控件的加载

    MapGis二次开发--基础地图目录树控件的加载 第一步:添加MapGis引用 MapGis动态库位置是在你安装位置下的\Program\plugin下,例如我的安装位置就是:D:\MapGIS 10 ...

  4. Lable加载 类似QQ表情 (unicode emoji字符集)

    Lable加载 类似QQ表情 (unicode emoji字符集) 偶然看到一篇文,发现竟然可以在iPhone中显示类似qq表情的符号.原来很简单,是iPhone支持unicodeemoji字符集缘故 ...

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

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

  6. C# 系统应用之ListView控件 (二).加载选中节点文件夹下文件信息

    在项目中的前面一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中我讲述了如何使用TreeView控件树状实现显示"我的电脑&quo ...

  7. asp.net 动态创建TextBox控件 如何加载状态信息

    接着上文Asp.net TextBox的TextChanged事件你真的清楚吗? 这里我们来说说状态数据时如何加载的. 虽然在Control中有调用状态转存的方法,但是这里有一个判断条件 if (_c ...

  8. java imageview的使用_Android使用控件ImageView加载图片的方法

    在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法. 最简单就是在 xml 里直接使用 ImageView 标签: android:orientation=& ...

  9. MFC列表控件(ListControl)

    1. CListCtrl 样式及设置 LVS_ICON: 每个item显示大图标LVS_SMALLICON: 每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT ...

最新文章

  1. How to install sougoupinyin on Debian/Ubuntu.
  2. [Unity3D]Script 脚本所有编译器属性详解
  3. jquery ajax json 数据的遍历
  4. Java final、static final 讲解
  5. python 关于异常处理 try...except... 的两个案例
  6. uva 10396——Vampire Numbers
  7. dvt高危患者的护理措施_dvt的预防及护理
  8. [erlang] mnesia
  9. SVD 与 PCA 的直观解释(1): 线性变换
  10. acs712电流检测怎么用_工程师都用这个巧妙廉价的电流检测电路!
  11. sketch文件导出没有背景色怎么办? sketch背景色消失的解决办法
  12. 【Mac进销存管理软件】Daily Sales Pro Mac
  13. Datalogic得利捷推出最新读码产品及终端应用,全面提升企业工业制造生产力
  14. 扩展有限元程序matlab,Abaqus中扩展有限元(XFEM)功能简介
  15. 睿思荐片--最好的电影,最全的排行
  16. QCC305x系列开发教程(入门篇)之1.3-烧录方式使用USB时的驱动安装及其出现“未知设备”的解决方法
  17. 农商银行计算机岗笔试题,广东农商银行金融科技岗笔试考什么?
  18. 《团》里男人是否可嫁的汉?
  19. 怎样取消开机硬盘自检?
  20. h5调用Android、ios的方法

热门文章

  1. 论文阅读计划2(Deep Joint Rain Detection and Removal from a Single Image)
  2. TestNG执行测试
  3. docker版wordpress
  4. 一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈...
  5. node.js中的框架
  6. 详解C调用lua脚本效率测试
  7. 配置纯净版Debian
  8. Dorado 7.1.20 发布,Ajax的Web开发平台
  9. 三维点云可以导航吗_基于视觉高精定位的“室内AR导航”技术点解析
  10. 什么是实例对象python_python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的...