如题,谢谢回答

解决方案 »

  1.   

    需要自绘,自己派生一个tabctrl
    响应WM_PAINT消息 在里面绘制即可,并不复杂的
    int   nTab= GetItemCount();   
    int   nSel   =   GetCurSel();
    if   (!nTab)   // no   pages   added   
     return 0; 
           CRect rcItem;  
    while(nTab--) 
    {   
    GetItemRect(nTab,&rcItem);
                    //在此绘制标签文本背景等
             }
      

  2.   

    用 VS2008 sp1 里面 CMFCTabCtrl,啥都帮你做了。看图:
      

  3.   

    你好,谢谢你的回答,我用了你的方法但是仍然没有被修改是怎么回事?谢谢void CEnTabCtrl::onPaint()
    {
    CPaintDC   dc(this); 
    int nTab= GetItemCount();
    int nSel = GetCurSel();

    CRect rcItem; 
    while(nTab--)
    {
    GetItemRect(nTab,&rcItem);
    if (nSel==0)
    {
                    dc.SetTextColor(RGB(255,255,255));
    }
        
       
    }
    }这是我修改后的代码
      

  4.   

    你要将你的控件跟这个类关联起来CPaintDC   dc(this); 
        int nTab= GetItemCount();
        int nSel = GetCurSel();
        
        CRect rcItem; 
        while(nTab--)
            {
                GetItemRect(nTab,&rcItem);
                if (nSel==0)
                {
                       dc.SetTextColor(RGB(255,255,255));
                }
                
       
            }你这段代码什么意思??怎么能这么绘的呢?晕极,给段代码你,自己转下
    :LRESULT CTabCtrlEx::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    { CRect rect;
    GetClientRect(&rect);
    CPaintDC dc(m_hWnd);
    CMemoryDC MemDC(dc, rect);
    CBrush br;
    br.CreateSolidBrush(RGB(227,230,235));
    MemDC.FillRect(&rect,br); int   nTab;
    int   nItemCount =   GetItemCount();   
    int   nSel   =   GetCurSel();
    nTab = nItemCount;
    if   (!nTab)   // no   pages   added   
    return 0;   
        CRect rcItem;
        CRect rectTemp;
    CString strItem;
    TCITEM tcItem;
    tcItem.pszText = strItem.GetBuffer(1024);
    tcItem.cchTextMax = 1023; CPen pen;
    pen.CreatePen(PS_SOLID,1,RGB(157,177,186));
    MemDC.SelectPen(pen); while(nTab--) 
    {   
    memset(tcItem.pszText,0,1024*2);
    GetItemRect(nTab,&rcItem);
    if (nTab==nSel)
    {
    rcItem.InflateRect(0,3,0,0);
    }
    rectTemp = rcItem;
    rectTemp.DeflateRect(1,1);
    if (nTab ==nSel)
    {
    MemDC.FillSolidRect(&rectTemp,RGB(227,230,235));
    }
    else
    {
    MemDC.Rectangle(&rcItem);
                MemDC.FillSolidRect(&rectTemp,RGB(255,255,255));
    } CPoint point;
    GetCursorPos(&point);
    ScreenToClient(&point);
    if (rcItem.PtInRect(point)||(nTab ==nSel)) // 鼠标在标签或者标签被选中,高亮显示
    {
     rectTemp = rcItem;
     rectTemp.bottom=rectTemp.top+3;
     MemDC.FillSolidRect(&rectTemp,RGB(255,200,60));
    } CFont font;
    font.CreateFont(12,   // nHeight
    0,                         // nWidth
    0,                         // nEscapement
    0,                         // nOrientation
    FW_NORMAL,                 // nWeight
    FALSE,                     // bItalic
    FALSE,                     // bUnderline
    0,                         // cStrikeOut
    ANSI_CHARSET,              // nCharSet
    OUT_DEFAULT_PRECIS,        // nOutPrecision
    CLIP_DEFAULT_PRECIS,       // nClipPrecision
    DEFAULT_QUALITY,           // nQuality
    DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
    CMainFrame::get_string(IDS_ITEM_NAME_DEF_FONT));
            MemDC.SelectFont(font);
    MemDC.SetBkMode(TRANSPARENT);
    tcItem.mask = TCIF_TEXT;
    GetItem(nTab,&tcItem);
    strItem.Format(_T("%s"),tcItem.pszText);
    MemDC.DrawText(strItem,strItem.GetLength(),&rcItem,DT_CENTER|DT_VCENTER|DT_SINGLELINE);

    if (nTab==nItemCount-1)
    {
    MemDC.MoveTo(rcItem.right,rcItem.bottom);
    MemDC.LineTo(rect.right,rcItem.bottom);
    }
    } return 0;
    }
      

  5.   

    在void CEnTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpdis)中修改标签文字颜色与背景颜色
      

  6.   


    void CEnTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpdis)
    {
    TC_ITEM tci; 
        CDC* pDC = CDC::FromHandle(lpdis->hDC); 
        CRect rect(lpdis->rcItem); 
        char szTabText[256]; 
        memset(szTabText,'\0',sizeof(szTabText)); 
        
        tci.mask = TCIF_TEXT; 
        tci.pszText = szTabText; 
        tci.cchTextMax = sizeof(szTabText) -1; 
        GetItem(lpdis->itemID, &tci); 
        
        if (lpdis->itemAction & ODA_DRAWENTIRE) 
        { 
            pDC->TextOut(rect.left+5, rect.top+5, tci.pszText); 
        } 
        
        if ((lpdis->itemState & ODS_SELECTED) && 
            (lpdis->itemAction & (ODA_SELECT | ODA_DRAWENTIRE))) 
        { 
            //Make the color of text of the selected tab to be BLUE. 
            pDC->FillSolidRect(rect,RGB(255,255,255));//修改选中背景颜色

            pDC->SetTextColor(RGB(0,0,0)); //修改该选中文字颜色
            pDC->TextOut(rect.left+5, rect.top+5, tci.pszText); 
        }
    }
      

  7.   

    你的相应的onpaint怎么和我的不一样?我的相应的根本没有参数