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
void wxToolBar::UpdateSize()
{
+ ::SendMessage(GetHwnd(), TB_AUTOSIZE, 0, 0);
+
// In case Realize is called after the initial display (IOW the programmer
// may have rebuilt the toolbar) give the frame the option of resizing the
// toolbar to full width again, but only if the parent is a frame and the
// toolbar is managed by the frame. Otherwise assume that some other
// layout mechanism is controlling the toolbar size and leave it alone.
-
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
if ( frame && frame->GetToolBar() == this )
{
- // the toolbar size changed
- ::SendMessage(GetHwnd(), TB_AUTOSIZE, 0, 0);
frame->SendSizeEvent();
}
}
// colour: for example, when it must blend in with a notebook page.
void wxToolBar::OnEraseBackground(wxEraseEvent& event)
{
- wxColour bgCol = GetBackgroundColour();
- if (!bgCol.Ok())
- {
- event.Skip();
- return;
- }
-
- // 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;
- ::GetClientRect(GetHwnd(), &rect);
-
- HBRUSH hBrush = ::CreateSolidBrush(wxColourToRGB(bgCol));
-
+ RECT rect = wxGetClientRect(GetHwnd());
HDC hdc = GetHdcOf((*event.GetDC()));
-#ifndef __WXWINCE__
- int mode = ::SetMapMode(hdc, MM_TEXT);
-#endif
+ 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()));
- ::FillRect(hdc, &rect, hBrush);
- ::DeleteObject(hBrush);
+ 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 ( hr == S_OK )
+ return;
+
+ // it can also return S_FALSE which seems to simply say that it
+ // didn't draw anything but no error really occurred
+ if ( FAILED(hr) )
+ wxLogApiError(_T("DrawThemeParentBackground(toolbar)"), hr);
+ }
+ }
+#endif // wxUSE_UXTHEME
-#ifndef __WXWINCE__
- ::SetMapMode(hdc, mode);
-#endif
+ event.Skip();
+ return;
+ }
}
bool wxToolBar::HandleSize(WXWPARAM WXUNUSED(wParam), WXLPARAM lParam)