3

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 の変数です
  • 他のことはかなり自明です
4

2 に答える 2

0

同じ問題を掘り下げます。しかし、文字列を描画するためのデフォルトの Windows の動作を変更/追加するまでには行きません...明らかに、それは所有者が描画したエンドポイントになります.(aici am murit si eu :)。

于 2013-06-01T04:56:26.437 に答える