使用 WIN32 API (C/C++) 的颜色特定树视图项目
Color specific treeview item using WIN32 API (C/C++)
我想创建一个树视图,其中特定项目具有不同的背景和文本颜色。
我确实在互联网上找到了以下解决方案:Win32 Custom Draw Treeview Control,但这里他们根据项目的级别为每个项目着色。
这接近我想要的,但我只想为特定的 treeview 项目着色,而不考虑其级别,可以说是通过其 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;
}
是的。您可以使用 TVITEM::lParam
成员将信息附加到树项目。该值与 NMTVCUSTOMDRAW
结构的 nmcd.lItemlParam
成员中的 NM_CUSTOMDRAW
消息一起发送。
我想创建一个树视图,其中特定项目具有不同的背景和文本颜色。 我确实在互联网上找到了以下解决方案:Win32 Custom Draw Treeview Control,但这里他们根据项目的级别为每个项目着色。 这接近我想要的,但我只想为特定的 treeview 项目着色,而不考虑其级别,可以说是通过其 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;
}
是的。您可以使用 TVITEM::lParam
成员将信息附加到树项目。该值与 NMTVCUSTOMDRAW
结构的 nmcd.lItemlParam
成员中的 NM_CUSTOMDRAW
消息一起发送。