| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > глюк с таймером... |
| Автор: bilbobagginz 13.3.2007, 17:55 |
| Здравствуйте, гуры эмэфси. есть класс, наследник CDialog у него есть регион, который я перекрашиваю через таймер. т.е. в какой-то момент таймер включается и рект красится 2мя цветами попеременно, в зависимости от переменной (спасибо zkv) таймер включается, но после нажатия на кнопку первая перемена цвета не происходит пока не нажмешь на еще какую-то кнопку. Видимо какой-то регион не обозначается невалидным. InvalidateRect() натыкал везде, но все равно, после кнопки перехода в мигание нужно нажать еще на что-то, чтобы мигание началось. Выключение мигания происходит корректно. Куда рыть ? какой код привести ? Спасибо за внимание. |
| Автор: vinter 13.3.2007, 18:49 |
| Попробуй Invalidate(), может все-таки где-то нет InvalidateRect().. если не поможет, значит ошибка в другом месте, и один вариант сразу отпадет или сунь в нажатие первой кнопки UpdateWindow() |
| Автор: ama_kid 13.3.2007, 19:46 |
| Приведи лучше сразу весь проект, чтобы можно было покопаться с рабочей проблемой. У эмэфси бесполезно куски кода приводить - слишком объемно. Может надо в таймере принудительно посылать сообщение перерисовки?... Может таймер криво запускается или переменная (за которую спасибо zkv) криво\непоследовательно инициализируется?... Сомнительно, конечно, но в любом случае без конкретного кода получается гадание на воздушных потоках... |
| Автор: bilbobagginz 13.3.2007, 21:37 | ||
во-первых, к тебе никаких притензий! ты же не знаешь что я там с твоими переменными уже наделал |
| Автор: Earnest 15.3.2007, 10:16 |
| Действительно, лучше начать с "чистого" листа. С перекраской по таймеру все предельно просто: по таймеру меняем переменную, отвечающую за цвет\размер\... и делаем Invalidate. На OnPaint рисуем, используя эту переменную. Всегда железно работает. |
| Автор: bilbobagginz 16.3.2007, 13:50 |
| спасибки. |