Исправлено форматирование текста. — SchweinDeBurg
Здравствуйте
Имеется следующая задача — есть несколько контролов (Button, Radio, Checkbox) с переопределенной отрисовкой (картинка берется из png-файла). Контролы писал не я. Необходимо реализовать функцию отключения custom-отрисовки, что-то типа переключения тем в Windows.
1. Правильно ли следующее решение — завести глобальную переменную g_isNativeTheme, и проверять ее в каждом методе, имеющем отношеие к переопределению контрола. В методах типа DrawItem(), OnMouseMove() я вызывал метод родитеьского класса, примерно так:
if (g_isNativeTheme)
{
CButton::OnMouseMove(nFlags, point);
return;
}
Метода, характерные только для custom-контрола, превращаются в заглушки, например, OnTimer():
if (g_isNativeTheme) return;
2. Вышеуказанное решение работает только при перезапуске приложения. Когда я пытаюсь реализовать флажок Disable All Skins, примеро так:
void CSettingsGenDialog::OnBnClickedCheckSetgenDisskin()
{
UpdateData(TRUE); //считывает из checkbox
g_isNativeTheme = m_disableTheme;//устанавливаем глобальную переменную
//(здесь точно все работает!)
InvalidateRect(NULL);//обновить окно настроек
CWnd* w = AfxGetMainWnd();
w->InvalidateRect(NULL);//обновить главное окно
}
Но контролы не перерисовываются. Если идеи? Если моя ошибка очень грубая и очевидная, не бейте сильно по голове, ОК? Программист я пока очень начинающий