把TREECTRL设置了SHOWSELECTALWAY风格后
默认是选中的ITEM背景色为灰色
请问如何更该这个灰色为自定义的颜色??
谢谢!

解决方案 »

  1.   

    派生个子类CMyTreeCtrl
    void CMyTreeCtrl::OnPaint() 
    {
    CPaintDC dc(this);
    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    CRect rcClip, rcClient;
    dc.GetClipBox(&rcClip);
    GetClientRect(&rcClient);
    CBitmap bitmap;
    bitmap.CreateCompatibleBitmap(&dc,rcClient.Width(),rcClient.Height());
    memDC.SelectObject(&bitmap);
    CRgn rgn;
    rgn.CreateRectRgnIndirect(&rcClip);
    memDC.SelectClipRgn(&rgn);
    rgn.DeleteObject();
    CWnd::DefWindowProc(WM_PAINT,(WPARAM)memDC.m_hDC,0);
    HTREEITEM hItem = GetFirstVisibleItem();
    int n = GetVisibleCount()+1;
    while(hItem && n--)
    {
    CRect rect;
    CFont *pFontDC;
    CFont fontDC;
    LOGFONT logfont;
    CFont *pFont = GetFont();
    pFont->GetLogFont(&logfont);
    fontDC.CreateFontIndirect(&logfont);
    UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;
    pFontDC = memDC.SelectObject(&fontDC);
    CString sItem = GetItemText(hItem);
    GetItemRect( hItem, &rect, TRUE );
    if (!(GetItemState(hItem, selflag) & selflag))memDC.SetBkColor(RGB(0,255,0));
    else memDC.SetBkColor(RGB(255,0,0));
    memDC.TextOut(rect.left+2,rect.top+1,sItem);
    memDC.SelectObject(pFontDC);
    hItem = GetNextVisibleItem(hItem);
    }
    dc.BitBlt(rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),&memDC, 
    rcClip.left,rcClip.top,SRCCOPY);
    }