const wxString& name = wxButtonNameStr);
// Implementation
+ virtual bool SetBackgroundColour(const wxColour& colour);
virtual void SetDefault();
virtual bool MSWOnDraw(WXDRAWITEMSTRUCT *item);
virtual void DrawFace( WXHDC dc, int left, int top, int right, int bottom, bool sel );
protected:
virtual wxSize DoGetBestSize() const;
-private:
+ wxBrush m_brushDisabled;
+
DECLARE_DYNAMIC_CLASS_NO_COPY(wxBitmapButton)
};
const wxChar *wxMDIChildFrameClassName = wxT("wxMDIChildFrameClass");
const wxChar *wxMDIChildFrameClassNameNoRedraw = wxT("wxMDIChildFrameClassNR");
-HBRUSH wxDisableButtonBrush = (HBRUSH) 0;
-
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
RegisterWindowClasses();
-#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
- // Create the brush for disabling bitmap buttons
- LOGBRUSH lb;
- lb.lbStyle = BS_PATTERN;
- lb.lbColor = 0;
- lb.lbHatch = (int)LoadBitmap( wxhInstance, wxT("wxDISABLE_BUTTON_BITMAP") );
- if ( lb.lbHatch )
- {
- wxDisableButtonBrush = ::CreateBrushIndirect( &lb );
- ::DeleteObject( (HGDIOBJ)lb.lbHatch );
- }
- //else: wxWidgets resources are probably not linked in
-#endif // !__WXMICROWIN__ && !__WXWINCE__
-
#if wxUSE_PENWINDOWS
wxRegisterPenWin();
#endif
wxCleanUpPenWin();
#endif
- if ( wxDisableButtonBrush )
- ::DeleteObject( wxDisableButtonBrush );
-
#if wxUSE_OLE
#ifdef __WXWINCE__
::CoUninitialize();
#endif
#include "wx/msw/private.h"
+#include "wx/image.h"
// ----------------------------------------------------------------------------
// macros
return true;
}
+bool wxBitmapButton::SetBackgroundColour(const wxColour& colour)
+{
+ if ( !wxBitmapButtonBase::SetBackgroundColour(colour) )
+ {
+ // didn't change
+ return false;
+ }
+
+ // invalidate the brush, it will be recreated the next time it's needed
+ m_brushDisabled = wxNullBrush;
+
+ return true;
+}
+
// VZ: should be at the very least less than wxDEFAULT_BUTTON_MARGIN
#define FOCUS_MARGIN 3
DrawFocusRect( (HDC) dc, &rect );
}
-extern HBRUSH wxDisableButtonBrush;
-void wxBitmapButton::DrawButtonDisable( WXHDC dc, int left, int top, int right,
- int bottom, bool with_marg )
+void
+wxBitmapButton::DrawButtonDisable( WXHDC dc,
+ int left, int top, int right, int bottom,
+ bool with_marg )
{
- HBRUSH old = (HBRUSH) SelectObject( (HDC) dc, wxDisableButtonBrush );
+ if ( !m_brushDisabled.Ok() )
+ {
+ // draw a bitmap with two black and two background colour pixels
+ wxBitmap bmp(2, 2);
+ wxMemoryDC dc;
+ dc.SelectObject(bmp);
+ dc.SetPen(*wxBLACK_PEN);
+ dc.DrawPoint(0, 0);
+ dc.DrawPoint(1, 1);
+ dc.SetPen(GetBackgroundColour());
+ dc.DrawPoint(0, 1);
+ dc.DrawPoint(1, 0);
+
+ m_brushDisabled = wxBrush(bmp);
+ }
+
+ SelectInHDC selectBrush((HDC)dc, GetHbrushOf(m_brushDisabled));
// ROP for "dest |= pattern" operation -- as it doesn't have a standard
// name, give it our own
}
::PatBlt( (HDC) dc, left, top, right, bottom, PATTERNPAINT);
-
- ::SelectObject( (HDC) dc, old );
}
void wxBitmapButton::SetDefault()