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

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

165207_Mw3M_1398794.png

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

165252_a1V8_1398794.png

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类,最终对话框效果,如下图所示。

165747_1eDH_1398794.png


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值