0

我想创建一个树视图,其中特定项目具有不同的背景和文本颜色。我确实在互联网上找到了以下解决方案:Win32 Custom Draw Treeview Control,但在这里他们根据每个项目的级别为每个项目着色。这与我想要的很接近,但我只想为特定的树视图项目着色,而不管它的级别如何,比如说它的 TVITEM 句柄或它的 HTREEITEM。

是否可以使用NM_CUSTOMDRAW消息做这样的事情?如果没有,我怎么能做这样的事情?

编辑:我一直在尝试使用该项目lParam来识别树视图项目,但由于某种原因这些项目仍然不可见。这是我应该处理自定义绘图的函数:

/*
This function will custom draw a tree view
Input: (LRESULT*) res = To store the result (by reference, to be stored)
       (HWND) window = The handled window
       (LPNMTVCUSTOMDRAW) item = The item to draw
       (TVITEM) tvItem = The tv item that should be custom drawn
Output: (BOOL) TRUE if should use the stored value, otherwise FALSE
*/
BOOL customDrawTreeView(LRESULT* res, HWND window, LPNMTVCUSTOMDRAW item, TVITEM tvItem)
{
    switch (item->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
        *res = CDRF_NOTIFYITEMDRAW;
        return TRUE;
        break;
    case CDDS_ITEMPREPAINT:
        if (tvItem.lParam == item->nmcd.lItemlParam)
        {
            item->clrTextBk = 0x383838;
            item->clrText = RGB(255, 255, 255);
            *res = CDRF_SKIPDEFAULT;
            return TRUE;
        }

        break;
    }

    return FALSE;
}
4

1 回答 1

1

是的。TVITEM::lParam您可以使用该成员将信息附加到树项目。该值与结构成员中的NM_CUSTOMDRAW消息一起发送。nmcd.lItemlParamNMTVCUSTOMDRAW

于 2020-07-04T20:21:55.150 回答