在C ++ MFC项目中,我使用CMFCMenuButton
使用MSVC 2013。
当我切换high contrast mode时,按钮没有正确重新绘制(为了比较,显示了一个普通按钮):
调用Invalidate()
或ShowWindow(SW_HIDE);ShowWindow(SW_SHOW);
似乎没有效果 - 即使最小化对话框也不会导致正确的重绘。如何强制按钮重新绘制更新的系统颜色?
更新:切换对比度模式后强制颜色只会使按钮文本可见,但按钮本身(边框)不可见。
m_ctrlOkButton.SetFaceColor(::GetSysColor(COLOR_BTNFACE));
m_ctrlOkButton.SetTextColor(::GetSysColor(COLOR_BTNTEXT));
答案 0 :(得分:3)
我花了一段时间,但我能够解决这个问题。我继承了CMFCMenuButton
类,以便处理一些事件:
获取右侧按钮的颜色:
处理WM_SYSCOLORCHANGE
事件并致电GetGlobalData()->UpdateSysColors();
(确保将其传播给我们的父母,例如, __super::OnSysColorChange();
)
正确获取边框和背景:
处理WM_THEMECHANGED
事件并致电CMFCVisualManager::GetInstance()->DestroyInstance();
以关闭所有opened theme data handles。