如何在ListCtrl中显示不同的图片

使用范围:
1.如果你想list的不同item前面都是不一样的图片,可以用这个方法(这个方法是Icon模式,其它模式需要自己稍微修改一下就行,类似的)
2.用list来显示图片(这个只支持Icon模式)

效果如图:
如何在ListCtrl中显示不同的图片_第1张图片

其中图片下面的数字就是每个item的text,可以不要也可以要.

步骤如下:
1.添加资源(我添加的是位图资源)
这一步骤前面有文章已经说过,这里不再详细说了.

2.右键单击list属性,设置view为 Icon
如图所示:
如何在ListCtrl中显示不同的图片_第2张图片

3.关联list变量,然后添加成员变量和函数

    CImageList m_ImgList; //图像列表对象
    UINT m_uBmpID[20]; //存放资源ID
    UINT m_uImgID[20]; //存放添加到图像列表中的ID


    CListCtrl m_list;
    void Init();   //初始化m_uBmpID数组
    void AddBmp(); //向图像列表中添加位图

4.void Init 函数实现如下

    m_uBmpID[0] = IDB_BITMAP1;
    m_uBmpID[1] = IDB_BITMAP2;
    m_uBmpID[2] = IDB_BITMAP3;
    m_uBmpID[3] = IDB_BITMAP4;
    m_uBmpID[4] = IDB_BITMAP5;
    m_uBmpID[5] = IDB_BITMAP6;
    m_uBmpID[6] = IDB_BITMAP7;
    m_uBmpID[7] = IDB_BITMAP8;
    m_uBmpID[8] = IDB_BITMAP9;
    m_uBmpID[9] = IDB_BITMAP10;
    m_uBmpID[10] = IDB_BITMAP11;
    m_uBmpID[11] = IDB_BITMAP12;
    m_uBmpID[12] = IDB_BITMAP13;
    m_uBmpID[13] = IDB_BITMAP14;
    m_uBmpID[14] = IDB_BITMAP15;
    m_uBmpID[15] = IDB_BITMAP16;
    m_uBmpID[16] = IDB_BITMAP17;
    m_uBmpID[17] = IDB_BITMAP18;
    m_uBmpID[18] = IDB_BITMAP19;
    m_uBmpID[19] = IDB_BITMAP20;

5.void AddBmp()函数实现如下

    //创建图像列表 这里是32*32的图片 真彩色 透明背景
    m_ImgList.Create(32, 32, ILC_COLOR24 | ILC_MASK, 0, 0);
    for (int i = 0; i < 20 ; i++)
    {
        CBitmap bmp;
        bmp.LoadBitmap(m_uBmpID[i]);   //加载位图
        m_uImgID[i] = m_ImgList.Add(&bmp, RGB(0, 0, 0)); //添加位图到图像列表,返回该图像的序号
    }
    //获取指向列表控件的指针
    CListCtrl* pLc = (CListCtrl*)GetDlgItem(IDC_LIST1);
    pLc->ModifyStyle(LVS_ALIGNLEFT,LVS_ALIGNTOP);  //把水平滚动条换成垂直滚动条
    //这里必须用指针才能设置
    pLc->SetImageList(&m_ImgList, LVSIL_NORMAL);//显示正常图标

6.接着在初始化对话框中调用这两个函数即可

7.最后再添加按钮函数中添加item即可

    int iCount = m_list.GetItemCount();//获取列表中有多少item
    int i = iCount % 19;    //循环
    CString strText;
    strText.Format(_T("%d"), iCount + 1); //item text可要可不要
    m_list.InsertItem(iCount, strText,m_uImgID[i]);//最后一个参数就是图片的Id

只要稍加修改就可以做成 small icon list report 模式的带图标的列表了.

你可能感兴趣的:(MFC)