Главная » C++, C++ Builder » Scribble, часть вторая C++ Builder

0

Несмотря  на то  что  только  что  завершенная нами  программа Scribble выполняет  все,  для  чего предназначалась, делает она это не вполне корректно. На данном этапе мы не собираемся сделать

ее идеальной, но над улучшениями поработаем. Чтобы понять, в чем, собственно, проблема, запустите Scribble и при помощи мыши нарисуйте что-нибудь на пустом поле его окна (я обычно рисую что-то отдаленно напоминающее квадрат). Теперь минимизируйте окно программы, нажав кнопку минимизации (или выбрав команду минимизации из системного меню). Теперь, щелкнув на иконке программы на панели инструментов Windows 95 или NT, раскройте окно опять в полноразмерное состояние. И угадайте, что вы увидите — да-да, пустое поле окна. Что же случилось?

Свойство Canvas объекта TForm не является неизменным. То есть все, что нарисовано в поле формы, пропадает после того, как форма была обновлена. Минимизация, а затем восстановление окна влекут за собой событие обновления. Если мы хотим, чтобы наши шедевры были некоторое время под рукой, нам придется как-то разрешить эту небольшую  проблему.  А  разрешение  ее лежит в событии OnPaint (при рисовании) и его обработчике.

Метод OnPaint вызывается для формы каждый раз, когда окно формы становится недоступно. Как мы уже видели, это происходит, когда мы минимизируем, а затем восстанавливаем окно формы. Также это происходит, если вы открываете другое окно поверх формы.  Например,  если  вы  в центре экрана открываете окно сообщения (message box), то та часть формы, которая окажется под ним, будет недоступной. CBuilder распознает недоступность формы, обрабатывая сообщение Windows WM_PAINT. В ответ на этот метод форма вызывает соответствующий метод формы OnPaint, если таковой имеется. Поскольку в программе нет обработчика события OnPaint, ничего не вызывается, когда форма должна быть перерисована, и, следовательно, ничего не отражается на экране. Пришло время поправить сложившуюся ситуацию.

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии