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控件并执行类似颜色设置,却能正常生效,效果如下:
已尝试的排查
曾查阅相关问题,其中提到:
hwndEdit仅在控件拥有DTS_APPCANPARSE样式且点击日期文本时有效,编辑控件是动态创建销毁的;hwndUD仅在设置了DTS_UPDOWN样式时有效;hwndDropDown仅在下拉框可见时有效。
但这段内容无法解决当前颜色设置失效的问题。目前怀疑需要采用自绘方式,但仅剩余少量白色区域问题待解决,寻求可行的解决方案。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

