On October 13, 2002 12:57 pm, Carlos wrote:
Changelog:
- Changed SRCPAINT to SRCCOPY, the first time what it paints in hImageDC.
} else if (himl->hbmMask) { BitBlt( hImageDC, 0, 0, cx, cy, hMaskListDC, lx, ly, SRCAND );
BitBlt( hImageDC, 0, 0, cx, cy, hImageListDC, lx, ly, SRCPAINT );
if (!bIsTransparent && himl->hbmMask) {
BitBlt( hImageDC, 0, 0, cx, cy, hImageListDC, lx, ly, SRCPAINT );
} else {
BitBlt( hImageDC, 0, 0, cx, cy, hImageListDC, lx, ly, SRCCOPY );
}
This can not be right. It is equivalent to:
PatBlt( hImageDC, 0, 0, cx, cy, PATCOPY); SelectObject(hImageDC, hOldBrush); } - } else if (himl->hbmMask) { + } else if (himl->hbmMask && !(fStyle & ILD_TRANSPARENT) && clrBk != CLR_NONE) { BitBlt( hImageDC, 0, 0, cx, cy, hMaskListDC, lx, ly, SRCAND ); BitBlt( hImageDC, 0, 0, cx, cy, hImageListDC, lx, ly, SRCPAINT ); } else { /* the image is opaque, just copy it */ TRACE(" - Image is opaque\n"); BitBlt( hImageDC, 0, 0, cx, cy, hImageListDC, lx, ly, SRCCOPY); }
That is, if we have ILD_TRANSPARENT set, or clrBk == CLR_NONE, we go the SRCCOPY route, ignoring the mask, which is just the opposite of what we need to do!
Alexandre, please do not apply it.