我的对话框中有一个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
提供画笔来绘制标签的背景,唯一的麻烦是,我不知道如何获取标签的背景颜色,而是将其硬编码为{ {1}}。
即使我将标签重新显示在标签控件上,它们仍然会以灰色背景结束(即使标签控件具有白色背景)。
如何检索m_nullBrush.CreateStockObject(WHITE_BRUSH);
的背景颜色?
答案 0 :(得分: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