Когда происходит рисование в окне


Приложение рисует в окне в разное время: в начале создания окна, при изменении размера окна, при перемещении окна из-под другого окна, при свертывании или развертывании окна, при выводе на экран данных из открытого файла и при прокручивании, изменении или выборе части выведенных на экран данных.

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

Некоторые операции, такие как показ открытых файлов и отбор выведенных на экран данных, управляются приложением. Для этих действий программа может отметить обновление части окна, испорченного операцией, заставляя сообщение WM_PAINT отправиться при ближайшей возможности. Если операция требует немедленной обратной связи, приложение может рисовать в ходе операции, которое происходит без ожидания сообщения WM_PAINT. Например, стандартное приложение подсвечивает область пользовательского выбора, а не ждет следующего сообщения WM_PAINT, чтобы обновить область.

Во всех случаях приложение может рисовать в окне, как только оно создается. Чтобы рисовать в окне, программа должна сначала извлечь дескриптор контекста устройства отображения для окна. В идеале, приложение выполняет большинство своих операций рисования в ходе обработка сообщений WM_PAINT. В этом случае, программа извлекает контекст устройства отображения при помощи вызова функция BeginPaint. Если приложение рисует в какое-то другое время, такое как в период работы функции WinMain или в ходе обработки сообщений клавиатуры или мыши, то вызывается функция GetDC или GetDCEx, чтобы извлечь DC устройства отображения.

 

Назад в оглавление
На главную страницу
Переведено 03.11.2010 14:52 ©Copyright V. Sokovikov
Hosted by uCoz