比如我的CTreeCtrl 结构是
-1
  -1.1
    -1.1.1
    -1.1.2
  -1.2
-2
  -2.1我想实现的是-1和-2 包括子项的字体颜色区别开来。。
比如
-1
  -1.1
    -1.1.1
    -1.1.2
  -1.2 
字体颜色是红色

-2
  -2.1
是蓝色。。

解决方案 »

  1.   

    CTreeCtrl::SetTextColor  这个我知道。。
    关键是。。节点的颜色要不一样 这个能做到》? 具体点
      

  2.   

    获取节点的item,
    然后更改对应点的文字颜色!!
      

  3.   

    响应NM_CUSTOMDRAW消息。参考以下处理代码:
    LPNMTVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR);
    switch (pNMCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
    *pResult = CDRF_NOTIFYITEMDRAW;
    return;
    case CDDS_ITEMPREPAINT:
    // 这里做判断
    pNMCD->clrText = RGB(0, 255, 255); // 这样设置文字颜色
    pNMCD->clrTextBk = RGB(0, 0, 255); // 这样设置背景颜色
    break;
    }
    *pResult = 0;
      

  4.   

    使用SetItemData给item设置识别项,
    最后设置颜色时用GetItemData获取你设置的识别项就可以判别来!!
      

  5.   

    循环GetParentItem找出根节点来判断。
      

  6.   

    响应NM_CUSTOMDRAW消息。API方式处理如下(请自己转换成MFC):
    int OnNotify(WPARAM wParam,LPARAM lParam)
    {
    LPNMTVCUSTOMDRAW pNMTVCD=(LPNMTVCUSTOMDRAW)lParam;
    switch(pNMTVCD->nmcd.dwDrawStage)
    {
    case CDDS_PREPAINT:
    return CDRF_NOTIFYITEMDRAW;
    break;
    case CDDS_ITEMPREPAINT:
    {
    //判断标签,简单的说就是遍历树。请参考MSDN中的消息TVM_GETNEXTITEM
    //设置文本color
    pNMTVCD->clrText=RGB(,,);
    pNMTVCD->clrTextBk=RGB(,,);
    }
    break;
    RETURN CDRF_DODEFAULT;
    }
      

  7.   

    5楼是正解,要想不同的ITEM有不同的颜色就得自己重载NM_CUSTOMDRAW消息,在里面实现各Item的重绘。SetTextColor()只能设置整个树形控件的文本颜色。