void SourcesListModel::ItemCellRenderer::Render(const ListView& listView, ListView::RenderParams& renderParams) { static const int gutterWidth = 6; bool isSelected = false; bool isHot = (listView.HotRow() == renderParams.rowIndex); Color gutterColor = Color::SystemColor(COLOR_BTNFACE); FontRef font = Font::Create(); // selected if (renderParams.rowIndex == owner.activeItemIndex) { isSelected = true; renderParams.foreColor = Color::SystemColor(COLOR_HIGHLIGHTTEXT); renderParams.backColor = Color::SystemColor(COLOR_HIGHLIGHT); gutterColor = Color::SystemColor(COLOR_ACTIVECAPTION); font->SetBold(); } else { renderParams.backColor = Color::Lighten(Color::SystemColor(COLOR_BTNFACE), 15); renderParams.foreColor = Color::SystemColor(COLOR_BTNTEXT); } // fill the background if (isHot) { renderParams.backColor = Color::Lighten(renderParams.backColor, 15); } // HBRUSH backBrush = ::CreateSolidBrush(renderParams.backColor); ::FillRect(renderParams.hdc, &(RECT) renderParams.rect, backBrush); ::DeleteObject(backBrush); // fill the gutter RECT gutterRect = renderParams.rect; gutterRect.right = gutterRect.left + gutterWidth; backBrush = ::CreateSolidBrush(gutterColor); ::FillRect(renderParams.hdc, &gutterRect, backBrush); ::DeleteObject(backBrush); // draw the caption ::SetTextColor(renderParams.hdc, renderParams.foreColor); ::SetBkMode(renderParams.hdc, TRANSPARENT); // renderParams.rect.location.x += gutterWidth + 4; // font->DrawToHDC(renderParams.hdc, renderParams.rect, this->textValue); }