如何在列CListCtrl的单元格中添加图标

时间:2016-05-29 11:20:05

标签: mfc

我有一个CListCtrl,可以在行中显示我的数据。它有两列。现在我需要添加另一个实际显示图标的列。

// set look and feel
listCtrl.SetExtendedStyle(listCtrl.GetExtendedStyle() | columnStyles);

添加行项目如下:

for (const auto dataValue : dataTable)
{
    int rowIndex = listCtrl.GetItemCount();
    listCtrl.InsertItem(rowIndex, dataValue.at(0).c_str());
    for (int colIndex = 1; colIndex < listCtrl.GetHeaderCtrl()->GetItemCount(); ++colIndex)
    {
        listCtrl.SetItemText(rowIndex, colIndex, dataValue.at(colIndex).c_str());
    }
}

我添加了一个新列,其中包含行的图标。

我无法正确了解如何在添加的列的单元格中添加图标。考虑将它添加到第一列。

请建议。

1 个答案:

答案 0 :(得分:0)

您不需要新列,因为图像显示在第一列的左侧(假设您的文本我假设您使用的是LVS_REPORT样式)。

您需要拥有与列表项目相同的图像数量的成员图像列表。因此,在列表的派生类中,添加一个成员:

CImageList m_ImageList;

然后在您的列表中OnCreate函数:

m_ImageList.Create(32, 32, ILC_COLOR24, numberOfEnableParts, 1);
m_ImageList.SetImageCount(n);

for (int i = 0; i< n; i++)
{

    if(InsertItem(n, sText) != -1)
    {
         //set text of columns with SetItemText
         //...
         // don't know if you use a icon or a bitmap; next line I did it for the second case
         m_ImageList->Replace(n, CBitmap::FromHandle(hBmp), (CBitmap*)NULL);

        //then, associate the item with its own image of the image list

        LVITEM lvi;
        lvi.iItem= i;
        lvi.iSubItem= 0;
        lvi.mask =  LVIF_IMAGE;
        lvi.iImage= i;
        SetItem(&lvi);

    }
}


SetImageList(m_ImageList, LVSIL_SMALL);