6

MFCとVisualStudio2010C++を使用します。CListCtrlの特定の個々の行を目立たせる方法が必要です(ただし、組み込みの選択機能を使用して行を強調表示したくありません)。行の背景の色、フォントの太さ、または画像(パフォーマンスが高い場合)の場合もあります。

理想的には、ストックリストコントロールを使用してこれを行う方法を知りたいです。ただし、これが不可能な場合は、サードパーティのコードを使用する方法を教えてください。

アップデート

これが私が使用することになったコードです:

void MyList::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    NMLVCUSTOMDRAW* cd = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);

    *pResult = CDRF_DODEFAULT;

    switch( cd->nmcd.dwDrawStage)
    {
        case CDDS_PREPAINT:
            *pResult = CDRF_NOTIFYITEMDRAW;
            break;

        case CDDS_ITEMPREPAINT:
            {
                int rowNumber = cd->nmcd.dwItemSpec;
                bool highlightRow = (bool)GetItemData(rowNumber);
                if (highlightRow)
                {
                    COLORREF backgroundColor;
                    backgroundColor = RGB(255, 0, 0);
                    cd->clrTextBk = backgroundColor;
                }
            }
            break;

        default:
            break;
    }
}

私の場合、ItemDataを何にも使用していなかったので、行を強調表示する必要があるかどうかを示すために、ブール値を使用して他の場所でSetItemDataを呼び出しました。

4

3 に答える 3

5

ここでの重要なメッセージは、CListCtrl(およびその他のコントロール)に送信されるNM_CUSTOMDRAWメッセージです。これにより、CListCtrlの一部をカスタム描画することをWindowsに伝えることができます。このメッセージにより、コントロールのどの部分をカスタム描画するかを指定できます。セルのテキストの色を変更するためだけにCListCtrl全体をカスタム描画するのは、完全にやり過ぎです。

心配しないでください。カスタム描画を自分で処理する必要はありません。このメッセージを使用すると、コントロールの特定の行またはセルのフォントやテキスト/背景色を設定できます。

このcodeprojectの記事は、おそらく良い出発点です。

これは、CListCtrlで特定の線の色を設定するための短いコード例です。

于 2012-01-12T12:31:14.860 に答える
-2

次のコードを使用してリスト全体の背景色を変更できますが、行ごとの色を変更するためのサポートされている機能があるかどうかはわかりません。コードは次のとおりです。

YourControl.SetBkColor(RGB(212,208,200));

お役に立てば幸いです。

于 2012-01-12T12:04:02.307 に答える
-3

これが私のプログラムに対して行ったことです。強調表示したい行がcinまたはcoutである場合、またはその他の場合は、このコードをその行の上に配置します。

SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), 0x0F);

最後の部分、つまり0x0Fを使用すると、背景とテキストのカラーコードを変更できます

それを希望の色に変更した後、強調表示する行の下に別の色を挿入します。

 SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), 0x0C);

これが色とそのコードの表です

    0 = Black       8 = Gray
    1 = Blue        9 = Light Blue
    2 = Green       A = Light Green
    3 = Aqua        B = Light Aqua
    4 = Red         C = Light Red
    5 = Purple      D = Light Purple
    6 = Yellow      E = Light Yellow
    7 = White       F = Bright White

黒の背景と青のテキストの例。

SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), 0x01);
于 2013-04-26T11:28:16.900 に答える