// get the brush to be used for painting the background for the controls
// which need it in their MSWControlColor()
- WXHBRUSH GetThemeBackgroundBrush() const { return m_hbrBackground; }
+ //
+ // the brush will be adjusted for use with the given window on this DC
+ WXHBRUSH GetThemeBackgroundBrush(WXHDC hDC, wxWindow *win) const;
#endif // wxUSE_UXTHEME
protected:
}
#endif // Win95
-WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
+WXHBRUSH wxControl::MSWControlColorSolid(WXHDC pDC, wxColour colBg)
{
HDC hdc = (HDC)pDC;
if ( m_hasFgCol )
::SetTextColor(hdc, wxColourToRGB(GetForegroundColour()));
- if ( m_hasBgCol )
+ if ( colBg.Ok() )
{
- wxColour colBack = GetBackgroundColour();
-
- ::SetBkColor(hdc, wxColourToRGB(colBack));
+ ::SetBkColor(hdc, wxColourToRGB(colBg));
- wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBack, wxSOLID);
+ wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBg, wxSOLID);
return (WXHBRUSH)brush->GetResourceHandle();
}
- SetBkMode(hdc, TRANSPARENT);
+ return 0;
+}
+
+WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
+{
+ WXHBRUSH hbr = MSWControlColorSolid(pDC, m_hasBgCol ? m_backgroundColour
+ : wxNullColour);
+ if ( hbr )
+ return hbr;
+
+ ::SetBkMode((HDC)pDC, TRANSPARENT);
#if wxUSE_UXTHEME && wxUSE_NOTEBOOK
if ( wxUxThemeEngine::GetIfActive() )
wxNotebook *nbook = wxDynamicCast(win, wxNotebook);
if ( nbook )
{
- WXHBRUSH hbr = nbook->GetThemeBackgroundBrush();
- if ( hbr )
- {
- RECT rc;
- GetWindowRect(GetHwnd(), &rc);
-
- MapWindowPoints(NULL, GetHwndOf(nbook), (POINT *)&rc, 1);
- SetBrushOrgEx(hdc, -rc.left, -rc.top, NULL);
- return hbr;
- }
+ // return value may be NULL but it is ok: if the first parent
+ // notebook doesn't use themes, then we don't have to process
+ // this message at all, so let default processing take place
+ return nbook->GetThemeBackgroundBrush(pDC, this);
}
}
}
#endif // wxUSE_UXTHEME
- return GetStockObject(NULL_BRUSH);
+ return ::GetStockObject(NULL_BRUSH);
+}
+
+WXHBRUSH wxControl::MSWControlColorDisabled(WXHDC pDC)
+{
+ return MSWControlColorSolid
+ (
+ pDC,
+ wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)
+ );
}
// ---------------------------------------------------------------------------
}
}
-void wxNotebook::DoEraseBackground(wxEraseEvent& event)
+WXHBRUSH wxNotebook::GetThemeBackgroundBrush(WXHDC hDC, wxWindow *win) const
{
- // we can either draw the background ourselves or let DrawThemeBackground()
- // do it, but as we already have the correct brush, let's do it ourselves
- // (note that we use the same code in wxControl::MSWControlColor(), so if
- // it breaks, it should at least break in consistent way)
if ( m_hbrBackground )
{
// before drawing with the background brush, we need to position it
// correctly
- wxWindow *win = (wxWindow *)event.GetEventObject();
-
RECT rc;
::GetWindowRect(GetHwndOf(win), &rc);
::MapWindowPoints(NULL, GetHwnd(), (POINT *)&rc, 1);
- HDC hdc = GetHdcOf(*event.GetDC());
- if ( !::SetBrushOrgEx(hdc, -rc.left, -rc.top, NULL) )
+ if ( !::SetBrushOrgEx((HDC)hDC, -rc.left, -rc.top, NULL) )
{
wxLogLastError(_T("SetBrushOrgEx(notebook bg brush)"));
}
+ }
+
+ return m_hbrBackground;
+}
+void wxNotebook::DoEraseBackground(wxEraseEvent& event)
+{
+ // we can either draw the background ourselves or let DrawThemeBackground()
+ // do it, but as we already have the correct brush, let's do it ourselves
+ // (note that we use the same code in wxControl::MSWControlColor(), so if
+ // it breaks, it should at least break in consistent way)
+ wxWindow *win = (wxWindow *)event.GetEventObject();
+ HDC hdc = GetHdcOf(*event.GetDC());
+ WXHBRUSH hbr = GetThemeBackgroundBrush((WXHDC)hdc, win);
+ if ( hbr )
+ {
RECT rectClient;
::GetClientRect(GetHwndOf(win), &rectClient);
- ::FillRect(hdc, &rectClient, (HBRUSH)m_hbrBackground);
+ ::FillRect(hdc, &rectClient, (HBRUSH)hbr);
}
}