| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Проблема с OnPaint. Не пойму, что не так |
| Автор: Kolia 22.10.2006, 01:42 | ||||||||
| Имею void CSaverWnd::OnPaint() (CWnd->CSaverWnd) Ее могу реализовать в двух вариантах. Первый. Он работает, но есть мерцание:
Второй. С буферизацией.
В программе есть таймер, который через определенное время обновляет данные и заставляет окно перерисовываться. Проблема в том, что если я реализую OnPaint() вторым способом, то никакого обновления данных не происходит. Я вписал в нее строки
Тогда все начало меняться. Но делается это естественно не после сообщения таймера. То есть такое чувство, что программа из этой функции не выходит, а в ней и зацикливается. И не реагирует не на какие сообщения таймера. Понимаю, что чего-то не учел, но чего не пойму. Добавил в конец
и заработало. Может кто пояснит сей факт... |
| Автор: maxim1000 23.10.2006, 11:41 | ||||
может, в нём вызывалось EndPaint? |
| Автор: Earnest 23.10.2006, 13:20 | ||
| А также BeginPaint(). Во втором варианте сделай так:
И не надо никакого CWnd::OnPaint(); Программа не реагирует на таймер, т.к. постоянно занимается обновлением: обрабатывает OnPaint. Без вызова BeginPaint\EndPaint не снимается "инвалидность". А таймер по приоритету - самый последний. Основное правило: если уж хватаешь OnPaint, то будь любезен сделать валидным окно. Это можно сделать многими способами, но самый простой - создать объект CPaintDC, тем более что тебе в любом случае нужен контекст. Все дело в волшебных пузырьках... |
| Автор: Kolia 25.10.2006, 02:05 |
| да прибудет с вами бабмуча! Спасиба |