#endif
#include "wx/statbox.h"
+#include "wx/notebook.h"
#include "wx/msw/private.h"
+// this is for Win CE
+#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
- ) )
+ WS_EX_TRANSPARENT) )
return false;
- // to be transparent we should have the same colour as the parent as well
- SetBackgroundColour(GetParent()->GetBackgroundColour());
-
return true;
}
return wxSize(wBox, hBox);
}
-WXLRESULT wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
+WXHBRUSH
+wxStaticBox::MSWGetBgBrushForSelf(wxWindow *parent, WXHDC WXUNUSED(pDC))
{
- switch ( nMsg )
- {
-#ifndef __WXWINCE__
- case WM_NCHITTEST:
- // FIXME: this hack is specific to dialog ed, shouldn't it be
- // somehow disabled during normal operation?
- {
- int xPos = LOWORD(lParam); // horizontal position of cursor
- int yPos = HIWORD(lParam); // vertical position of cursor
-
- ScreenToClient(&xPos, &yPos);
-
- // Make sure you can drag by the top of the groupbox, but let
- // other (enclosed) controls get mouse events also
- if ( yPos < 10 )
- return (long)HTCLIENT;
- }
- break;
-#endif
- case WM_ERASEBKGND:
- // prevent wxControl from processing this message because it will
- // erase the background incorrectly and there is no way for us to
- // override this at wxWin event level (if we do process the event,
- // we don't know how to do it properly - paint the background
- // without painting over other controls - and if we don't,
- // wxControl still gets it)
- return MSWDefWindowProc(nMsg, wParam, lParam);
- }
-
- return wxControl::MSWWindowProc(nMsg, wParam, lParam);
+ // 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