2016-10-19 5 views
5

В проекте C++ MFC Я использую CMFCMenuButton с помощью MSVC 2013.CMFCMenuButton не правильно перекраску при переключении в режим высокой контрастности

Когда я переключите 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

CMFCMenuButton - владелец draw. При этом элемент управления не обнаруживает изменения в цветовой схеме пользовательского интерфейса, поэтому вам может потребоваться определить изменение контрастности и изменить цвета кнопки, чтобы показать ее. – 1201ProgramAlarm

+0

@ 1201ProgramAlarm Спасибо за подсказку, в которой удалось решить это тем временем ... – MrTux

ответ

3

Взял меня, но я смог это решить. Я унаследовав от CMFCMenuButton класса, так что я могу справиться с некоторыми события:

  1. Получить цвет на кнопку справа:
    Handle на WM_SYSCOLORCHANGE событие и называют GetGlobalData()->UpdateSysColors(); (убедитесь, что он распространяется на наш родитель, прежде чем, например, , по __super::OnSysColorChange();)

  2. Получить границы и фон права:
    Ручка WM_THEMECHANGED события и вызвать CMFCVisualManager::GetInstance()->DestroyInstance(); для того, чтобы закрыть все opened theme data handles.

Смежные вопросы