Изменение цвета определенного символа в элементе в CListCtrl в MFC

У меня есть CListCtrl, и мне нужно изменить цвет КОНКРЕТНОГО символа / набора символов (который я выбираю для сравнения) из текста каждой ячейки в списке.

Я знаю, как изменить цвет всего текста ячейки, когда я нахожу символ / набор символов (с помощью команды ‘strstr’), но я не могу найти пример, показывающий, как изменить ТОЛЬКО символ / набор персонажей.

Вот пример моего кода:

    void Agenda::OnCustomdrawMyList( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)pNMHDR;

*pResult = CDRF_DODEFAULT;

if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYITEMDRAW;
return;
}else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
{
*pResult = CDRF_NOTIFYSUBITEMDRAW;
return;
}else if ( (CDDS_SUBITEM | CDDS_ITEMPREPAINT) == pLVCD->nmcd.dwDrawStage )
{

// So right now I am in the stage where a SUBITEM is PREPAINTED

int nItem = pLVCD->nmcd.dwItemSpec;
int nSubItem = pLVCD->iSubItem;

char a[100];
listControl.GetItemText(nItem,nSubItem,a,100);

COLORREF textColorFound, textColorDefault;
textColorDefault = RGB(0,0,0);
pLVCD->clrText = textColorDefault;

char* startingFrom;

if( (startingFrom = strstr(a,filterText)) != NULL ) {
// Could I set a pointer here or something like that so
//   the coloring could start only from 'startingFrom'
//   and stop at 'strlen(filterText)' characters?

textColorFound = RGB(205,92,92);
pLVCD->clrText = textColorFound;
}
*pResult = CDRF_DODEFAULT;
}
}
  • listControl — это переменная для моего CListCtrl
  • другие вещи говорят сами за себя

3

Решение

Нет, ты не можешь сделать это. Что вам нужно сделать, так это нарисовать текст на заказ. Это будет сложно, потому что вам придется делать это с двумя разными вызовами, между которыми вам придется вручную настраивать цвет и положение рисования, чтобы учесть межсимвольный интервал и т. Д. лучше надеюсь, что вам не нужно делать многострочный вывод.

Взгляните на статью Удобные вещи в элементах управления списком с использованием Custom Draw Майкл Данн из CodeProject, чтобы получить некоторые идеи о том, как действовать дальше.

В качестве альтернативы, если вы можете использовать Инструментарий Pro Инструментарий от CodeJock вы можете использовать их поддержку «XAML» (я использую кавычки, потому что это не действительно XAML, но их собственная реализация подмножество XAML), и пусть они делают всю тяжелую работу.

2

Другие решения

Копаем по той же проблеме; Но я бы не пошел так далеко, как изменив / добавив стандартное поведение Windows для рисования строк … очевидно, это было бы конечной точкой рисования владельцем (aici am murit si eu :).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector