\twocolitem{\windowstyle{focus}}{Bitmap shown when the button has keyboard
focus but is not pressed.}
\twocolitem{\windowstyle{hover}}{Bitmap shown when the mouse is over the
-button (but it is not pressed).}
+button (but it is not pressed). Notice that if hover bitmap is not specified
+but the current platform UI uses hover images for the buttons (such as Windows
+XP or GTK+), then the focus bitmap is used for hover state as well. This makes
+it possible to set focus bitmap only to get reasonably good behaviour on all
+platforms.}
\end{twocollist}
virtual void DrawButtonDisable( WXHDC dc, int left, int top, int right, int bottom, bool with_marg );
protected:
+ // reimplement some base class virtuals
virtual wxSize DoGetBestSize() const;
+ virtual void OnSetBitmap();
// invalidate m_brushDisabled when system colours change
void OnSysColourChanged(wxSysColourChangedEvent& event);
#include "wx/msw/private.h"
#include "wx/image.h"
+#include "wx/msw/uxtheme.h"
// ----------------------------------------------------------------------------
// macros
event.Skip();
}
+void wxBitmapButton::OnSetBitmap()
+{
+ // if the focus bitmap is specified but hover one isn't, use the focus
+ // bitmap for hovering as well if this is consistent with the current
+ // Windows version look and feel
+ //
+ // rationale: this is compatible with the old wxGTK behaviour and also
+ // makes it much easier to do "the right thing" for all platforms (some of
+ // them, such as Windows XP, have "hot" buttons while others don't)
+ if ( !m_bmpHover.Ok() &&
+ m_bmpFocus.Ok() &&
+ wxUxThemeEngine::GetIfActive() )
+ {
+ m_bmpHover = m_bmpFocus;
+ }
+
+ // this will redraw us
+ wxBitmapButtonBase::OnSetBitmap();
+}
+
// VZ: should be at the very least less than wxDEFAULT_BUTTON_MARGIN
#define FOCUS_MARGIN 3