Можно ли создать CImageList с прозрачностью альфа-смешивания?
Я хотел бы знать, если возможно создать CImageList с прозрачностью альфа-смешивания.
Пример кода, который создает CImageList с ужасной прозрачностью (без альфа-смешивания)
CGdiPlusBitmapResource m_pBitmap;
m_pBitmap.Load(IDB_RIBBON_FILESMALL,_T("PNG"),AfxGetResourceHandle());
HBITMAP hBitmap;
m_pBitmap.m_pBitmap->GetHBITMAP(RGB(0,0,0),&hBitmap );
CImageList *pList=new CImageList;
CBitmap bm;
bm.Attach(hBitmap);
pList->Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 4);
pList->Add(&bm, RGB(255,0,255));
1 ответ
Решение
Не используйте ILC_MASK
флаг (из MSDN):
Использование 32-битных сглаженных иконок
Списки изображений Windows XP, представляющие собой наборы изображений, используемых с определенными элементами управления, такими как элементы управления списком, поддерживают использование 32-разрядных сглаженных значков и растровых изображений. Значения цвета используют 24 бита, а 8-значные используются в качестве альфа-канала на значках. Чтобы создать список изображений, который может обрабатывать изображение размером 32 бита на пиксель (bpp), вызовите
ImageList_Create
передача функции вILC_COLOR32
флаг.