如何修改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
相关产品推荐
相关产品推荐

