Отключение custom-отрисовки в контролах
От: Yuri_Ch Россия  
Дата: 17.08.06 09:25
Оценка:
Исправлено форматирование текста. — 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);//обновить главное окно
}

Но контролы не перерисовываются. Если идеи? Если моя ошибка очень грубая и очевидная, не бейте сильно по голове, ОК? Программист я пока очень начинающий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.