Winapi:使用CustomDraw更改TreeView的颜色

时间:2013-05-30 08:58:03

标签: c++ winapi treeview custom-draw

我目前正在尝试更改TreeView项目的背景颜色。 因此,我正在使用此消息来创建项目:

    SendMessage(ListView, LVM_INSERTITEM, 0, (LPARAM)&lvI);

此外,我正在处理这样的自定义绘制消息:

        case WM_NOTIFY:
        {
            LPNMLISTVIEW pnm = (LPNMLISTVIEW)lParam;
            if (pnm->hdr.code == NM_CUSTOMDRAW)
            {
                LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)lParam;
                switch (lplvcd->nmcd.dwDrawStage)
                {
                    case CDDS_PREPAINT :
                        return CDRF_NOTIFYITEMDRAW;
                    case CDDS_ITEMPREPAINT:
                        lplvcd->clrTextBk = ???;

                        return CDRF_NEWFONT;
                }
            }

这很好用,我可以将颜色设置为我想要的颜色, 但是,当我发送消息时,我还没有找到将颜色作为参数传递的方法。 毕竟,当我只能指定一个恒定或随机的颜色时,自定义绘制对我来说是无用的。

感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:2)

将项目添加到列表中时,您可以通过设置LVIF_PARAM标记并填写lParam结构的LVITEM成员来传递您自己的数据。然后以NMCUSTOMDRAW::lItemlParam传递给您。

不要对lParam消息本身附带的WM_NOTIFY感到困惑,这是一个不同的lParam :)

答案 1 :(得分:0)

我认为(确切)答案就在这里:Using Custom Draw