Я пытаюсь отобразить изображения с наложениями в 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
).
Я не могу найти разумную документацию для того, чтобы сделать это где-нибудь в Интернете. Кто-нибудь может увидеть, что мне не хватает?
Джонатан Поттер был прав, что мне нужно было включить ILC_MASK
флаг для SetOverlayImage()
Возвращает значение, которое указывает на успех.
Тем не менее, из всей документации, которую я мог найти в Интернете, ничто не содержало полного описания того, как это сделать. Например, я не нашел ни одного источника, который бы показывал, как должно выглядеть мое растровое изображение.
Чтобы сделать это более сложным, я использую ILC_COLOR32
для обозначения 32-битного цветного растрового изображения с альфа-каналом (прозрачностью). Поэтому у меня нет маски и маска не совместима с альфа-каналами.
Итак, в конце я просто создал растровое изображение с двумя изображениями: первое — это папка, а второе — это папка с моим наложенным изображением поверх нее. Задача решена.
На этом этапе кажется бессмысленным пытаться выяснить, могут ли маски создаваться с помощью 32-битных растровых изображений альфа-канала.