2010-01-22 295 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

相關問題