Как в элементе управления CListCtrl в разных строках вывести разные иконки?
Как в CListCtrl в разных строках вывести разные иконки?
TCHAR str[256]; // для преобразования CString->LPTSTR
CFile* pFile = NULL;
HICON hIcon; // дескриптор иконки
WORD iconNum = 0; // № иконки в файле
m_imageList.Create(16, 16, ILC_COLOR, 1, 1); // список изображений
m_listView.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP |
LVS_REPORT | LVS_EDITLABELS | LBS_NOTIFY,
CRect(7, 7, 593, 220), this, IDC_LISTVIEW); // просмотровое окно списка
m_listView.SetImageList(&m_imageList, LVSIL_SMALL);
// Формируем колонки
.............
// Заполняем список строками, пытаемся вставить иконки
for ( int i = 0; i < 10; i++ )
{
CString sFile = m_aFileName.GetAt(i); // получаем строку с именем файла
try
{
pFile = new CFile(_T(sFile), CFile::modeRead | CFile::shareDenyNone);
lstrcpy(str, sFile);
hIcon = ::ExtractAssociatedIcon(::AfxGetInstanceHandle(), str, &iconNum);
m_imageList.Add(hIcon);
lvItem->iImage = i;
...................
delete pFile;
}
catch(...) {........}
}
Спасибо за ответ!
Цитата:
Originally posted by Doomych
Код нижеследующий. Результат: во всех строках иконки - одинаковые. Но, по крайней мере, с каждым циклом for дескриптор иконок hIcon принимает разные значения и список изображений m_imageList заполняется этими дескрипторами.
Как в CListCtrl в разных строках вывести разные иконки?
TCHAR str[256]; // для преобразования CString->LPTSTR
CFile* pFile = NULL;
HICON hIcon; // дескриптор иконки
WORD iconNum = 0; // № иконки в файле
m_imageList.Create(16, 16, ILC_COLOR, 1, 1); // список изображений
m_listView.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP |
LVS_REPORT | LVS_EDITLABELS | LBS_NOTIFY,
CRect(7, 7, 593, 220), this, IDC_LISTVIEW); // просмотровое окно списка
m_listView.SetImageList(&m_imageList, LVSIL_SMALL);
// Формируем колонки
.............
// Заполняем список строками, пытаемся вставить иконки
for ( int i = 0; i < 10; i++ )
{
CString sFile = m_aFileName.GetAt(i); // получаем строку с именем файла
try
{
pFile = new CFile(_T(sFile), CFile::modeRead | CFile::shareDenyNone);
lstrcpy(str, sFile);
hIcon = ::ExtractAssociatedIcon(::AfxGetInstanceHandle(), str, &iconNum);
m_imageList.Add(hIcon);
lvItem->iImage = i;
...................
delete pFile;
}
catch(...) {........}
}
Спасибо за ответ!
Код нижеследующий. Результат: во всех строках иконки - одинаковые. Но, по крайней мере, с каждым циклом for дескриптор иконок hIcon принимает разные значения и список изображений m_imageList заполняется этими дескрипторами.
Как в CListCtrl в разных строках вывести разные иконки?
TCHAR str[256]; // для преобразования CString->LPTSTR
CFile* pFile = NULL;
HICON hIcon; // дескриптор иконки
WORD iconNum = 0; // № иконки в файле
m_imageList.Create(16, 16, ILC_COLOR, 1, 1); // список изображений
m_listView.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP |
LVS_REPORT | LVS_EDITLABELS | LBS_NOTIFY,
CRect(7, 7, 593, 220), this, IDC_LISTVIEW); // просмотровое окно списка
m_listView.SetImageList(&m_imageList, LVSIL_SMALL);
// Формируем колонки
.............
// Заполняем список строками, пытаемся вставить иконки
for ( int i = 0; i < 10; i++ )
{
CString sFile = m_aFileName.GetAt(i); // получаем строку с именем файла
try
{
pFile = new CFile(_T(sFile), CFile::modeRead | CFile::shareDenyNone);
lstrcpy(str, sFile);
hIcon = ::ExtractAssociatedIcon(::AfxGetInstanceHandle(), str, &iconNum);
m_imageList.Add(hIcon);
lvItem->iImage = i;
...................
delete pFile;
}
catch(...) {........}
}
Спасибо за ответ!
// так будет более надежно
lvItem->iImage = m_imageList.Add(hIcon);
Все оказалось предельно просто: при заполнении структуры LV_ITEM, задавая маску достоверности (mask), я не указал, что член iImage содержит достоверные данные, то есть в маску надо было добавить LVIF_IMAGE.