Почему вокруг иконок остается серая область? (см. рис.) Как сделать, чтобы она исчезла? В SDK написано: "The ImageList_AddMasked function also adds bitmapped images to a masked image list. This function is similar to ImageList_Add, except that you do not specify a mask bitmap. Instead, you specify a color that the system combines with the image bitmap to automatically generate the masks. Each pixel of the specified color in the image bitmap is changed to black, and the corresponding bit in the mask is set to 1. As a result, any pixel in the image that matches the specified color is transparent when the image is drawn. " Код: ... invoke LoadBitmap, [wc.hInstance], 7 mov ebx, eax invoke GetObject,ebx,sizeof.BITMAP, bmp invoke ImageList_Create, 16, [bmp.bmHeight], ILC_COLORDDB+ILC_MASK, 30, 0 or eax,eax jz end_loop mov [hImageList],eax invoke ImageList_AddMasked, [hImageList], ebx, 0xff00ff ; ff00ff = розовый = прозрачный invoke DeleteObject, ebx invoke SendMessage, [hТabControl], TCM_SETIMAGELIST, 0, [hImageList] ...
ILC_COLOR32 Старые версии ImageList вообще полноцветные картинки не поддерживали, а новые поддерживают как-то не совсем правильно... Я обычно 16-цветные картинки использую
censored C помощью графического редактора я могу назначить для *.bmp любой цвет который и будет считаться прозрачным, я это сделал, но все осталось по старому. Да и в SDK ведь написано, что нужно просто указать цвет заменяемый на прозрачный. Quantum Делал *.bmp 256-цветным и 16-цветным, но все осталось по старому. В чем проблема?
cresta C самодельными ( я использую bmp 480x16 как заготовку для будущих иконок). Серый фон в заголовках ListView, в закладках SysTabControl32. Этот серый цвет совпадает с системным цветом в Свойства экрана - Оформление - Дополнительно - Текст в окне [фон], если его заменить на белый, то фон вокруг иконок станет белым.
NAGRIS Что-то у Вас напутано с цветами, ведь в примере задаётся малиновый цвет фона, а на скриншоте виден оттенок серого. Подобный код, но с 16-цветной картинкой, малиновым фоном и ключами ILC_COLOR16 | ILC_MASK у меня всю жизнь прекрасно работал. 256 и 24-бит тоже работают как надо. GetObject не нужен. Код (Text): hImg = ImageList_Create(BMP_WIDTH,BMP_HEIGHT,ILC_COLOR16 | ILC_MASK,1,0); hBmp = LoadImage(hInstance,(char*)LOGOBMP,IMAGE_BITMAP,0,0,0); ImageList_AddMasked(hImg,hBmp,0xFF00FF); Вы уверены что RGB фона задан абсолютно правильно? Может графический редактор сохраняет его иначе?
Quantum Вот мой bmp Вот мой код Код (Text): ... invoke LoadBitmap,[wc.hInstance],7 mov ebx,eax invoke GetObject,ebx,sizeof.BITMAP,bmp invoke ImageList_Create,16,[bmp.bmHeight],ILC_COLOR16+ILC_MASK,30,30 or eax,eax jz end_loop mov [hImageList],eax invoke ImageList_AddMasked,[hImageList],ebx,0xFF00FF invoke DeleteObject,ebx invoke SendMessage,[hТabControl],TCM_SETIMAGELIST,0,[hImageList] ... Фон = FF00FF Если закомментировать invoke GetObject,ebx,sizeof.BITMAP,bmp , то программа запустится и сразу закроется, только окно мигнет на экране. Я писал выше Может глюк FASM?
Если бы это был BMP, а не PNG, я бы смог проверить действительно ли в нём 16 цветов, а так от картинки пользы мало. Просто вместо bmp.bmHeight надо написать 16, а GetObject можно убрать подальше, т.к. она тут ничего не делает. У меня на XP нет такой опции. Win2k? Похоже на глюк, но только не фасма, а таб-контрола. Может, стоит поменять LoadBitmap на LoadImage на всякий случай? А если заюзать иконки вместо bmp?
Quantum Картинку я загрузил только, чтобы показать, что фон не серый, а розовый. Картинка 16 цветная, для уменьшения цвета использовал Irfan View (думаю он не врет). GetObject удалил - спасибо! Нет WinXP SP2 RUS. Описание как добраться до описанной опции [Правый клик на рабочем столе - Свойства - закладка Оформление - кнопка Дополнительно - там картинка, жмете на окне с надписью Текст в окне. Про этот цвет я и писал. ] Тогда и глюк заголовка ListView ?? и возможно всех других контролов. Я бы заюзал иконки и LoadImage, но во всех исходниках которые я нашел, используют bmp и LoadBitmap, там этот код работает ( этот код я выдрал из какого-то исходника и немного изменил). Раз везде используют bmp и LoadBitmap, то я подумал, что это проще всего.