2

ListView の行全体に色付きのプログレス バーを作成したいと考えています。私はここからアイデアを取ります:

カスタムドロー

上の画像では、進行状況バーに色を付けていますが、単一セルのみです。私が望むのは、同じように考えることですが、完全な行です。
これが私がやったことです:

プログレスバーを作る

思ったほどではなかった :)CDDS_ITEM | CDDS_POSTPAINTケースを描いてみました。コード:

static LRESULT
HandleCustomDraw(NMLVCUSTOMDRAW* pcd)
{
    TCHAR buffer[16];
    LVITEM item;

    switch (pcd->nmcd.dwDrawStage)
    {
        case CDDS_PREPAINT:
            /* Tell the control we are interested in per-item notifications.
            * (We need it just to tell the control we want per-subitem
            * notifications.) */
            return CDRF_DODEFAULT | CDRF_NOTIFYITEMDRAW;

        case (CDDS_ITEM | CDDS_PREPAINT) :
            /* Tell the control we are interested in per-subitem notifications. */
            return CDRF_DODEFAULT | CDRF_NOTIFYPOSTPAINT | CDRF_NOTIFYSUBITEMDRAW;
        case (CDDS_ITEM | CDDS_POSTPAINT) :
        {
            // Test: assume the progress value is 50%
            float percent = 0.5;
            RECT r = pcd->nmcd.rc;
            r.right = r.left + percent * (r.right - r.left);
            HBRUSH hProgressBrush = CreateSolidBrush(RGB(255, 255, 0));
            FillRect(pcd->nmcd.hdc, &r, hProgressBrush);
            return CDRF_SKIPDEFAULT;
        }
    }
}

期待される結果は、たとえば、行Item 8percent = 0.5、行の先頭から 3 番目の列の間まで塗りつぶされた四角形であり、行の残りの部分は別の色です。
どうすればそれを達成できますか?選択された/フォーカスされた/非アクティブな行に別の色を描画する必要があることはわかっていますが、それで問題ありません。

編集:
上の画像(2番目の画像)は、上記のコードで取得したものです。
私が欲しいものをデモ:

ここに画像の説明を入力

4

1 に答える 1