如何在MFC中更改CDATETIMECRL的配色方案?

如何在MFC中更改CDATETIMECRL的配色方案?,mfc,Mfc,我需要改变背景的颜色,文本,下拉按钮的颜色 MFC中的CDateTimeCtrl。我创建了从CDateTimeCtrl派生的新类,并尝试覆盖OnCtlColor和CtlColor,但从未调用这些函数(已使用类向导添加消息映射)。在不编写自己的全新datetimectrl类的情况下,如何实现这一点?您可以尝试以下方法: //头 CBrush*m_pBkgBrush{nullptr}; COLORREF m_bkgColor{RGB(255,255,255)}; COLORREF SetBackgr

我需要改变背景的颜色,文本,下拉按钮的颜色
MFC中的CDateTimeCtrl。我创建了从
CDateTimeCtrl
派生的新类,并尝试覆盖
OnCtlColor
CtlColor
,但从未调用这些函数(已使用类向导添加消息映射)。在不编写自己的全新datetimectrl类的情况下,如何实现这一点?

您可以尝试以下方法:

//头
CBrush*m_pBkgBrush{nullptr};
COLORREF m_bkgColor{RGB(255,255,255)};
COLORREF SetBackgroundColor(布尔bSysColor、COLORREF cr);
现在开始实施:

CYourDateTimeCtrl::CYourDateTimeCtrl()
:CDateTimeCtrl()
,m_bkgColor(::GetSysColor(颜色窗口))
{
m_pBkgBrush=new CBrush(::GetSysColor(COLOR_窗口));
}
CYourDateTimeCtrl::~CYourDateTimeCtrl()
{
如果(nullptr!=m_pBkgBrush)
删除m_pBkgBrush;
}
COLORREF CYOURDATETIMECRL::SetBackgroundColor(布尔bSysColor,COLORREF cr)
{
COLORREF color=m_BKGCLOR;
m_bkgColor=bSysColor?::GetSysColor(颜色窗口):cr;
如果(颜色!=m_bkgColor)
{
删除m_pBkgBrush;
m_pBkgBrush=新的CBrush(m_bkgColor);
使无效();
}
返回颜色;
}
BOOL CYourDateTimeCtrl::OnEraseBkgnd(CDC*pDC)
{
CBrush*pOldBrush=pDC->SelectObject(m_pBkgBrush);
正确无误;
pDC->GetClipBox(&rect);
pDC->PatBlt(rect.left、rect.top、rect.Width()、rect.Height()、PATCOPY);
pDC->SelectObject(pOldBrush);
返回TRUE;
}
当您使用时,您会:

MyMonthCalCtrl.SetBackgroundColor(假,RGB(255,255,0));

我希望它能有所帮助。

您必须用类似这样的方式重写“OnCtlColor”函数:CDateTimeCtrl控件似乎与CCombox不同。CDateTimeCtrl不调用OnCtlColor。Windows使得创建自己的颜色主题特别困难。有时候你真的需要从头开始重新实现这个控件。我会尝试一下。文本颜色和右侧下拉按钮的颜色如何?