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