切换高对比度模式时CMFCMenuButton无法正确重新绘制

时间:2016-10-19 00:26:09

标签: c++ mfc accessibility high-contrast cmfcmenubutton

在C ++ MFC项目中,我使用CMFCMenuButton使用MSVC 2013。

当我切换high contrast mode时,按钮没有正确重新绘制(为了比较,显示了一个普通按钮):

broken repaint of CMFCMenuButton after toggling high contrast mode

调用Invalidate()ShowWindow(SW_HIDE);ShowWindow(SW_SHOW);似乎没有效果 - 即使最小化对话框也不会导致正确的重绘。如何强制按钮重新绘制更新的系统颜色?

更新:切换对比度模式后强制颜色只会使按钮文本可见,但按钮本身(边框)不可见。

m_ctrlOkButton.SetFaceColor(::GetSysColor(COLOR_BTNFACE));
m_ctrlOkButton.SetTextColor(::GetSysColor(COLOR_BTNTEXT));

1 个答案:

答案 0 :(得分:3)

我花了一段时间,但我能够解决这个问题。我继承了CMFCMenuButton类,以便处理一些事件:

  1. 获取右侧按钮的颜色:
    处理WM_SYSCOLORCHANGE事件并致电GetGlobalData()->UpdateSysColors();(确保将其传播给我们的父母,例如, __super::OnSysColorChange();

  2. 正确获取边框和背景:
    处理WM_THEMECHANGED事件并致电CMFCVisualManager::GetInstance()->DestroyInstance();以关闭所有opened theme data handles