don't set colours for the toolbar manually, this prevents default redrawing from taking place; draw themed background if the parent is themed (based on patch 1358919)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37387 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-02-08 14:42:48 +00:00
parent 848c37c35b
commit 053889ad4b

View File

@@ -234,10 +234,6 @@ bool wxToolBar::Create(wxWindow *parent,
wxSetCCUnicodeFormat(GetHwnd());
// set up the colors and fonts
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
// workaround for flat toolbar on Windows XP classic style: we have to set
// the style after creating the control; doing it at creation time doesn't work
#if wxUSE_UXTHEME
@@ -1344,27 +1340,45 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event)
// colour: for example, when it must blend in with a notebook page.
void wxToolBar::OnEraseBackground(wxEraseEvent& event)
{
if ( !UseBgCol() )
RECT rect = wxGetClientRect(GetHwnd());
HDC hdc = GetHdcOf((*event.GetDC()));
if ( UseBgCol() )
{
// do draw our background
//
// notice that this 'dumb' implementation may cause flicker for some of
// the controls in which case they should intercept wxEraseEvent and
// process it themselves somehow
AutoHBRUSH hBrush(wxColourToRGB(GetBackgroundColour()));
wxCHANGE_HDC_MAP_MODE(hdc, MM_TEXT);
::FillRect(hdc, &rect, hBrush);
}
else // we have no non default background colour
{
#if wxUSE_UXTHEME
// we may need to draw themed colour so that we appear correctly on
// e.g. notebook page under XP with themes but only do it if the parent
// draws themed background itself
if ( !GetParent()->UseBgCol() )
{
wxUxThemeEngine *theme = wxUxThemeEngine::GetIfActive();
if ( theme )
{
HRESULT
hr = theme->DrawThemeParentBackground(GetHwnd(), hdc, &rect);
if ( SUCCEEDED(hr) )
return;
wxLogApiError(_T("DrawThemeParentBackground(toolbar)"), hr);
}
}
#endif // wxUSE_UXTHEME
event.Skip();
return;
}
wxColour bgCol = GetBackgroundColour();
// notice that this 'dumb' implementation may cause flicker for some of the
// controls in which case they should intercept wxEraseEvent and process it
// themselves somehow
RECT rect = wxGetClientRect(GetHwnd());
AutoHBRUSH hBrush(wxColourToRGB(bgCol));
HDC hdc = GetHdcOf((*event.GetDC()));
wxCHANGE_HDC_MAP_MODE(hdc, MM_TEXT);
::FillRect(hdc, &rect, hBrush);
}
bool wxToolBar::HandleSize(WXWPARAM WXUNUSED(wParam), WXLPARAM lParam)