【问题标题】:How to get the background colour of CTabCtrl?如何获取 CTabCtrl 的背景颜色?
【发布时间】:2012-11-23 05:06:17
【问题描述】:

我的对话框上有一个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); 对其进行硬编码.

即使我将标签重新设置为标签控件的父级,它们仍然以灰色背景结束(即使标签控件具有白色背景)。

如何检索CTabCtrl 的背景颜色?

【问题讨论】:

  • 我有一个带有 CTabCtrl 的 MFC 应用程序,并且从来不用处理控件的背景颜色。最大的不同可能是它使用了包含控件的子对话框。
  • 什么是层次结构? CTabCtrl 是 CDialog 的父级,而 CDialog 是控件的父级?并且 CDialog 背景颜色自动为白色?
  • 不,CTabCtrl 和子对话框都是主对话框的子对话框。是的,背景是白色的(如果您使用经典的 Windows 主题,则为灰色)。
  • 其实还不够,详见我的回答

标签: c++ windows mfc tabs


【解决方案1】:

您可以将控件放在子对话框中,并且必须使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多