MFC 改变Tab控件背景及字体颜色
程序员文章站
2022-04-23 08:43:17
...
1. 首先,修改Tab控件的属性,勾选Owner draw fixed,如下图所示。
2. 新建一个CMyTabCtrl的类,继承CTabCtrl类,如下图所示。
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类,最终对话框效果,如下图所示。
转载于:https://my.oschina.net/shou1156226/blog/615791