#ifndef WX_PRECOMP
#include "wx/bmpbuttn.h"
+ #include "wx/log.h"
#endif
#include "wx/msw/private.h"
-#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
-#endif
#define BUTTON_HEIGHT_FACTOR (EDIT_CONTROL_FACTOR * 1.1)
{
m_buttonBitmap = bitmap;
SetName(name);
+
+#if wxUSE_VALIDATORS
SetValidator(validator);
+#endif // wxUSE_VALIDATORS
parent->AddChild(this);
}
BOOL ok;
+
+ // no MaskBlt() under Win16
+#ifdef __WIN32__
wxMask *mask = bitmap->GetMask();
if ( mask )
{
// the fg ROP is applied for the pixels of the mask bitmap which are 1
// (for a wxMask this means that this is a non transparent pixel), the
// bg ROP is applied for all the others
+
+ HBRUSH hbrBackground =
+ ::CreateSolidBrush(wxColourToRGB(GetBackgroundColour()));
+ HBRUSH hbrOld = (HBRUSH)::SelectObject(hDC, hbrBackground);
+
ok = ::MaskBlt(
hDC, x1, y1, wBmp, hBmp, // dst
memDC, 0, 0, // src
(HBITMAP)mask->GetMaskBitmap(), 0, 0, // mask
MAKEROP4(SRCCOPY, // fg ROP
- SRCPAINT) // bg ROP
+ PATCOPY) // bg ROP
);
+
+ ::SelectObject(hDC, hbrOld);
+ ::DeleteObject(hbrBackground);
}
else
+ {
+ // this will make the check below fail and BitBlt() will be used if
+ // MaskBlt() is not supported (for example, under Win95)
+ ok = FALSE;
+ }
+
+ if ( !ok )
+#endif // Win32
{
ok = ::BitBlt(hDC, x1, y1, wBmp, hBmp, // dst
memDC, 0, 0, // src