You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MFC中CTabCtrl的标签颜色?自定义ReskinCTabCtrl类遇阻

自定义MFC TabCtrl标签颜色的困扰

嘿,各位大佬,新年快乐(截止周四都能问候哈)!

已完成的部分

我现在在折腾MFC里的CTabCtrl标签颜色,为了能在程序各个模块复用,特意自定义了一个ReskinCTabCtrl类。目前已经通过ON_WM_ERASEBKGND()成功把CTabCtrl的背景色改成我想要的了,代码如下:

BOOL ReskinCTabCtrl::OnEraseBkgnd(CDC* pDC) {
 CRect rect;
 GetClientRect(&rect);
 CBrush myBrush(RGB(51, 51, 51)); // dialog background color
 BOOL bRes = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);
 pDC->SetBkColor(RGB(51, 51, 51));
 pDC->FillRect(&rect, &myBrush);
 return bRes;
}

遇到的问题

但头疼的是标签本身的颜色死活改不了,还是MFC默认的样子。我尝试实现ON_WM_PAINT()和ON_WM_DRAWITEM()都没成功,相关的代码片段大概是这样的:

void ReskinCTabCtrl::OnPaint() {
 ...
 // paint the tabs first and then the borders
 int nTab = GetItemCount();
 int nSel = GetCurSel();
 if (!nTab) // no pages added
 return;
 while (nTab--) {
 if (nTab != nSel) {
 dis.itemID = nTab;
 dis.itemState = 0;
 VERIFY(GetItemRect(nTab, &dis.rcItem));
 dis.rcItem.bottom -= 2;
 DrawItem(&dis);
 DrawItemBorder(&dis);
 }
 }
 ...
}

求助需求

我不需要不同标签有不同颜色,就是想统一改成自定义的颜色就行。有没有大佬能给个解决方向、示例代码,或者告诉我应该重点用哪些方法?之前查过一些官方文档和第三方教程,但还是没搞定这个问题。


内容的提问来源于stack exchange,提问作者Kemal Tezer Dilsiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:50:17