gpt4 book ai didi

c++ - 在MFC中的CListCtrl中更改项目中特定字符的颜色

转载 作者:太空狗 更新时间:2023-10-29 21:45:46 25 4
gpt4 key购买 nike

我有一个 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 的变量
  • 其他的事情是不言自明的

最佳答案

不,你不能这样做。您需要做的是自定义绘制有问题的文本。这将是棘手的,因为您将不得不通过两个不同的调用来完成它,在这两个调用之间您将不得不手动调整颜色和绘图位置以考虑字符间距等。而且您最好希望你不需要做多行输出。

看文章Neat Stuff to Do in List Controls Using Custom Draw通过 Michael Dunn 在 CodeProject 上获得一些关于如何进行的想法。

或者,如果您可以使用 Toolkit Pro来自 CodeJock 的工具包,您可以利用他们的“XAML”支持(我使用引号是因为它不是真正的 XAML,而是他们自己实现的 XAML 子集)并让他们完成所有工作艰苦的工作。

关于c++ - 在MFC中的CListCtrl中更改项目中特定字符的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com