Невозможно установить изображение наложения для CListCtrl

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

Я не могу найти хорошую документацию для показа оверлеев на некоторых изображениях моих предметов.

Код, который не работает, показан ниже. У меня есть растровое изображение 64×32 со значком папки в первых 32×32 пикселей и оверлейным изображением во втором 32×32 пикселей (IDB_FOLDERS32_OVERLAY). Растровое изображение имеет прозрачные пленки, которые, кажется, работают нормально.

CBitmap bm;
bm.LoadBitmap(IDB_FOLDERS32_OVERLAY);
m_ImageList.Create(32, 32, ILC_COLOR32, 2, 1);
int index = m_ImageList.Add(&bm, RGB(0, 0, 0));
ASSERT(index >= 0);
m_ImageList.SetOverlayImage(index, 2);

Последняя строка возвращает 0, что указывает на ошибку. GetLastError() возвращает 6 (ERROR_INVALID_HANDLE).

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

2

Решение

Джонатан Поттер был прав, что мне нужно было включить ILC_MASK флаг для SetOverlayImage() Возвращает значение, которое указывает на успех.

Тем не менее, из всей документации, которую я мог найти в Интернете, ничто не содержало полного описания того, как это сделать. Например, я не нашел ни одного источника, который бы показывал, как должно выглядеть мое растровое изображение.

Чтобы сделать это более сложным, я использую ILC_COLOR32 для обозначения 32-битного цветного растрового изображения с альфа-каналом (прозрачностью). Поэтому у меня нет маски и маска не совместима с альфа-каналами.

Итак, в конце я просто создал растровое изображение с двумя изображениями: первое — это папка, а второе — это папка с моим наложенным изображением поверх нее. Задача решена.

На этом этапе кажется бессмысленным пытаться выяснить, могут ли маски создаваться с помощью 32-битных растровых изображений альфа-канала.

0

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


По вопросам рекламы [email protected]