kutz 2 Ответов: 4

Почему OnPaint() постоянно вызывается во время отладки


Привет,

когда я отлаживаю приложение MFC и ставлю точку останова в OnPaint().Этот

функция непрерывно вызывается во время отладки.Я сомневаюсь, что это происходит только

пока я отлаживаю код.

Заранее спасибо

4 Ответов

Рейтинг:
25

CPallini

Это нормально: это происходит потому, что окно отладчика перекрывает "окрашенное" (а затем последнее перекрывает само окно отладчика), следовательно, система генерирует новое WM_PAINT сообщения.


Рейтинг:
19

Pranit Kothari

Каждый раз, когда ваше окно перекрывается с другим окном, свернутое, развернутое или измененное по размеру сообщение WM_PAINT отправляется вашему приложению операционной системой, и вызывается его обработчик ONPaint (). Во время отладки вы можете столкнуться с любой из этих ситуаций.

Этот[^]очень полезная статья для анализа вашей проблемы.

С уважением


Рейтинг:
1

Member 11211791

У вас может быть какой-то бесконечный цикл в вашей функции "onPaint", так что вы всегда устанавливаете некоторое значение, которое вызывает "Invalidate", что вызовет вызов "onPaint".


Если это так, вы можете зарегистрироваться в событии "недействительно" и добавить туда точку останова.

Я использую 2 экрана, поэтому отладчик не вызывает WM_PAINT, и вышеизложенное помогло мне найти stackTrace, который вызвал бесконечное "onPaint".


Рейтинг:
0

Mehdi Gholam

Это происходит потому, что ваше приложение достигает точки останова Visual Studio запускает и перекрашивает экран, который вы проходите через свой код, и ваше окно приложения снова фокусируется и нуждается в перекраске.

Попробуйте создать приложение и Visual Studio бок о бок (неперекрывающиеся окна).


kutz 2

Если я помещу окно сообщения в эту функцию(OnPaint()) и построю его в режиме отладки или выпуска.Затем я запускаю приложение, которое покажет окно сообщения только в одно время.Пожалуйста, обратите внимание, что приведенный выше случай(мой вопрос) не происходит с visual studio 2010