CMFCMenuButton неправильно перерисовывается при переключении режима высокой контрастности

В проекте C++ MFC я использую CMFCMenuButton используя MSVC 2013.

Когда я переключаю режим высокой контрастности, кнопка не перекрашивается должным образом (для сравнения отображается обычная кнопка):

неправильная перекраска CMFCMenuButton после переключения режима высокой контрастности

призвание Invalidate() или же ShowWindow(SW_HIDE);ShowWindow(SW_SHOW); кажется, не имеет никакого эффекта - даже сворачивание диалога не вызывает правильного перерисовывания. Как заставить кнопку перекрасить в обновленный цвет системы?

Обновление: принудительное использование цветов после переключения режима контрастности просто делает текст кнопки видимым, однако сама кнопка, граница, не видна.

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

1 ответ

Решение

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

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

  2. Получите границы и фон справа:
    Обрабатывать WM_THEMECHANGED событие и звонок CMFCVisualManager::GetInstance()->DestroyInstance(); чтобы закрыть все открытые дескрипторы данных темы.

Другие вопросы по тегам