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));

5

Решение

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

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

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]