CDC и OnTimer
От: Аноним  
Дата: 11.05.04 06:37
Оценка:
Я пишу приложение под Document\View. Нужно через определённые интервалы времени дорисовывать кое что, например, в CMyView : public CView. Т.е что-то вроде игры. Параметры того что выводится могут быть изменены с помощью мыши или клавы. Вывод начинается по нажатии кнопки на ToolBar (вызывается CreateTimer) и производится в OnTimer. Проблема: в один прекрасный момент указатель на CDC, доставаемый в OnTimer, портится и и приложение падает на отрисовке в этой ф-ии с ошибкой "память не может быть прочтена".
Если кто знает подскажите пожалуста как правильно проводить динамическую отрисовку и синхронизировать её с обработкой событий от мыши и клавы.
Re: CDC и OnTimer
От: aeroteam  
Дата: 11.05.04 07:00
Оценка:
wrote in message news:634452@news.rsdn.ru...
> Я пишу приложение под Document\View. Нужно через определённые интервалы времени дорисовывать кое что, например, в CMyView : public CView. Т.е что-то вроде игры. Параметры того что выводится могут быть изменены с помощью мыши или клавы. Вывод начинается по нажатии кнопки на ToolBar (вызывается CreateTimer) и производится в OnTimer. Проблема: в один прекрасный момент указатель на CDC, доставаемый в OnTimer, портится и и приложение падает на отрисовке в этой ф-ии с ошибкой "память не может быть прочтена".
> Если кто знает подскажите пожалуста как правильно проводить динамическую отрисовку и синхронизировать её с обработкой событий от мыши и клавы.

как получаешь контекст ? GetDC() ?
а потом делаешь ему ReleaseDC() ? или у тебя контекст приватный ?
покажи код — тогда можно будет точнее сказать
Posted via RSDN NNTP Server 1.8
Re: CDC и OnTimer
От: AlexEagle Украина http://www.vik.oil
Дата: 11.05.04 07:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Проблема: в один прекрасный момент указатель на CDC, доставаемый в OnTimer, портится ...


Насколько мне известно — CDC* к событию таймер не имеет никакого отношения. Что можно сделать для перерисовки в этом обработчике — так это изменить параметры прорисовки — а затем вызвать Invalidate
Re[2]: CDC и OnTimer
От: Аноним  
Дата: 11.05.04 07:13
Оценка:
Здравствуйте, aeroteam, Вы писали:

A>как получаешь контекст ? GetDC() ?

да
A>а потом делаешь ему ReleaseDC() ? или у тебя контекст приватный ?
не делаю
A>покажи код — тогда можно будет точнее сказать
код в самом простейшем случае просто сгенерираван визардом (это сути не меняет) MFC AppWizard (exe)/Sigle Document/.../MFC Standard
Re[2]: CDC и OnTimer
От: Аноним  
Дата: 11.05.04 07:16
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Здравствуйте, Аноним, Вы писали:


А>> Проблема: в один прекрасный момент указатель на CDC, доставаемый в OnTimer, портится ...


AE>Насколько мне известно — CDC* к событию таймер не имеет никакого отношения.

К событию таймер нет, но его используют у меня и другие обработчики событий (от мыши) видимо возникает конфликт.
Re[3]: CDC и OnTimer
От: AlexEagle Украина http://www.vik.oil
Дата: 11.05.04 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>К событию таймер нет, но его используют у меня и другие обработчики событий (от мыши) видимо возникает конфликт.


вообще правильно чтобы CDC использоватлся только в OnPaint (OnDraw) — а все остальные события только влияли на параметры перерисовки и заставляли окно перерисовываться (Invalidate)
Re[4]: CDC и OnTimer
От: Аноним  
Дата: 11.05.04 07:24
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>вообще правильно чтобы CDC использоватлся только в OnPaint (OnDraw) — а все остальные события только влияли на параметры перерисовки и заставляли окно перерисовываться (Invalidate)

Попробуй делать с частотой 20 мс Invalidate. Посмотри что получится
Re[3]: CDC и OnTimer
От: aeroteam  
Дата: 11.05.04 07:27
Оценка:
> Здравствуйте, aeroteam, Вы писали:
> A>а потом делаешь ему ReleaseDC() ? или у тебя контекст приватный ?
> не делаю
В MSDN написано : Unless the device context belongs to a window class, the ReleaseDC member function must be called to release the context after painting. То есть, после получения контекста и рисования на нём ты ДООЛЖЕН вызвать ReleaseDС() иначе у тебя текут ресурсы...
Опят же — это при условии, что контекст не приватный.
Posted via RSDN NNTP Server 1.8
Re[5]: CDC и OnTimer
От: AlexEagle Украина http://www.vik.oil
Дата: 11.05.04 07:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Попробуй делать с частотой 20 мс Invalidate. Посмотри что получится

Ну пробуй частичную перерисовку (InvalidateRgn). И так, ради инетереса, а что вообще за задача такая, если игра то лучше пробуй OpenGL — проще будет
Re[4]: CDC и OnTimer
От: Аноним  
Дата: 11.05.04 07:49
Оценка:
Здравствуйте, aeroteam, Вы писали:

A>В MSDN написано : Unless the device context belongs to a window class, the ReleaseDC member function must be called to release the context after painting. То есть, после получения контекста и рисования на нём ты ДООЛЖЕН вызвать ReleaseDС() иначе у тебя текут ресурсы...

A>Опят же — это при условии, что контекст не приватный.
Спасибо, начал делать ReleaseDС, вроде не падает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.