更改选定的CTreeCtrl项目的颜色?

Max*_*Max 3 user-interface mfc visual-studio-2008

(VS2008,MFC,功能部件包)

使用CTreeCtrl,当控件失去焦点时,我需要突出显示选定的项目“更好”。

我的树是使用资源编辑器中的“ TVS_SHOWSELALWAYS”选项创建的,但是颜色不够明显。

我已经有了通过自定义绘制消息(NM_CUSTOMDRAW)更改项目颜色的代码,如下所示:

void MyTree::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NMTVCUSTOMDRAW *pcd = (NMTVCUSTOMDRAW   *)pNMHDR;
    switch ( pcd->nmcd.dwDrawStage )
    {
    case CDDS_PREPAINT: 
        *pResult = CDRF_NOTIFYITEMDRAW;     
        break;

    case CDDS_ITEMPREPAINT : 
        {
            HTREEITEM   hItem = (HTREEITEM)pcd->nmcd.dwItemSpec;

            if ( this->IsSelected(hItem ))
            {
                pcd->clrText = GetSysColor(COLOR_HIGHLIGHTTEXT);    
                pcd->clrTextBk = GetSysColor(COLOR_HIGHLIGHT);
            }

            *pResult = CDRF_DODEFAULT;// do not set *pResult = CDRF_SKIPDEFAULT
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它正在工作,但是对于这样一个简单的任务似乎有些过头了。

我想我必须丢失一些显而易见的东西,而不必这样做。

有没有更简单的方法?

谢谢。

Ste*_*fan 5

除了已经完成的自定义工程图之外,还可以为所有选定项目设置状态TVIS_DROPHILITED。但是我不确定那是否真的是您想要的,尤其是如果您的树控件也是放置目标时。

您还可以尝试将树控件的主题设置为资源管理器:

SetWindowTheme(hTreeControl, L"Explorer", NULL);
Run Code Online (Sandbox Code Playgroud)

这使得树控件看起来与在Windows资源管理器中的颜色完全相同。也许这些更符合您的喜好。