то причина ошибки станет вам
раммирование для Windows" ("Charles Petzold, Programming
Windows"), то причина ошибки станет вам ясна. Минимальная реак-
ция, которая нужна Windows в ответ на сообщение WM_PAINT, должна
состоять в вызове BeginPaint, за которым следует EndPaint. Если
эти подпрограммы не вызываются, то Windows не знает, что было по-
лучено сообщение WM_PAINT, и продолжает посылать WM_PAINT прог-
рамме.
Обратите внимание, что вызов BeginPaint находился внутри
оператора if, и подпрограмма при первой прорисовке экрана не вы-
зывалась. Чтобы решить проблему, вы должны вынести оператор с вы-
зовом BeginPaint за пределы условного оператора if.
Как обстоит дело с оператором EndPaint? Он тоже находится
внутри if, вместе с вызовом подпрограммы ReleaseDC, которая осво-
бождает hdc, логический номер (описатель) контекста устройства,
устанавливаемый вызовом BeginPaint. Эти две строки должны нахо-
диться вне конструкции if.
Завершение BCWDEMOA
-----------------------------------------------------------------
В BCWDEMOB, второй версии программы, которую вы будете изу-
чать, ошибка, связанная с WM_PAINT, уже исправлена. Прежде чем
загружать эту программу, нужно завершить работу BCWDEMOA, чтобы
освободить используемые ей ресурсы. Поскольку единственная проб-
лема с этой программой состояла в том, что при первом проходе не
выполнялся код внутри оператора if, установка CurrentPointer в
TDeb 3.0 #3-3 = 56 =
ноль приведет к выполнению этого кода, что позволяет нормально
выйти из программы. Для завершения программы выполните следующие
шаги:
1. В окне Windows Messages (Сообщения Windows) уберите имя
оконной процедуры WndProc в левой верхней области, чтобы