У меня есть CListCtrl, и мне нужно изменить цвет СПЕЦИФИЧЕСКОГО символа/набора символов (который я выбираю путем сравнения) из текста каждой ячейки в список.Изменение цвета конкретного символа в элементе в CListCtrl в MFC
Я знаю, как изменить цвет всего текста ячейки, когда я нахожу символ/набор символов (используя команду 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
- другие вещи довольно очевидны
Я бы сказал, что нужно, чтобы владелец рисовал подэлементы. Выбранное пользовательское решение для рисования позволяет вам изменять свойства (текст или цвет фона, шрифт ...) всего подэлемента, а затем список рисует его с этими свойствами. Одна вещь, которая приходит мне на ум, которую я не пробовал, заключается в том, чтобы переопределить чертеж в фазе CDDS_ITEMPOSTPAINT. Но это в значительной степени владелец-рисование его после того, как он был нарисован. Но вы можете выбрать, когда вам это нужно. – MikMik
Хотя я мог бы избежать использования CustomDraw, но я начну искать. Спасибо за ваш ответ. –