![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Здравствуйте все.
Помогите разобраться с wm_paint, я как понимаю wm_paint вызывается при перерисовке окна, например изменении размеров, перемещении или вызове InvalidateRect. Пишу следующий код в WM_PAINT
то есть считаю каждый раз когда вызывается WM_PAINT, и счетчик начинает бежать сразу после запуска программы, хотя с окном я ничего не делаю. Помогите разобраться, так должно быть и я чего то не понимаю. Мне кажется что WM_PAINT не должен вызываться так часто. |
|||
|
||||
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Все всем спасибо, разобрался сам.
Надо добавить BeginPaint и EndPaint Примерно так
Это сообщение отредактировал(а) evilsoul - 4.5.2011, 21:24 |
|||
|
||||
| VictorTsaregorodtsev |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 1 Всего: 8 |
BeginPaint+EndPaint? Или 0 вместо 1 возвращается Вашей функцией обработки сообщений?
|
|||
|
||||
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Маленько не понял суть вопроса, так что объясню всю ситуацию.
Была проблема что я нарисовал в wm_paint рисунок через gdi , но он мерцал при отображении, тогда я поставил счетчик вызовов и увидел что событие wm_paint вызывается постоянно. сейчас я поставил beginPaint и endPaint и все работает нормально. Оконная процедура возвращает 0. Если я что то делаю не правильно, буду не против объяснения, ибо не силен в данной теме Добавлено через 3 минуты и 21 секунду Я как понимаю beginPaint и EndPaint нужны что в ручную не отслеживать что конкретно надо перерисовывать, а выделяют только нужный прямоугольник и его перерисовывают, отрисовка, которая происходит вне этого прямоугольника игнорируется. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
BeginPaint\EndPaint, кроме прочего, помечают невалидный регион окна как валидный, и WM_PAINT перестает посылаться (до следующей инвалидации). А если этого не сделать, система будет считать, что регион по прежнему невалидный (т.е. нуждается в перерисовке), и слать WM_PAINT до посинения. И неважно, рисуешь ты при этом в окне или нет... Что у тебя и происходило.
Ну и насчет отсечения ты прав. -------------------- ... |
|||
|
||||
| evilsoul |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 31.3.2006 Репутация: нет Всего: 0 |
Спасибо за пояснение, теперь понятно почему так происходило.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |