You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MFC中设置日期/时间选择器颜色属性无效的问题

日期时间选择器(DTP)深色模式颜色设置失效问题

操作步骤

  • 向对话框添加日期/时间选择器控件
  • 将控件映射为MFC控件变量m_Date
  • 重写对话框的OnInitDialog函数,添加以下代码:
SetWindowTheme(m_Date.GetSafeHwnd(), L" ", L" ");
m_Date.SetMonthCalColor(MCSC_BACKGROUND, DarkModeTools::kDarkSheetBackgroundColor);
m_Date.SetMonthCalColor(MCSC_MONTHBK, DarkModeTools::kDarkControlBackgroundColor);
m_Date.SetMonthCalColor(MCSC_TEXT, DarkModeTools::kDarkTextColor);
m_Date.SetMonthCalColor(MCSC_TITLEBK, RGB(0, 120, 215));
m_Date.SetMonthCalColor(MCSC_TITLETEXT, DarkModeTools::kDarkTextColor);
m_Date.SetMonthCalColor(MCSC_TRAILINGTEXT, RGB(128, 128, 128));

// m_Date.SetMonthCalFont
auto pCalendar = m_Date.GetMonthCalCtrl();
if (pCalendar)
{
    SetWindowTheme(pCalendar->GetSafeHwnd(), L" ", L" ");
    // pCalendar->SetCalendarBorder(8); // Default is 4
    pCalendar->SetColor(MCSC_BACKGROUND, DarkModeTools::kDarkSheetBackgroundColor);   // Dark background
    pCalendar->SetColor(MCSC_MONTHBK, DarkModeTools::kDarkControlBackgroundColor);      // Slightly lighter dark
    pCalendar->SetColor(MCSC_TEXT, DarkModeTools::kDarkTextColor);      // Light gray text
    pCalendar->SetColor(MCSC_TITLEBK, RGB(0, 120, 215));     // Windows 11 accent blue
    pCalendar->SetColor(MCSC_TITLETEXT, DarkModeTools::kDarkTextColor); // White text for contrast
    pCalendar->SetColor(MCSC_TRAILINGTEXT, RGB(128, 128, 128)); // Dimmed gray for non-month days
}

问题现象

执行上述代码后,所有颜色设置均未生效,效果如下:
日期时间选择器颜色设置未生效效果

但直接向对话框拖入Calendar控件并执行类似颜色设置,却能正常生效,效果如下:
Calendar控件颜色设置生效效果

已尝试的排查

曾查阅相关问题,其中提到:

hwndEdit仅在控件拥有DTS_APPCANPARSE样式且点击日期文本时有效,编辑控件是动态创建销毁的;hwndUD仅在设置了DTS_UPDOWN样式时有效;hwndDropDown仅在下拉框可见时有效。

但这段内容无法解决当前颜色设置失效的问题。目前怀疑需要采用自绘方式,但仅剩余少量白色区域问题待解决,寻求可行的解决方案。


内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:08:27