你好,新年快乐,(直到星期四才可以说)
我正在尝试更改 CTabCtrl 类中选项卡的颜色。我正在尝试创建自己的 ReskinCTablCtrl 以便我可以在单独的类中调用它并在整个程序中轻松使用它。
目前我可以更改 CTabCtrl 的背景颜色,但我无法修改选项卡本身。
我用来ON_WM_ERASEBKGND()
画背景,它没有问题:
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()
没有任何成功。我想我可以使用 OnDraw 和 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);
}
}
...
}
我真的很感激至少有一些解决这个问题的方向,也许还有更多的例子或者我应该专注于使用什么方法。我不需要标签是不同的颜色,也许有一种简单的方法可以做到这一点?
我一直在尝试遵循以下链接之类的示例,但我仍然无法找到正确的方法。
https://support.microsoft.com/en-us/help/179909/how-to-change-the-background-color-of-a-tab-control
https://www.codeproject.com/Articles/1786/Ownerdraw-Tab-Controls-Borders-and-All