В проекте C ++ MFC я использую CMFCMenuButton
используя MSVC 2013.
Когда я переключаю режим высокой контрастности кнопка не перекрашена должным образом (для сравнения отображается обычная кнопка):
призвание Invalidate()
или же ShowWindow(SW_HIDE);ShowWindow(SW_SHOW);
кажется, не имеет никакого эффекта — даже сворачивание диалога не вызывает правильного перерисовывания. Как заставить кнопку перекрасить в обновленный цвет системы?
Обновить: Принудительный выбор цветов после переключения режима контрастности просто делает текст кнопки видимым, однако сама кнопка, граница, не видна.
m_ctrlOkButton.SetFaceColor(::GetSysColor(COLOR_BTNFACE));
m_ctrlOkButton.SetTextColor(::GetSysColor(COLOR_BTNTEXT));
Это заняло у меня некоторое время, но я смог решить это. Я наследую от CMFCMenuButton
класс, чтобы я мог обрабатывать некоторые события:
Получите цвет на кнопке справа:
Обрабатывать WM_SYSCOLORCHANGE
событие и звонок GetGlobalData()->UpdateSysColors();
(убедитесь, что он передан нашему родителю до, например, __super::OnSysColorChange();
)
Получите границы и фон справа:
Обрабатывать WM_THEMECHANGED
событие и звонок CMFCVisualManager::GetInstance()->DestroyInstance();
чтобы закрыть все дескрипторы данных открытой темы.
Других решений пока нет …