Добрый день!
Есть 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);
Здравствуйте, 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>
Спасибо!
Про то что фон уже присутствует в Bitmap-е не подумал