/////////////////////////////////////////////////////////////////////////////
-// Name: msw/statbox.cpp
+// Name: src/msw/statbox.cpp
// Purpose: wxStaticBox
// Author: Julian Smart
// Modified by:
// headers
// ----------------------------------------------------------------------------
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
- #pragma implementation "statbox.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if wxUSE_STATBOX
+#include "wx/statbox.h"
+
#ifndef WX_PRECOMP
#include "wx/app.h"
#include "wx/dcclient.h"
+ #include "wx/dcmemory.h"
+ #include "wx/image.h"
#endif
-#include "wx/statbox.h"
#include "wx/notebook.h"
#include "wx/sysopt.h"
-#include "wx/image.h"
-#include "wx/dcmemory.h"
-#include "wx/sysopt.h"
#include "wx/msw/uxtheme.h"
#include "wx/msw/private.h"
wxGetCharSize(GetHWND(), &cx, &cy, GetFont());
int wBox;
- GetTextExtent(wxGetWindowText(m_hWnd), &wBox, &cy);
+ GetTextExtent(wxStripMenuCodes(wxGetWindowText(m_hWnd)), &wBox, &cy);
wBox += 3*cx;
int hBox = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy);
RECT rc;
::GetWindowRect(GetHwnd(), &rc);
HRGN hrgn = ::CreateRectRgn(rc.left, rc.top, rc.right + 1, rc.bottom + 1);
+ bool foundThis = false;
// iterate over all child windows (not just wxWindows but all windows)
for ( HWND child = ::GetWindow(GetHwndOf(GetParent()), GW_CHILD);
str.UpperCase();
if ( str == wxT("BUTTON") && (style & BS_GROUPBOX) == BS_GROUPBOX )
{
- // Don't clip any static boxes, not just this one. This will
- // result in flicker in overlapping static boxes, but at least
- // they will all be drawn correctly and we shouldn't have
- // overlapping windows anyway.
- continue;
+ if ( child == GetHwnd() )
+ foundThis = true;
+
+ // Any static boxes below this one in the Z-order can't be clipped
+ // since if we have the case where a static box with a low Z-order
+ // is nested inside another static box with a high Z-order then the
+ // nested static box would be painted over. Doing it this way
+ // unfortunately results in flicker if the Z-order of nested static
+ // boxes is not inside (lowest) to outside (highest) but at least
+ // they are still shown.
+ if ( foundThis )
+ continue;
}
::GetWindowRect(child, &rc);
const int x = 9;
// TODO: RTL?
- RECT rc = { x, 0, GetSize().x - x, y };
+ RECT rc = { x, 0, GetSize().x, y };
const wxString label = GetLabel();
::DrawText(hdc, label, label.length(), &rc, DT_SINGLELINE | DT_VCENTER);
#endif // !__WXWINCE__
#endif // wxUSE_STATBOX
-