show the selected item with customs colour correctly when the control doesn't have focus (i.e. don't keep the selected background)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24171 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2610,60 +2610,42 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
|
|||||||
|
|
||||||
wxTreeItemAttr * const attr = it->second;
|
wxTreeItemAttr * const attr = it->second;
|
||||||
|
|
||||||
HFONT hFont;
|
// selection colours should override ours,
|
||||||
if ( attr->HasFont() )
|
// otherwise it is too confusing ot the user
|
||||||
{
|
if ( !(nmcd.uItemState & CDIS_SELECTED) )
|
||||||
hFont = GetHfontOf(attr->GetFont());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
hFont = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxColour colText;
|
|
||||||
if ( attr->HasTextColour() )
|
|
||||||
{
|
|
||||||
colText = attr->GetTextColour();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
colText = GetForegroundColour();
|
|
||||||
}
|
|
||||||
|
|
||||||
// selection colours should override ours
|
|
||||||
if ( nmcd.uItemState & CDIS_SELECTED )
|
|
||||||
{
|
|
||||||
lptvcd->clrTextBk =
|
|
||||||
::GetSysColor(COLOR_HIGHLIGHT);
|
|
||||||
lptvcd->clrText =
|
|
||||||
::GetSysColor(COLOR_HIGHLIGHTTEXT);
|
|
||||||
}
|
|
||||||
else // !selected
|
|
||||||
{
|
{
|
||||||
wxColour colBack;
|
wxColour colBack;
|
||||||
if ( attr->HasBackgroundColour() )
|
if ( attr->HasBackgroundColour() )
|
||||||
{
|
{
|
||||||
colBack = attr->GetBackgroundColour();
|
colBack = attr->GetBackgroundColour();
|
||||||
|
lptvcd->clrTextBk = wxColourToRGB(colBack);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
colBack = GetBackgroundColour();
|
|
||||||
}
|
|
||||||
|
|
||||||
lptvcd->clrText = wxColourToRGB(colText);
|
|
||||||
lptvcd->clrTextBk = wxColourToRGB(colBack);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// note that if we wanted to set colours for
|
// but we still want to keep the special foreground
|
||||||
// individual columns (subitems), we would have
|
// colour when we don't have focus (we can't keep
|
||||||
// returned CDRF_NOTIFYSUBITEMREDRAW from here
|
// it when we do, it would usually be unreadable on
|
||||||
if ( hFont )
|
// the almost inverted bg colour...)
|
||||||
|
if ( !(nmcd.uItemState & CDIS_SELECTED) ||
|
||||||
|
FindFocus() != this )
|
||||||
{
|
{
|
||||||
|
wxColour colText;
|
||||||
|
if ( attr->HasTextColour() )
|
||||||
|
{
|
||||||
|
colText = attr->GetTextColour();
|
||||||
|
lptvcd->clrText = wxColourToRGB(colText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( attr->HasFont() )
|
||||||
|
{
|
||||||
|
HFONT hFont = GetHfontOf(attr->GetFont());
|
||||||
|
|
||||||
::SelectObject(nmcd.hdc, hFont);
|
::SelectObject(nmcd.hdc, hFont);
|
||||||
|
|
||||||
*result = CDRF_NEWFONT;
|
*result = CDRF_NEWFONT;
|
||||||
}
|
}
|
||||||
else
|
else // no specific font
|
||||||
{
|
{
|
||||||
*result = CDRF_DODEFAULT;
|
*result = CDRF_DODEFAULT;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user