diff --git a/samples/widgets/static.cpp b/samples/widgets/static.cpp index 0dd3e38530..c305c4db8e 100644 --- a/samples/widgets/static.cpp +++ b/samples/widgets/static.cpp @@ -94,6 +94,18 @@ public: virtual ~StaticWidgetsPage(){}; virtual wxControl *GetWidget() const { return m_statText; } + virtual Widgets GetWidgets() const + { + Widgets widgets; + widgets.push_back(m_sizerStatBox->GetStaticBox()); + widgets.push_back(m_statText); + widgets.push_back(m_statMarkup); +#if wxUSE_STATLINE + widgets.push_back(m_statLine); +#endif // wxUSE_STATLINE + + return widgets; + } virtual void RecreateWidget() { CreateStatic(); } // lazy creation of the content diff --git a/src/msw/statbox.cpp b/src/msw/statbox.cpp index 3c2dfcf06d..55f3b79cd1 100644 --- a/src/msw/statbox.cpp +++ b/src/msw/statbox.cpp @@ -237,6 +237,24 @@ WXLRESULT wxStaticBox::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lPar return 0; } + if ( nMsg == WM_UPDATEUISTATE ) + { + // DefWindowProc() redraws just the static box text when it gets this + // message and it does it using the standard (blue in standard theme) + // colour and not our own label colour that we use in PaintForeground() + // resulting in the label mysteriously changing the colour when e.g. + // "Alt" is pressed anywhere in the window, see #12497. + // + // To avoid this we simply refresh the window forcing our own code + // redrawing the label in the correct colour to be called. This is + // inefficient but there doesn't seem to be anything else we can do. + // + // Notice that the problem is XP-specific and doesn't arise under later + // systems. + if ( m_hasFgCol && wxGetWinVersion() == wxWinVersion_XP ) + Refresh(); + } + return wxControl::MSWWindowProc(nMsg, wParam, lParam); }