X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/76c67131022c84eb8c424adea124620da6b0d03e..68b9924c4e76c42929098568482e1718a0fa1d2f:/src/msw/toolbar.cpp diff --git a/src/msw/toolbar.cpp b/src/msw/toolbar.cpp index 4866b30c54..ecaa2b17ef 100644 --- a/src/msw/toolbar.cpp +++ b/src/msw/toolbar.cpp @@ -4,7 +4,6 @@ // Author: Julian Smart // Modified by: // Created: 04/01/98 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -127,6 +126,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() // ---------------------------------------------------------------------------- @@ -340,7 +340,10 @@ bool wxToolBar::Create(wxWindow *parent, // in WM_ERASEBKGND too (by default this won't be done but if the toolbar // has a non default background colour, then it would be used in both // places resulting in flicker) - SetBackgroundStyle(wxBG_STYLE_PAINT); + if (wxApp::GetComCtl32Version() >= 600) + { + SetBackgroundStyle(wxBG_STYLE_PAINT); + } return true; } @@ -981,7 +984,7 @@ bool wxToolBar::Realize() { const wxString& label = tool->GetLabel(); if ( !label.empty() ) - button.iString = (INT_PTR)label.wx_str(); + button.iString = (INT_PTR) wxMSW_CONV_LPCTSTR(label); } button.idCommand = tool->GetId(); @@ -1049,6 +1052,14 @@ bool wxToolBar::Realize() break; } + // Instead of using fixed widths for all buttons, size them + // automatically according to the size of their bitmap and text + // label, if present. This particularly matters for toolbars + // with the wxTB_HORZ_LAYOUT style: they look hideously ugly + // without autosizing when the labels have even slightly + // different lengths. + button.fsStyle |= TBSTYLE_AUTOSIZE; + bitmapId++; break; } @@ -1379,7 +1390,7 @@ bool wxToolBar::MSWOnNotify(int WXUNUSED(idCtrl), { LPNMTOOLBAR tbhdr = (LPNMTOOLBAR)lParam; - wxCommandEvent evt(wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED, tbhdr->iItem); + wxCommandEvent evt(wxEVT_TOOL_DROPDOWN, tbhdr->iItem); if ( HandleWindowEvent(evt) ) { // Event got handled, don't display default popup menu @@ -1679,6 +1690,15 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event) } } +// This handler is needed to fix problems with painting the background of +// toolbar icons with comctl32.dll < 6.0. +void wxToolBar::OnEraseBackground(wxEraseEvent& event) +{ +#ifdef wxHAS_MSW_BACKGROUND_ERASE_HOOK + MSWDoEraseBackground(event.GetDC()->GetHDC()); +#endif // wxHAS_MSW_BACKGROUND_ERASE_HOOK +} + bool wxToolBar::HandleSize(WXWPARAM WXUNUSED(wParam), WXLPARAM lParam) { // wait until we have some tools