欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MFC 改变Tab控件背景及字体颜色

程序员文章站 2022-04-23 08:43:17
...

1. 首先,修改Tab控件的属性,勾选Owner draw fixed,如下图所示。

MFC 改变Tab控件背景及字体颜色

2. 新建一个CMyTabCtrl的类,继承CTabCtrl类,如下图所示。

MFC 改变Tab控件背景及字体颜色

3. 重载CMyTabCtrl类的DrawItem()函数,如下:

void CMyTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
    //创建画刷
    CBrush      cbr;
    cbr.CreateSolidBrush(RGB(0,0,0));

    //获取选项卡文字内容
    char        szTabText[100];
    TC_ITEM     tci;
    memset(szTabText, '\0', sizeof(szTabText));
    tci.mask        = TCIF_TEXT;
    tci.pszText     = szTabText;
    tci.cchTextMax  = sizeof(szTabText)-1;
    GetItem(lpDrawItemStruct->itemID, &tci);
    //填充选项卡背景
    CDC *dc = CDC::FromHandle(lpDrawItemStruct->hDC);
dc->FillRect(&lpDrawItemStruct->rcItem, &cbr);

    //绘制选项卡文字
    dc->SetBkColor(RGB(0,0,0));
    dc->SetTextColor(RGB(192,192,192));
    RECT rc;
    rc=lpDrawItemStruct->rcItem;
    rc.top+=3;
    dc->DrawText(tci.pszText,lstrlen(tci.pszText),&rc,DT_CENTER);
}

4. 为CMyTabCtrl类的WM_ERASEBKGND消息添加消息处理函数,如下:

BOOL CMyTabCtrl::OnEraseBkgnd(CDC* pDC) 
{
    // TODO: Add your message handler code here and/or call default
    //获取控件矩形
    CRect   rect;
    GetClientRect(&rect);

    //创建画刷
    CBrush   brush;
    brush.CreateSolidBrush(BLACK);

    //填充控件背景
    pDC-> FillRect(&rect,&brush);

    //return CTabCtrl::OnEraseBkgnd(pDC);
    return true;
}

5. 将对话框类的Tab控件的类改为新建的CMyTabCtrl类,最终对话框效果,如下图所示。

MFC 改变Tab控件背景及字体颜色


转载于:https://my.oschina.net/shou1156226/blog/615791