Растровые изображения не отображаются в представлении отчета CListCtrl

Я пытаюсь создать диалог в MFC, который содержит CListCtrl для отображения списка элементов со связанными изображениями. Однако изображения отображаются в виде пустых белых квадратов. Они есть или, по крайней мере, есть место, где они должны быть.

Я пытаюсь загрузить растровое изображение из файла (хотя я также пытался загрузить из идентификатора ресурса, который имеет тот же эффект), и я сохраняю его в CImageList. Этот список изображений затем передается в CListCtrl. Я совершенно уверен, что растровое изображение загружается правильно, поскольку мне удалось успешно загрузить это растровое изображение в другом месте моего проекта с использованием того же кода.

Я не уверен, важно ли это, но это является частью расширения оболочки контекстного меню, и диалоговое окно открывается, когда пользователь нажимает на один из элементов в контекстном меню проводника. Кроме того, я относительно новичок в MFC, поэтому извиняюсь, если я пропустил что-то действительно очевидное.

Ниже приведен мой код для инициализации CListCtrl в представлении отчета с двумя столбцами и одним элементом, который должен содержать изображение в первом столбце и некоторый текст во втором:

// Get reference to list control
CListCtrl m_list_control = (CListCtrl*)GetDlgItem(IDC_LISTCONTROL);

// Create image list
CImageList image_list;
image_list.Create(32, 32, ILC_COLOR4, 0, 3);

HANDLE hBitMap = ::LoadImage(0, L"E:\pathtomybitmap\bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
CBitmap bitmap;
bitmap.Attach((HBITMAP)hBitMap);

image_list.Add(&bitmap, RGB(255, 0, 255));

// Add the image list to the list control
// (LVSIL_NORMAL didn't seem to show anything at all)
m_list_control->SetImageList(&image_list, LVSIL_SMALL);// Add columns
LVCOLUMN column;
column.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_IMAGE;
column.fmt = LVCFMT_LEFT | LVCFMT_IMAGE;
column.cx = 100;
column.pszText = (LPWSTR)&L"Image";
column.iImage = 0;

m_list_control->InsertColumn(0, &column);

m_list_control->InsertColumn(1, _T("Text"), LVCFMT_LEFT, 100);int index = m_list_control->InsertItem(0, _T(""), 0);
m_list_control->SetItemText(0, 1, _T("My text"));

Есть идеи, что я делаю не так?

0

Решение

Попробуйте изменить оператор создания так, чтобы размер, который вы помещаете, был меньше размера изображения

image_list.Create(31, 31, ILC_COLOR4, 0, 3);

Попробуйте установить аргумент маски элемента вставки в:

InsertItem(LVIF_TEXT | LVIF_IMAGE,...
0

Другие решения

Других решений пока нет …