Здраствуйте, столкнулся с проблемой, создаю кнопку(CMFCButton) помещаю на нее изображение и получаю:
Изображение иконки находится в четком квадрате другого цвета.
Если я не программно создаю кнопку а просто в ресурсах ее положу на форму и пропишу в свойствах изображение, то фон иконки будет цветом кнопки и этого квадрата не будет видно.
Как сделать прозрачный фон изображения помещаемого на кнопку CMFCButton?
код:
m_btnTest.Create(L"Тест",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP,
CRect(2, 99, 119, 136), this, IDC_MFCBUTTON1);
CImageList imLst; imLst.Create(IDB_BITMAP1, 32, 4, ILC_COLOR32);
m_btnTest.SetIcon(imLst.ExtractIcon(10));
m_btnTest.m_bDrawFocus = TRUE;
m_btnTest.m_nFlatStyle = CMFCButton::BUTTONSTYLE_FLAT;
m_btnTest.m_bTransparent = true;
m_btnTest.SetMouseCursorHand();
Здравствуйте, _agg, Вы писали:
_>CImageList imLst; imLst.Create(IDB_BITMAP1, 32, 4, ILC_COLOR32);
Неправильно ImageList создается.
В этой перегрузке CImageList::Create последний параметр COLORREF, а не флаги ILC_...
Должен указываться цвет, который считается маркером прозрачности, по нему будет сгенерирована маска.
Если мне склероз не изменяет, то это работает только для битмапов до 8bpp (256 цветов).
Если создавать CImageList с указанием флагов, то как минимум надо еще ILC_MASK указывать для поддержки прозрачности.
Даже, если битмапка 32bpp с альфа-каналом, то обычные GDI-шные функции не выводят с полупрозрачностью.
Там должна функция AlphaBlend использоваться или GDI+.
Надо смотреть, как CMFCButton иконку рисует. Если функциями DrawIcon или DrawState, то альфа-канал не будет учитываться.
Здравствуйте, qaz77, Вы писали:
Q>Здравствуйте, _agg, Вы писали:
_>>CImageList imLst; imLst.Create(IDB_BITMAP1, 32, 4, ILC_COLOR32);
Q>Неправильно ImageList создается.
Q>В этой перегрузке CImageList::Create последний параметр COLORREF, а не флаги ILC_...
Q>Должен указываться цвет, который считается маркером прозрачности, по нему будет сгенерирована маска.
Q>Если мне склероз не изменяет, то это работает только для битмапов до 8bpp (256 цветов).
Q>Если создавать CImageList с указанием флагов, то как минимум надо еще ILC_MASK указывать для поддержки прозрачности.
Q>Даже, если битмапка 32bpp с альфа-каналом, то обычные GDI-шные функции не выводят с полупрозрачностью.
Q>Там должна функция AlphaBlend использоваться или GDI+.
Q>Надо смотреть, как CMFCButton иконку рисует. Если функциями DrawIcon или DrawState, то альфа-канал не будет учитываться.
Спасибо большое, действительно взял иконку из другого проекта 8 бит цвет и все встало на свои места.