Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > глюк с таймером...


Автор: bilbobagginz 13.3.2007, 17:55
Здравствуйте, гуры эмэфси.

есть класс, наследник CDialog
у него есть регион, который я перекрашиваю через таймер.
т.е. в какой-то момент таймер включается и рект красится 2мя цветами попеременно, в зависимости от переменной (спасибо zkv)
таймер включается, но после нажатия на кнопку первая перемена цвета не происходит пока не нажмешь на еще какую-то кнопку.

Видимо какой-то регион не обозначается невалидным.
InvalidateRect() натыкал везде, но все равно, после кнопки перехода в мигание нужно нажать еще на что-то, чтобы мигание началось.

Выключение мигания происходит корректно.

Куда рыть ? какой код привести ?


Спасибо за внимание.

Автор: vinter 13.3.2007, 18:49
Попробуй Invalidate(), может все-таки где-то нет InvalidateRect()..
если не поможет, значит ошибка в другом месте, и один вариант сразу отпадетsmile
или сунь в нажатие первой кнопки UpdateWindow()

Автор: ama_kid 13.3.2007, 19:46
Цитата(bilbobagginz @  13.3.2007,  17:55 Найти цитируемый пост)
какой код привести ?
Приведи лучше сразу весь проект, чтобы можно было покопаться с рабочей проблемой. У эмэфси бесполезно куски кода приводить - слишком объемно. Может надо в таймере принудительно посылать сообщение перерисовки?... Может таймер криво запускается или переменная (за которую спасибо zkv) криво\непоследовательно инициализируется?... Сомнительно, конечно, но в любом случае без конкретного кода получается гадание на воздушных потоках...   smile 

Автор: zkv 13.3.2007, 21:09
Цитата(ama_kid @  13.3.2007,  19:46 Найти цитируемый пост)
Может таймер криво запускается или переменная (за которую спасибо zkv) криво\непоследовательно инициализируется?

что за наезды на мои переменные? smile я ничего не делал только пример показал smile

bilbobagginz, так действительно не очень понятно, я попробую собрать тестовый проект как время посвободнее будет. На твоем месте, я попробовал бы создать новый (тестовый) проект, и воссоздать ошибочную ситуацию, может ответ сам всплывет, а если нет, то его можно будет показать здесь. 

Автор: bilbobagginz 13.3.2007, 21:37
Цитата

что за наезды на мои переменные? smile я ничего не делал только пример показал smile

во-первых, к тебе никаких притензий!
ты же не знаешь что я там с твоими переменными уже наделал smile

Автор: Earnest 15.3.2007, 10:16
Действительно, лучше начать с "чистого" листа. С перекраской по таймеру все предельно просто: по таймеру меняем переменную, отвечающую за цвет\размер\... и делаем Invalidate. На OnPaint рисуем, используя эту переменную. Всегда железно работает.

Автор: bilbobagginz 16.3.2007, 13:50
спасибки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)