gpt4 book ai didi

c++ - 如何获取CTabCtrl的背景颜色?

转载 作者:可可西里 更新时间:2023-11-01 11:57:53 32 4
gpt4 key购买 nike

我的对话框上有一个 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 的背景颜色?

最佳答案

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

关于c++ - 如何获取CTabCtrl的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511626/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com