X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f02b73c46c01a1ead8e0e692e305ae1cec183b0c..0b7e6e7da208b6a95fb23cb50286a09dc90d96d2:/src/msw/icon.cpp diff --git a/src/msw/icon.cpp b/src/msw/icon.cpp index 03fe2ebb13..30edc93816 100644 --- a/src/msw/icon.cpp +++ b/src/msw/icon.cpp @@ -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 ) {