Fixed inverse masking on MSW imagelist

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4331 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Unknown (CR) 1999-11-03 03:52:12 +00:00
parent 4e16881a08
commit 54b37e2e8b

View File

@ -91,13 +91,36 @@ int wxImageList::Add(const wxBitmap& bitmap, const wxBitmap& mask)
HBITMAP hBitmap2 = 0; HBITMAP hBitmap2 = 0;
if ( mask.Ok() ) if ( mask.Ok() )
hBitmap2 = (HBITMAP) mask.GetHBITMAP(); hBitmap2 = (HBITMAP) mask.GetHBITMAP();
else if (bitmap.GetMask())
hBitmap2 = (HBITMAP) bitmap.GetMask()->GetMaskBitmap();
int index = ImageList_Add((HIMAGELIST) GetHIMAGELIST(), hBitmap1, hBitmap2); HBITMAP hBitmapI=0;
if(hBitmap2!=0) {
// Microsoft imagelist masks are inverted from wxWindows mask standard (white is mask color)
BITMAP bm;
::GetObject(hBitmap2,sizeof(BITMAP),(LPVOID)&bm);
int w=bm.bmWidth;
int h=bm.bmHeight;
HDC hdc = ::CreateCompatibleDC(NULL);
HDC hdci = ::CreateCompatibleDC(NULL);
hBitmapI = ::CreateCompatibleBitmap(hdci, w, h);
::SelectObject(hdc, hBitmap2);
::SelectObject(hdci, hBitmapI);
::BitBlt(hdci, 0, 0, w, h, hdc, 0, 0, NOTSRCCOPY);
::DeleteDC(hdc);
::DeleteDC(hdci);
}
int index = ImageList_Add((HIMAGELIST) GetHIMAGELIST(), hBitmap1, hBitmapI);
if ( index == -1 ) if ( index == -1 )
{ {
wxLogError(_("Couldn't add an image to the image list.")); wxLogError(_("Couldn't add an image to the image list."));
} }
// Clean up inverted mask
if(hBitmapI!=0)
::DeleteObject(hBitmapI);
return index; return index;
} }