【发布时间】: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 主题,则为灰色)。
-
其实还不够,详见我的回答