Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用WIN32 API(C/C+;+;)的特定于颜色的树视图项_C++_C_Winapi_Treeview_Common Controls - Fatal编程技术网

C++ 使用WIN32 API(C/C+;+;)的特定于颜色的树视图项

C++ 使用WIN32 API(C/C+;+;)的特定于颜色的树视图项,c++,c,winapi,treeview,common-controls,C++,C,Winapi,Treeview,Common Controls,我想创建一个树状视图,其中特定项目具有不同的背景和文本颜色。 我确实在互联网上找到了以下解决方案:,但在这里,他们根据每个项目的级别给每个项目上色。 这接近于我想要的,但我只想给特定的treeview项目上色,不管它的级别如何,比如说通过它的TVITEM句柄或它的HTREEITEM 是否可以使用NM\u CUSTOMDRAW消息执行此操作? 如果没有,我怎么能做这样的事 编辑: 我一直试图使用项目的lParam来识别treeview项目,但由于某些原因,这些项目仍然不可见。 以下是我的函数,该函

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

是否可以使用
NM\u CUSTOMDRAW
消息执行此操作? 如果没有,我怎么能做这样的事

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

/*
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;
}

对。您可以使用
TVITEM::lParam
成员将信息附加到树项。此值与
NMTVCUSTOMDRAW
结构的
nmcd.lItemlParam
成员中的
NM\u CUSTOMDRAW
消息一起发送。

您可以根据需要绘制树视图。那么,是什么阻止了你做你想做的事情呢?这看起来是一个完美的解决方案,但我似乎有另一个问题:我的switch语句中的CDDS_ITEMPREPAINT案例似乎永远无法实现。你知道为什么会发生这种情况吗?CDDS_PREPAINT案例始终是已经到达的案例,即使树视图中确实包含要处理的项目,但它仍然不能满足我的要求。由于某种原因,树视图仍然为空,即使到达“我的代码”并且设置了
clrTextBk
&
clrText
,这些项目仍然不可见。你能看一下我问题的编辑吗?我设法弄明白了(在两种切换情况下我都必须使用SetWindowLongPtr函数)。非常感谢你的帮助。