请教各位高手:
    我想把CTreeCtrl中不同级别的节点的字体弄成不同的字体或颜色,这个有什么思路么?

解决方案 »

  1.   

    没有设置
    需要捕获NM_CUSTOMDRAW之后更改字体,参考NM_CUSTOMDRAW的文档
      

  2.   


    void CTreectrlDlg::OnCustDrawTree(NMHDR *pNMHDR,LRESULT *pResult)
    {
    // TODO: Add your message handler code here and/or call default
    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);
    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) && (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;
    // afxDump << "1\n";
    }
        else // without these ,1st blue !
        {
            pdc->FillSolidRect(&rc, GetSysColor(COLOR_WINDOW));
            pdc->SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
            pdc->TextOut(rc.left+2, rc.top+2, txt);
    // afxDump << "2\n";
        }
    }

    注意只能改字体,不能改大小(如:cyFont-12)
      

  3.   

    要改大小的话得用CDRF_NEWFONT。你用CDRF_SKIPDEFAULT当然不会重新计算项目大小了