#endif
#include "wx/statbox.h"
+#include "wx/notebook.h"
#include "wx/msw/private.h"
+// under CE this style is not defined but we don't need to make static boxes
+// transparent there neither
+#ifndef WS_EX_TRANSPARENT
+ #define WS_EX_TRANSPARENT 0
+#endif
+
// ----------------------------------------------------------------------------
// wxWin macros
// ----------------------------------------------------------------------------
if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) )
return false;
- // as wxStaticBox doesn't draw its own background, we make it transparent
- // to force redrawing its background which could have been overwritten by
- // the other controls inside it
- //
- // FIXME: I still think that it isn't the right solution because the static
- // boxes shouldn't have to be transparent if the redrawing was done
- // right elsewhere - who ever had to make them transparent in non
- // wxWidgets programs, after all? But for now it does fix a serious
- // problem (try resizing the sizers test screen in the layout sample
- // after removing WS_EX_TRANSPARENT bit) and so let's use it until
- // we fix the real underlying problem
- if ( !MSWCreateControl(wxT("BUTTON"), BS_GROUPBOX, pos, size, label,
-#ifdef __WXWINCE__
- 0
-#else
- WS_EX_TRANSPARENT
-#endif
- ) )
+ if ( !MSWCreateControl(wxT("BUTTON"), label, pos, size) )
return false;
return true;
}
+WXDWORD wxStaticBox::MSWGetStyle(long style, WXDWORD *exstyle) const
+{
+ long styleWin = wxStaticBoxBase::MSWGetStyle(style, exstyle);
+
+ if ( exstyle )
+ *exstyle = WS_EX_TRANSPARENT;
+
+ return styleWin | BS_GROUPBOX;
+}
+
wxSize wxStaticBox::DoGetBestSize() const
{
int cx, cy;
return wxSize(wBox, hBox);
}
+WXHBRUSH
+wxStaticBox::MSWGetBgBrushForSelf(wxWindow *parent, WXHDC WXUNUSED(pDC))
+{
+ // we can't use pattern brushes because, apparently, the window proc of our
+ // class does something which invalidates the brush origin before drawing
+ // with it and so any patetrn brush is used incorrectly as can be seen by
+ // putting a static box inside a (themed) notebook
+ //
+ // so always use solid brush for painting the background (note that this
+ // only applies to the background of the box label, not the insides of the
+ // box itself)
+ return parent->MSWGetSolidBgBrushForChild(this);
+}
+
#endif // wxUSE_STATBOX