简体   繁体   中英

How to get the background colour of CTabCtrl?

I have a CTabCtrl on my dialog, and it has several labels ( CStatic ) on them. The problem is, the tab control has a white background, and the labels have grey backgrounds. I know why - the parent of the labels is actually the dialog, not the tab control. However, I should be able to use CWnd::OnCtlColor to provide a custom background brush for the labels:

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;
}

Here I use m_nullBrush to provide a brush to paint the background of the labels with, the only trouble is, I don't know how to get the tab's background colour, and instead have got it hardcoded with m_nullBrush.CreateStockObject(WHITE_BRUSH); .

Even if I re-parent the labels onto the tab control, they still end up with a grey background (even though the tab control has a white background).

How do I retrieve the background colour of a CTabCtrl ?

You can put your controls in a child dialog and you must enable theme for this child dialog using 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM