Fixed transparency problem when masked area was not black

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5894 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Guillermo Rodriguez Garcia 2000-02-07 23:26:29 +00:00
parent bd1b0b3ed1
commit 2edc119be3

View File

@ -107,6 +107,22 @@ void wxIcon::CopyFromBitmap(const wxBitmap& bmp)
iconInfo.hbmMask = wxInvertMask((HBITMAP)mask->GetMaskBitmap());
iconInfo.hbmColor = GetHbitmapOf(bmp);
/* GRG: black out the transparent area to preserve background
* colour, because Windows blits the original bitmap using
* SRCINVERT (XOR) after applying the mask to the dest rect.
*/
HDC dcSrc = ::CreateCompatibleDC(NULL);
HDC dcDst = ::CreateCompatibleDC(NULL);
SelectObject(dcSrc, (HBITMAP)mask->GetMaskBitmap());
SelectObject(dcDst, iconInfo.hbmColor);
BitBlt(dcDst, 0, 0, bmp.GetWidth(), bmp.GetHeight(), dcSrc, 0, 0, SRCAND);
SelectObject(dcDst, NULL);
SelectObject(dcSrc, NULL);
DeleteDC(dcDst);
DeleteDC(dcSrc);
HICON hicon = ::CreateIconIndirect(&iconInfo);
if ( !hicon )
{