【问题标题】:MFC CDateTimeCtrl::SetMonthCalColor doesn't workMFC CDateTimeCtrl::SetMonthCalColor 不起作用
【发布时间】: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


【解决方案1】:

这个功能我放弃了,win10下就不行了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多