如何在Windows列表视图控件中自定义绘制选定的项目行

时间:2011-01-05 16:33:25

标签: winapi mfc

我已经创建了NM_CUSTOMDRAW消息处理程序来自定义绘制List-View控制子项。几乎可以。但是,我不能自定义绘制选中的项目。我的自定义设置始终被忽略,并且绘制了蓝色bkColor上的默认白色文本。

我是否有机会自定义绘制所选项目?

1 个答案:

答案 0 :(得分:1)

我已成功编写代码,在OnCustomDraw()处理程序的CDDS_ITEMPREPAINT绘制阶段自定义绘制所选项目,并在选定项目绘制后返回CDRF_SKIPDEFAULT:

int subitemCount = GetHeaderCtrl().GetItemCount();
CRect itemRect;
for (int i = 0; i < subitemCount; i++) // Draw individual subitem
{
    if (i == 0)
    {
        // My own function
        // calculate correct rect for first(index=0) subitem
        CalculateItemRect(nIndex, itemRect);
    }
    else if (!GetSubItemRect(nIndex, i, LVIR_BOUNDS, itemRect))
    {
        return;
    }

    // Adjust text rect to avoid overlapping with vertical grid line
    itemRect.left += 6;
    dc.DrawText(GetItemText(nIndex, i), itemRect, DT_LEFT | DT_NOCLIP | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS);
}

这段代码到目前为止工作得很好。任何改进建议都受到热烈欢迎。