【发布时间】:2021-04-08 01:44:27
【问题描述】:
在头文件中:
class CTyDate : public CDateTimeCtrl
在 cpp 文件中:
void CTyDate::PreSubclassWindow()
{
CDateTimeCtrl::PreSubclassWindow();
int n1 = 0;
n1 = SetMonthCalColor(MCSC_TITLEBK, RGB(255, 0, 0));
n1 = SetMonthCalColor(MCSC_MONTHBK, RGB(255, 0, 0));
n1 = SetMonthCalColor(MCSC_TEXT, RGB(255, 0, 0));
n1 = SetMonthCalColor(MCSC_TITLETEXT, RGB(255, 0, 0));
n1 = SetMonthCalColor(MCSC_BACKGROUND, RGB(255, 0, 0));
n1 = SetMonthCalColor(MCSC_TRAILINGTEXT, RGB(255, 0, 0));
}
我为所有者创建了一个新类来绘制这个 CDateTimeCtrl。我确保这个新类绑定正确并且函数 CTyDate::PreSubclassWindow() 已经运行。但是什么也没发生,DateTimeCtrl 的视图和以前一样。
【问题讨论】:
-
SetMonthCalColor(仅)更改月份下拉列表的样式,在您的情况下,当您单击向下箭头时,它将绘制一个全红框。如果这不是您所看到的,那么问题出在将CTyDate挂钩到您尚未发布的控件实际实例的代码中。见How to create a Minimal, Reproducible Example。 -
在你响应
CTyDate控件的DTN_DROPDOWN消息的函数中,你必须做::SetWindowTheme(GetMonthCalCtrl()->GetSafeHwnd(), L" ", L" ");然后所有的颜色将开始正常工作。
标签: mfc