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

Changing color of a specific character in an item in CListCtrl in MFC

本文关键字:字符 颜色 项目 MFC CListCtrl      更新时间:2023-10-16

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

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

看一下Michael Dunn在CodeProject上的文章《使用自定义绘制在列表控件中做整洁的事情》,以获得一些关于如何进行的想法。

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

挖掘同样的问题;但我不会去这么远的修改/添加到默认的Windows行为绘画字符串…显然,这将是结束,它的所有者绘制。(我很高兴见到你)。