如何修改CMFCPropertySheet中CMFCPropertySheetTabCtrl的颜色?
MFC中CMFCPropertySheet标签颜色设置不生效的问题
我继承了CMFCPropertySheet类并覆写了OnInitDialog函数,尝试在深色模式下自定义标签控件的颜色,但设置并未生效。相关代码如下:
BOOL CDarkModeMFCPropertySheet::OnInitDialog() { BOOL bResult = CMFCPropertySheet::OnInitDialog(); if (IsUsingDarkMode()) { DarkModeTools::EnableDarkModeForDialog(this); // Customize tab colors for dark mode m_wndTab.SetActiveTabColor(RGB(0, 120, 212)); // Active tab background (blue) m_wndTab.SetTabBkColor(RGB(32, 32, 32)); // Inactive tab background (dark gray) m_wndTab.SetTabTextColor(RGB(200, 200, 200)); // Inactive tab text (light gray) m_wndTab.SetActiveTabTextColor(RGB(255, 255, 255)); // Active tab text (white) // m_wndTab.SetTabBorderColor(RGB(64, 64, 64)); // Tab border (darker gray) } return bResult; }
查看MFC源码可知,变量m_wndTab的定义为:
CMFCPropertySheetTabCtrl m_wndTab;
CMFCPropertySheetTabCtrl具备我使用的所有颜色设置函数,官方文档也表明可以修改标签控件颜色,但设置未生效,请问原因是什么?
更新
有评论建议调整受保护的m_bFlat变量,我最终调用了:
m_wndTab.ModifyTabStyle(CMFCTabCtrl::STYLE_FLAT);
跟踪该调用发现它确实将m_bFlat设为TRUE,但标签颜色仍无变化。
可行替代方案
创建新的视觉管理器类并覆写CMFCVisualManager::GetTabFrameColors,该函数可自定义标签窗口绘制颜色,这个方案是否值得尝试?
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

