+#if wxUSE_WXDIB && wxUSE_IMAGE
+ // wxBitmap normally stores alpha in pre-multiplied format but
+ // ImageList_Draw() does pre-multiplication internally so we need to undo
+ // the pre-multiplication here. Converting back and forth like this is, of
+ // course, very inefficient but it's better than wrong appearance so we do
+ // this for now until a better way can be found.
+ AutoHBITMAP hbmpRelease;
+ if ( bitmap.HasAlpha() )
+ {
+ hbmp = wxDIB(bitmap.ConvertToImage(),
+ wxDIB::PixelFormat_NotPreMultiplied).Detach();
+ hbmpRelease.Init(hbmp);
+ }
+ else
+#endif // wxUSE_WXDIB && wxUSE_IMAGE
+ hbmp = GetHbitmapOf(bitmap);
+
+ AutoHBITMAP hbmpMask(GetMaskForImage(bitmap, mask));
+
+ int index = ImageList_Add(GetHImageList(), hbmp, hbmpMask);