#include "wx/control.h"
#endif
-#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 400 && !wxUSE_POCKETPC_UI))
+#if wxUSE_TOOLBAR && wxUSE_TOOLBAR_NATIVE && (!defined(_WIN32_WCE) || (_WIN32_WCE >= 400 && !defined(__POCKETPC__) && !defined(__SMARTPHONE__)))
#include "wx/toolbar.h"
#include "wx/sysopt.h"
#include "wx/msw/private.h"
+#if wxUSE_UXTHEME
+#include "wx/msw/uxtheme.h"
+#endif
+
// include <commctrl.h> "properly"
#include "wx/msw/wrapcctl.h"
// conditional compilation
// ----------------------------------------------------------------------------
-// wxWindows previously always considered that toolbar buttons have light grey
+// wxWidgets previously always considered that toolbar buttons have light grey
// (0xc0c0c0) background and so ignored any bitmap masks - however, this
// doesn't work with XPMs which then appear to have black background. To make
// this work, we must respect the bitmap masks - which we do now. This should
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));
SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
+ // workaround for flat toolbar on Windows XP classic style
+#if wxUSE_UXTHEME
+ if ( style & wxTB_FLAT )
+ {
+ wxUxThemeEngine *p = wxUxThemeEngine::Get();
+ if ( !p || !p->IsThemeActive() )
+ {
+ DWORD dwToolbarStyle;
+
+ dwToolbarStyle = (DWORD)::SendMessage(GetHwnd(), TB_GETSTYLE, 0, 0L );
+
+ if ((dwToolbarStyle & TBSTYLE_FLAT) == 0)
+ {
+ dwToolbarStyle |= TBSTYLE_FLAT;
+ ::SendMessage(GetHwnd(), TB_SETSTYLE, 0, (LPARAM)dwToolbarStyle );
+ }
+ }
+ }
+#endif
+
return TRUE;
}
// toolbar-specific post initialisation
::SendMessage(GetHwnd(), TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
-
+
return TRUE;
}
// Realize() later
tool->Attach(this);
+ InvalidateBestSize();
return TRUE;
}
}
}
+ InvalidateBestSize();
return TRUE;
}
const bool isVertical = HasFlag(wxTB_VERTICAL);
+ bool doRemap, doRemapBg, doTransparent;
+ if (wxSystemOptions::GetOptionInt(wxT("msw.remap")) == 2)
+ {
+ doRemapBg = doRemap = false;
+ doTransparent = true;
+ }
+ else
+ { doRemap = !wxSystemOptions::HasOption(wxT("msw.remap"))
+ || wxSystemOptions::GetOptionInt(wxT("msw.remap")) == 1;
+ doRemapBg = !doRemap;
+ doTransparent = false;
+ }
+
// delete all old buttons, if any
for ( size_t pos = 0; pos < m_nButtons; pos++ )
{
wxMemoryDC dcAllButtons;
wxBitmap bitmap(totalBitmapWidth, totalBitmapHeight);
dcAllButtons.SelectObject(bitmap);
+ if (doTransparent)
+ dcAllButtons.SetBackground(*wxTRANSPARENT_BRUSH);
+ else
dcAllButtons.SetBackground(*wxLIGHT_GREY_BRUSH);
dcAllButtons.Clear();
MemoryHDC memoryDC2;
#endif // USE_BITMAP_MASKS/!USE_BITMAP_MASKS
- if (wxSystemOptions::HasOption(wxT("msw.remap")) && wxSystemOptions::GetOptionInt(wxT("msw.remap")) == 0)
+ if (doRemapBg)
{
#if USE_BITMAP_MASKS
dcAllButtons.SelectObject(wxNullBitmap);
bitmap.SetHBITMAP(0);
#endif // USE_BITMAP_MASKS/!USE_BITMAP_MASKS
- if (!wxSystemOptions::HasOption(wxT("msw.remap")) || wxSystemOptions::GetOptionInt(wxT("msw.remap")) == 1)
+ if (doRemap)
{
// Map to system colours
hBitmap = (HBITMAP)MapBitmap((WXHBITMAP) hBitmap,
}
}
+ InvalidateBestSize();
return TRUE;
}