X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f6b4292aa62c370a006516b7fe24e89ecb181b7..9ceeecb94e9b5e4a5d9f3382e91eb4c1aad1d382:/src/msw/tbar95.cpp diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index d1079d550c..6636f4cebd 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -124,6 +124,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase) EVT_MOUSE_EVENTS(wxToolBar::OnMouseEvent) EVT_SYS_COLOUR_CHANGED(wxToolBar::OnSysColourChanged) + EVT_ERASE_BACKGROUND(wxToolBar::OnEraseBackground) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -239,7 +240,7 @@ bool wxToolBar::Create(wxWindow *parent, wxSetCCUnicodeFormat(GetHwnd()); // set up the colors and fonts - SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR)); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); // workaround for flat toolbar on Windows XP classic style @@ -1011,6 +1012,8 @@ bool wxToolBar::MSWOnNotify(int WXUNUSED(idCtrl), return HandleTooltipNotify(code, lParam, tool->GetShortHelp()); #else + wxUnusedVar(lParam); + return false; #endif } @@ -1211,11 +1214,14 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event) return; } - if (event.RightDown()) + if ( event.RightDown() ) { - // For now, we don't have an id. Later we could - // try finding the tool. - OnRightClick((int)-1, event.GetX(), event.GetY()); + // find the tool under the mouse + wxCoord x,y; + event.GetPosition(&x, &y); + + wxToolBarToolBase *tool = FindToolForPosition(x, y); + OnRightClick(tool ? tool->GetId() : -1, x, y); } else { @@ -1223,6 +1229,40 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event) } } +// This handler is required to allow the toolbar to be set to a non-default +// 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)); + + HDC hdc = GetHdcOf((*event.GetDC())); + +#ifndef __WXWINCE__ + int mode = ::SetMapMode(hdc, MM_TEXT); +#endif + + ::FillRect(hdc, &rect, hBrush); + ::DeleteObject(hBrush); + +#ifndef __WXWINCE__ + ::SetMapMode(hdc, mode); +#endif +} + bool wxToolBar::HandleSize(WXWPARAM WXUNUSED(wParam), WXLPARAM lParam) { // calculate our minor dimension ourselves - we're confusing the standard