Значение FALSE параметра bErase указывает, что сообщение WM_ERASEBKGND, требующее очистки дефектной области, формироваться не будет. Новая картинка рисуется поверх старой, и мы увидим несколько смещенных прямоугольников, как показано на рис. 3.4.

Формирование статических изображений

Обработка кнопки

Рис. 3.4. Обработка кнопки В отсутствии сообщений WM_ERASEBKGND можно убедиться, установив в ветви обработки этого сообщения контрольный останов на строке i Е = 1 оператора i f (i Е==0). При создании окна в него поступает одно сообщение WM_ERASEBK6ND, но вычислительный процесс не попадает на контрольную точку, так как переменная iE при ее объявлении получила значение 3. После щелчка мышью значение i Е задается равным нулю, но программа не останавливается в контрольной точке, так как сообщений WM_ERASEBKGND больше не поступает.

При щелчке правой кнопкой выполняется вызов функции InvalidateRect-(hWnd,NULL,TRUE), в котором параметр bErase равен TRUE. В этом случае при каждом щелчке изображение в окне стирается и рисуется новый прямоугольник, смещенный на 10 пикселов вниз и вправо. Но операционная система, обрабатывая дефектную область, по-прежнему посылает в окно только сообщение WM_PAINT и не посылает WM_ERASEBKGND.

Требование стереть экран посылается позже при помощи функции Begi nPaintC). Чтобы в этом убедиться, перед вызовом Begi nPai nt () записывается единица в переменную iP, а сразу же после вызова этой функции в переменную iP записывается значение 2.

Если установить контрольную точку (BreakPoi nt) на той же строке i Е - 1, то по щелчку правой кнопкой мыши произойдет контрольный останов, так как в окно придет сообщение WM_ERASEBKGND. При этом в iP будет записана единица. То есть операционная система послала сообщение WM_PAINT. После его получения был выполнен оператор iP = 1 и вызвана функция BeginPaintC). Затем функция BeginPaintC) в середине своей работы повторно вызывает оконную процедуру, передавая ей сообщение WM_ERASEBKGND. Поэтому во время его отработки переменная iP еще равна единице. И наконец, после очистки дефектной области функция Begi nPai nt () продолжает работу и завершается.


⇐ Предыдущая| |Следующая ⇒