2010-01-22 132 views
2

(VS2008,MFC,功能包)更改所选CTreeCtrl项目的颜色?

使用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; 
     } 
    } 
} 

它的工作,但似乎是大材小用一个简单的任务,因为这。

我认为我必须要做一些明显的事情,而不必这样做。

更简单吗?

谢谢。

回答

2

您可以使用SetItemStateTVIS_BOLD将所选项目的文本设置为粗体。你不需要自定义绘制,少代码总是更好。

+0

感谢,将看。 – Max 2010-01-22 20:23:48

4

除了您已经完成的自定义绘图之外,您还可以为所有选定的项目设置状态TVIS_DROPHILITED。但我不确定这是否真的是你想要的,特别是如果你的树形控件也是一个放置目标。

您也可以尝试到树控制的主题设置为探险家:

SetWindowTheme(hTreeControl, L"Explorer", NULL); 

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

0

你可以取代这个 - > isSelected与pcd-> nmcd.uItemState & CDIS_SELECTED