mfc - 如何在 MFC 中更改 CDateTimeCtrl 的配色方案?
问题描述
CDateTimeCtrl
我需要在 MFC中更改背景、文本、下拉按钮的颜色
。我创建了派生自的新类CDateTimeCtrl
并尝试覆盖OnCtlColor
and CtlColor
,但从未调用过这些函数(已使用类向导添加了消息映射)。如果不编写自己的全新datetimectrl类,我应该如何实现这一点?
解决方案
你可以尝试这样的事情:
// header
CBrush* m_pBkgBrush { nullptr };
COLORREF m_bkgColor { RGB(255, 255, 255) };
COLORREF SetBackgroundColor(BOOL bSysColor, COLORREF cr);
并立即实施:
CYourDateTimeCtrl::CYourDateTimeCtrl()
: CDateTimeCtrl()
, m_bkgColor(::GetSysColor(COLOR_WINDOW))
{
m_pBkgBrush = new CBrush(::GetSysColor(COLOR_WINDOW));
}
CYourDateTimeCtrl::~CYourDateTimeCtrl()
{
if (nullptr != m_pBkgBrush)
delete m_pBkgBrush;
}
COLORREF CYourDateTimeCtrl::SetBackgroundColor(BOOL bSysColor, COLORREF cr)
{
COLORREF color = m_bkgColor;
m_bkgColor = bSysColor ? ::GetSysColor(COLOR_WINDOW) : cr;
if (color != m_bkgColor)
{
delete m_pBkgBrush;
m_pBkgBrush = new CBrush(m_bkgColor);
Invalidate();
}
return color;
}
BOOL CYourDateTimeCtrl::OnEraseBkgnd(CDC* pDC)
{
CBrush* pOldBrush = pDC->SelectObject(m_pBkgBrush);
CRect rect;
pDC->GetClipBox(&rect);
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}
使用时,您会:
MyMonthCalCtrl.SetBackgroundColor(FALSE, RGB(255, 255, 0));
我希望它有所帮助。
推荐阅读
- java - 如何通过终端运行我的 GitHub 存储库:创建运行文件
- c++ - 模板可以专门用于标准库类而不包括该类的标头吗?
- html - 徽标没有被悬停替换
- sql - Oracle 查询比较两个不同表中的日期
- sql - 如何根据付款方式(例如每月,每季度,每年)制作付款发票
- tensorflow - TensorFlow 图像重塑
- sublimetext3 - “尝试解析设置时出错:Packages\User\EasyClangComplete.sublime-settings 中的预期值:18:1”
- python-2.7 - 从我们的太阳能系统中解码寄存器数据
- mysql - 如何将记录插入到具有用户 ID 作为外键的表中
- c# - Azure WebJob 抛出 HttpRequestException