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:
@@ -107,6 +107,22 @@ void wxIcon::CopyFromBitmap(const wxBitmap& bmp)
|
|||||||
iconInfo.hbmMask = wxInvertMask((HBITMAP)mask->GetMaskBitmap());
|
iconInfo.hbmMask = wxInvertMask((HBITMAP)mask->GetMaskBitmap());
|
||||||
iconInfo.hbmColor = GetHbitmapOf(bmp);
|
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);
|
HICON hicon = ::CreateIconIndirect(&iconInfo);
|
||||||
if ( !hicon )
|
if ( !hicon )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user