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

时间:2013-05-28 18:58:13

标签: c++ mfc clistctrl

我有一个CListCtrl,我需要从列表中每个单元格的文本中更改A SPECIFIC字符/字符集(我通过比较选择)的颜色。

我知道当我找到字符/字符集时(通过使用'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
  • 的变量
  • 其他事情非常明显

2 个答案:

答案 0 :(得分:2)

不,你不能这样做。您需要做的是自定义相关文本。这将是棘手的,因为您必须使用两个不同的调用,在这两个调用之间,您必须手动调整颜色和绘图位置以考虑字符间距等。并且您更好希望你不需要做多行输出。

看看Michael Dunn撰写的关于CodeProject的文章Neat Stuff to Do in List Controls Using Custom Draw,以获得有关如何继续的一些想法。

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

答案 1 :(得分:0)

挖掘同一问题;但是我不会修改/添加到绘制字符串的默认Windows行为......显然这将是拥有它所有者绘制的终点。(aici am murit si eu :)。