Windows XP appearance fixes for status and tool bars (bug 501585)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13869 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -87,6 +87,7 @@ All (GUI):
|
|||||||
|
|
||||||
wxMSW:
|
wxMSW:
|
||||||
|
|
||||||
|
- small appearance fixes for native look under Windows XP
|
||||||
- huge (40*) speed up in wxMask::Create() (=> much faster toolbar creation)
|
- huge (40*) speed up in wxMask::Create() (=> much faster toolbar creation)
|
||||||
- fixed flicker in wxTreeCtrl::SetItemXXX()
|
- fixed flicker in wxTreeCtrl::SetItemXXX()
|
||||||
- fixed redraw problems in dynamically resized wxStaticText
|
- fixed redraw problems in dynamically resized wxStaticText
|
||||||
|
@@ -39,6 +39,7 @@ enum wxSystemColour
|
|||||||
{
|
{
|
||||||
wxSYS_COLOUR_SCROLLBAR,
|
wxSYS_COLOUR_SCROLLBAR,
|
||||||
wxSYS_COLOUR_BACKGROUND,
|
wxSYS_COLOUR_BACKGROUND,
|
||||||
|
wxSYS_COLOUR_DESKTOP = wxSYS_COLOUR_BACKGROUND,
|
||||||
wxSYS_COLOUR_ACTIVECAPTION,
|
wxSYS_COLOUR_ACTIVECAPTION,
|
||||||
wxSYS_COLOUR_INACTIVECAPTION,
|
wxSYS_COLOUR_INACTIVECAPTION,
|
||||||
wxSYS_COLOUR_MENU,
|
wxSYS_COLOUR_MENU,
|
||||||
@@ -53,23 +54,28 @@ enum wxSystemColour
|
|||||||
wxSYS_COLOUR_HIGHLIGHT,
|
wxSYS_COLOUR_HIGHLIGHT,
|
||||||
wxSYS_COLOUR_HIGHLIGHTTEXT,
|
wxSYS_COLOUR_HIGHLIGHTTEXT,
|
||||||
wxSYS_COLOUR_BTNFACE,
|
wxSYS_COLOUR_BTNFACE,
|
||||||
|
wxSYS_COLOUR_3DFACE = wxSYS_COLOUR_BTNFACE,
|
||||||
wxSYS_COLOUR_BTNSHADOW,
|
wxSYS_COLOUR_BTNSHADOW,
|
||||||
|
wxSYS_COLOUR_3DSHADOW = wxSYS_COLOUR_BTNSHADOW,
|
||||||
wxSYS_COLOUR_GRAYTEXT,
|
wxSYS_COLOUR_GRAYTEXT,
|
||||||
wxSYS_COLOUR_BTNTEXT,
|
wxSYS_COLOUR_BTNTEXT,
|
||||||
wxSYS_COLOUR_INACTIVECAPTIONTEXT,
|
wxSYS_COLOUR_INACTIVECAPTIONTEXT,
|
||||||
wxSYS_COLOUR_BTNHIGHLIGHT,
|
wxSYS_COLOUR_BTNHIGHLIGHT,
|
||||||
|
wxSYS_COLOUR_BTNHILIGHT = wxSYS_COLOUR_BTNHIGHLIGHT,
|
||||||
|
wxSYS_COLOUR_3DHIGHLIGHT = wxSYS_COLOUR_BTNHIGHLIGHT,
|
||||||
|
wxSYS_COLOUR_3DHILIGHT = wxSYS_COLOUR_BTNHIGHLIGHT,
|
||||||
wxSYS_COLOUR_3DDKSHADOW,
|
wxSYS_COLOUR_3DDKSHADOW,
|
||||||
wxSYS_COLOUR_3DLIGHT,
|
wxSYS_COLOUR_3DLIGHT,
|
||||||
wxSYS_COLOUR_INFOTEXT,
|
wxSYS_COLOUR_INFOTEXT,
|
||||||
wxSYS_COLOUR_INFOBK,
|
wxSYS_COLOUR_INFOBK,
|
||||||
wxSYS_COLOUR_LISTBOX,
|
wxSYS_COLOUR_LISTBOX,
|
||||||
|
wxSYS_COLOUR_HOTLIGHT,
|
||||||
|
wxSYS_COLOUR_GRADIENTACTIVECAPTION,
|
||||||
|
wxSYS_COLOUR_GRADIENTINACTIVECAPTION,
|
||||||
|
wxSYS_COLOUR_MENUHILIGHT,
|
||||||
|
wxSYS_COLOUR_MENUBAR,
|
||||||
|
|
||||||
wxSYS_COLOUR_DESKTOP = wxSYS_COLOUR_BACKGROUND,
|
wxSYS_COLOUR_MAX
|
||||||
wxSYS_COLOUR_3DFACE = wxSYS_COLOUR_BTNFACE,
|
|
||||||
wxSYS_COLOUR_3DSHADOW = wxSYS_COLOUR_BTNSHADOW,
|
|
||||||
wxSYS_COLOUR_3DHIGHLIGHT = wxSYS_COLOUR_BTNHIGHLIGHT,
|
|
||||||
wxSYS_COLOUR_3DHILIGHT = wxSYS_COLOUR_BTNHIGHLIGHT,
|
|
||||||
wxSYS_COLOUR_BTNHILIGHT = wxSYS_COLOUR_BTNHIGHLIGHT
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// possible values for wxSystemSettings::GetMetric() parameter
|
// possible values for wxSystemSettings::GetMetric() parameter
|
||||||
|
@@ -97,9 +97,98 @@ void wxSystemSettingsModule::OnExit()
|
|||||||
|
|
||||||
wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
||||||
{
|
{
|
||||||
wxColour col;
|
// we use 0 as the default value just to avoid compiler warnings, as there
|
||||||
wxRGBToColour(col, ::GetSysColor(index));
|
// is no invalid colour value we use hasCol as the real indicator of
|
||||||
return col;
|
// whether colSys was initialized or not
|
||||||
|
COLORREF colSys = 0;
|
||||||
|
bool hasCol = FALSE;
|
||||||
|
|
||||||
|
// the default colours for the entries after BTNHIGHLIGHT
|
||||||
|
static const COLORREF s_defaultSysColors[] =
|
||||||
|
{
|
||||||
|
0x000000, // 3DDKSHADOW
|
||||||
|
0xdfdfdf, // 3DLIGHT
|
||||||
|
0x000000, // INFOTEXT
|
||||||
|
0xe1ffff, // INFOBK
|
||||||
|
|
||||||
|
0, // filler - no std colour with this index
|
||||||
|
|
||||||
|
// TODO: please fill in the standard values of those, I don't have them
|
||||||
|
0, // HOTLIGHT
|
||||||
|
0, // GRADIENTACTIVECAPTION
|
||||||
|
0, // GRADIENTINACTIVECAPTION
|
||||||
|
0, // MENU
|
||||||
|
0, // MENUBAR (unused)
|
||||||
|
};
|
||||||
|
|
||||||
|
if ( index == wxSYS_COLOUR_LISTBOX )
|
||||||
|
{
|
||||||
|
// there is no standard colour with this index, map to another one
|
||||||
|
index = wxSYS_COLOUR_WINDOW;
|
||||||
|
}
|
||||||
|
else if ( index > wxSYS_COLOUR_BTNHIGHLIGHT )
|
||||||
|
{
|
||||||
|
// the indices before BTNHIGHLIGHT are understood by GetSysColor() in
|
||||||
|
// all Windows version, for the other ones we have to check
|
||||||
|
bool useDefault;
|
||||||
|
|
||||||
|
// none of the is supported under Win16 anyhow
|
||||||
|
#ifdef __WIN32__
|
||||||
|
int verMaj, verMin;
|
||||||
|
wxGetOsVersion(&verMaj, &verMin);
|
||||||
|
if ( verMaj < 4 )
|
||||||
|
{
|
||||||
|
// NT 3.5
|
||||||
|
useDefault = TRUE;
|
||||||
|
}
|
||||||
|
else if ( verMaj == 4 )
|
||||||
|
{
|
||||||
|
// Win95/NT 4.0
|
||||||
|
useDefault = index > wxSYS_COLOUR_INFOBK;
|
||||||
|
}
|
||||||
|
else if ( verMaj == 5 && verMin == 0 )
|
||||||
|
{
|
||||||
|
// Win98/Win2K
|
||||||
|
useDefault = index > wxSYS_COLOUR_GRADIENTINACTIVECAPTION;
|
||||||
|
}
|
||||||
|
else // >= 5.1
|
||||||
|
{
|
||||||
|
// 5.1 is Windows XP
|
||||||
|
useDefault = FALSE;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
useDefault = TRUE;
|
||||||
|
#endif // __WIN32__
|
||||||
|
|
||||||
|
if ( useDefault )
|
||||||
|
{
|
||||||
|
// special handling for MENUBAR colour: we use this in wxToolBar
|
||||||
|
// and wxStatusBar to have correct bg colour under Windows XP
|
||||||
|
// (which uses COLOR_MENUBAR for them) but they should still look
|
||||||
|
// correctly under previous Windows versions as well
|
||||||
|
if ( index == wxSYS_COLOUR_MENUBAR )
|
||||||
|
{
|
||||||
|
index = wxSYS_COLOUR_3DFACE;
|
||||||
|
}
|
||||||
|
else // replace with default colour
|
||||||
|
{
|
||||||
|
int n = index - wxSYS_COLOUR_BTNHIGHLIGHT;
|
||||||
|
|
||||||
|
wxASSERT_MSG( n < WXSIZEOF(s_defaultSysColors),
|
||||||
|
_T("forgot tp update the default colours array") );
|
||||||
|
|
||||||
|
colSys = s_defaultSysColors[n];
|
||||||
|
hasCol = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !hasCol )
|
||||||
|
{
|
||||||
|
colSys = ::GetSysColor(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
return wxRGBToColour(colSys);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -115,6 +115,8 @@ bool wxStatusBar95::Create(wxWindow *parent,
|
|||||||
SetFieldsCount(1);
|
SetFieldsCount(1);
|
||||||
SubclassWin(m_hWnd);
|
SubclassWin(m_hWnd);
|
||||||
|
|
||||||
|
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -96,7 +96,6 @@
|
|||||||
#define TBSTYLE_FLAT 0x0800
|
#define TBSTYLE_FLAT 0x0800
|
||||||
#define TBSTYLE_TRANSPARENT 0x8000
|
#define TBSTYLE_TRANSPARENT 0x8000
|
||||||
#endif
|
#endif
|
||||||
// use TBSTYLE_TRANSPARENT if you use TBSTYLE_FLAT
|
|
||||||
|
|
||||||
// Messages
|
// Messages
|
||||||
#ifndef TB_GETSTYLE
|
#ifndef TB_GETSTYLE
|
||||||
@@ -232,8 +231,17 @@ bool wxToolBar::Create(wxWindow *parent,
|
|||||||
|
|
||||||
if (style & wxTB_FLAT)
|
if (style & wxTB_FLAT)
|
||||||
{
|
{
|
||||||
if (wxTheApp->GetComCtl32Version() > 400)
|
// static as it doesn't change during the program lifetime
|
||||||
msflags |= TBSTYLE_FLAT;
|
static int s_verComCtl = wxTheApp->GetComCtl32Version();
|
||||||
|
|
||||||
|
// comctl32.dll 4.00 doesn't support the flat toolbars and using this
|
||||||
|
// style with 6.00 (part of Windows XP) leads to the toolbar with
|
||||||
|
// incorrect background colour - and not using it still results in the
|
||||||
|
// correct (flat) toolbar, so don't use it there
|
||||||
|
if ( s_verComCtl > 400 && s_verComCtl < 600 )
|
||||||
|
{
|
||||||
|
msflags |= TBSTYLE_FLAT | TBSTYLE_TRANSPARENT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MSW-specific initialisation
|
// MSW-specific initialisation
|
||||||
@@ -244,9 +252,7 @@ bool wxToolBar::Create(wxWindow *parent,
|
|||||||
::SendMessage(GetHwnd(), TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
|
::SendMessage(GetHwnd(), TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
|
||||||
|
|
||||||
// set up the colors and fonts
|
// set up the colors and fonts
|
||||||
wxRGBToColour(m_backgroundColour, GetSysColor(COLOR_BTNFACE));
|
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR));
|
||||||
m_foregroundColour = *wxBLACK;
|
|
||||||
|
|
||||||
SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
|
SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
|
||||||
|
|
||||||
// position it
|
// position it
|
||||||
|
Reference in New Issue
Block a user