RT
需要在某种事件触发的时候才改变CTree中某一个对应项的颜色

解决方案 »

  1.   

    是不是就自己创建一个继承自CTreeCtrl的类CMyTree,然后在这个类里面重载某个函数啊,问题是到底该怎么弄还是不知道,能不能给点明示啊
      

  2.   

    自绘CTreeCtrl,lz可以去codeproject上找找看
      

  3.   

    你搜下Text_CTreeBT_Demo,这个源代码里面不知道有没有你要的东西
      

  4.   

    void CTreectrlDlg::OnCustDrawTree(NMHDR *pNMHDR,LRESULT *pResult)
    {
    // TODO: Add your message handler code here and/or call default
    NM_TREEVIEW* pnmtv = (NM_TREEVIEW*)pNMHDR;
    *pResult=CDRF_NOTIFYITEMDRAW;
    //
    LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
    DWORD dwDrawStage=pDraw->nmcd.dwDrawStage; if(dwDrawStage & CDDS_ITEM)
    {
    HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec;
    CString txt=m_Tree.GetItemText(hItem);
    if(txt.Find( "本地磁盘 (C:)" ) > -1)// found
    {//
    pDraw->clrTextBk=0xFF;// red
    pDraw->clrText  =0xFFFFFF;// white
    }
    }
    }
      

  5.   

    楼上的方法我试了,
    afx_msg void OnCustDrawTree(NMHDR* pNMHDR,LRESULT* pResult);
    ON_NOTIFY(NM_CUSTOMDRAW, IDC_TREE1,OnCustDrawTree)void CCTreeCtrlDlg::OnCustDrawTree(NMHDR *pNMHDR, LRESULT *pResult)
    {
    NM_TREEVIEW* pnmtv=(NM_TREEVIEW*)pNMHDR;
    *pResult=CDRF_NOTIFYITEMDRAW;

    LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
    DWORD dwDrawStage=pDraw->nmcd.dwDrawStage; if(dwDrawStage&CDDS_ITEM)
    {
    HTREEITEM hItem=(HTREEITEM)pDraw->nmcd.dwItemSpec;
    //CString txt=m_tree.GetItemText(hItem);
    CString txt=m_tree.GetItemText(hItem);
    if(txt.Find("±¾µØ´ÅÅÌ(C:)")>-1)
    {
    pDraw->clrTextBk=0xFF;
    pDraw->clrText=0xFFFFFF;
    }
    }
    }但是没反应
      

  6.   

    void CCTreeCtrlDlg::OnCustDrawTree(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;
        DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
        UINT  uItemState =pDraw->nmcd.uItemState;
    //
        *pResult=CDRF_NOTIFYITEMDRAW;
    //|CDRF_NOTIFYPOSTPAINT|CDRF_NOTIFYSUBITEMDRAW|CDRF_NOTIFYPOSTERASE;
        CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc);
    //
        CPoint pt;
        GetCursorPos(&pt);
        ScreenToClient(&pt);
        MapWindowPoints(&m_tree,&pt,1);
    //    afxDump << pt << "\n";
        UINT flag=TVHT_ONITEMLABEL;
        HTREEITEM hSelect=m_tree.HitTest(pt,&flag);
    //
        CRect rc;
        HTREEITEM hItem=(HTREEITEM) pDraw->nmcd.dwItemSpec;
        m_tree.GetItemRect(hItem,&rc,TRUE);//FALSE);text only
        CString txt=m_tree.GetItemText(hItem);
    //
        if((dwDrawStage & CDDS_ITEM) && (hItem==hSelect))// not (uItemState & CDIS_SELECTED))
        {// 
            pdc->FillSolidRect(&rc,RGB(255,0,0));//clr);
    //
            pdc->SetTextColor(RGB(255,255,255));//white
            pdc->SetBkColor(RGB(255,0,0));//clr);
    //
            if(!m_bFontInited)
            {
                m_bFontInited=TRUE;
                CDC *pDC=GetDC();
                int cyFont=-MulDiv(8,pDC->GetDeviceCaps(LOGPIXELSY),72);//cyFont=-11
                m_hItalicFont.CreateFont(cyFont,0,0,0,FW_THIN,TRUE,
                                         FALSE,FALSE,0,0,0,0,0,_T("Arial"));
            }
            CFont* pfnt=pdc->GetCurrentFont();
            pdc->SelectObject(&m_hItalicFont);//pfnt);
            //
            pdc->TextOut(rc.left+2,rc.top+2,txt);
            pdc->SelectObject(pfnt);        *pResult |= CDRF_SKIPDEFAULT;
        }
    }