我想在 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;
}
}
}
预期结果,例如在 row Item 8
,带有percent = 0.5
,是从行开始到第三列之间的填充矩形,并且该行的其余部分是其他颜色。
我怎样才能做到这一点?我知道我必须为选定/聚焦/原始行绘制不同的颜色,但我可以接受。
编辑:
上面的图片(第二张)是我用上面的代码得到的。
演示我想要的: