我有一个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());
}
}
我添加了一个新列,其中包含行的图标。
我无法正确了解如何在添加的列的单元格中添加图标。考虑将它添加到第一列。
请建议。
答案 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);