我的对话框上有一个CTabCtrl ,它有几个标签( CStatic )。 问题是,选项卡控件具有白色背景,并且标签具有灰色背景。 我知道为什么 – 标签的父母实际上是对话框,而不是选项卡控件。 但是,我应该能够使用CWnd::OnCtlColor为标签提供自定义背景画笔:
HBRUSH MyDialog::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor) { HBRUSH hBrush = __super::OnCtlColor(pDC, pWnd, nCtlColor); const int dialogId = pWnd->GetDlgCtrlID(); if (dialogId == IDC_MY_CONTROL) { pDC->SetBkMode(TRANSPARENT); hBrush = m_nullBrush; } return hBrush; }
在这里,我使用m_nullBrush来提供一个画刷标签的背景,唯一的麻烦是,我不知道如何获得选项卡的背景颜色,而是用m_nullBrush.CreateStockObject(WHITE_BRUSH);来获得硬编码m_nullBrush.CreateStockObject(WHITE_BRUSH); 。
即使我将标签重新放在选项卡控件上,仍然以灰色背景(即使选项卡控件具有白色背景)结束。
如何检索CTabCtrl的背景颜色?
您可以将控件放在子对话框中,并且必须使用EnableThemeDialogTexture为此子对话框启用主题。
#include "Uxtheme.h" ... BOOL CTabDemoDlg::OnInitDialog() { CDialogEx::OnInitDialog(); COneDlg* OneDlg= new COneDlg; OneDlg->Create(IDD_ONE, this); AddPage(OneDlg, L"One"); return TRUE; } void CTabDemoDlg::AddPage(CDialog *Dialog, const wchar_t* Title) { if (IsAppThemed()) EnableThemeDialogTexture(*Dialog, ETDT_ENABLETAB); CRect Rect; TabCtl.GetWindowRect(Rect); Rect.top+= 20; Rect.InflateRect(-4, -4); ScreenToClient(Rect); Dialog->MoveWindow(Rect); TabCtl.InsertItem(0, Title); } IDD_ONE DIALOGEX 0, 0, 224, 111 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_VISIBLE EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN CONTROL "Check1",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,16,39,10 LTEXT "Static",IDC_STATIC,20,36,19,8 EDITTEXT IDC_EDIT1,20,48,40,14,ES_AUTOHSCROLL PUSHBUTTON "Button1",IDC_BUTTON1,84,16,50,14 END