CImageList -> Bitmap
От: BukaP  
Дата: 02.09.07 20:25
Оценка:
Добрый день!

Есть CImageList в который сохраняются иконки. В другой часте кода они должны быть извлечены преобразованы в CBitmap и добавлены в CMenu.

Если отрисовывать содержимое через CImageList::Draw или CDC::DrawIcon напрямую в окно, то иконка отображается с прозрачным фоном.

Если выполнить следующий код у иконки появляется заливка. Подскаите пожалуйста в чем ошибка!

CDC memDC;
memDC.CreateCompatibleDC(GetDesktopWindow()->GetDC());

CBitmap bitmap;
bitmap.CreateCompatibleBitmap(GetDesktopWindow()->GetDC(), 32, 32);
memDC.SelectObject(&bitmap);

m_ImageList.Draw(&memDC, 0, point, ILD_TRANSPARENT);
GetDC()->BitBlt(0, 0, 32, 32, &memDC, 0, 0, SRCCOPY);
Re: CImageList -> Bitmap
От: kmiken Украина  
Дата: 04.09.07 09:39
Оценка:
Здравствуйте, BukaP, Вы писали:

BP>Добрый день!


BP>Есть CImageList в который сохраняются иконки. В другой часте кода они должны быть извлечены преобразованы в CBitmap и добавлены в CMenu.


BP>Если отрисовывать содержимое через CImageList::Draw или CDC::DrawIcon напрямую в окно, то иконка отображается с прозрачным фоном.


BP>Если выполнить следующий код у иконки появляется заливка. Подскаите пожалуйста в чем ошибка!


BP>
BP>CDC memDC;
BP>memDC.CreateCompatibleDC(GetDesktopWindow()->GetDC());

BP>CBitmap bitmap;
BP>bitmap.CreateCompatibleBitmap(GetDesktopWindow()->GetDC(), 32, 32);
// Здесь мы имеем битмар, который содержит мусор
BP>memDC.SelectObject(&bitmap);

BP>m_ImageList.Draw(&memDC, 0, point, ILD_TRANSPARENT);
// Здесь поверх мусора рисуется иконка, и на прозрачных участках иконки мы опять же имеем мусор
// т.е. здесь мы имеем битмеп и теряем информацию о какой-либо прозрачности

BP>GetDC()->BitBlt(0, 0, 32, 32, &memDC, 0, 0, SRCCOPY);
// Ну а здесь уже, надеюсь, все понятно?

BP>
Re[2]: CImageList -> Bitmap
От: BukaP  
Дата: 04.09.07 14:59
Оценка:
Спасибо!

Про то что фон уже присутствует в Bitmap-е не подумал
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.