Добавлен: 20.10.2018
Просмотров: 636
Скачиваний: 5
должно обрабатываться оконной функцией приложения с выполнением
необходимого графического вывода. Отсюда следует, что весь графический
вывод должен быть собран внутри обработчика сообщения wm_Paint,
выполняющего следующие основные действия:
запрос контекста устройства с помощью вызова BeginPaint (а не GetDC
!!!);
создание всех необходимых инструментов, активизация нужных
инструментов и использование их для рисования так, как было описано
выше;
уничтожение инструментов;
освобождение контекста с помощью функции EndPaint.
Важное отличие от ранее рассмотренной схемы состоит в том, что вместо
пары GetDC/ReleaseDC используется пара функций BeginPaint и EndPaint.
Здесь функция BeginPaint имеет два входных параметра: дескриптор
контекста и переменная специального системного типа PaintStruct, которая
предварительно должна быть объявлена, хотя явно она обычно нигде не
используется.
Довольно часто возникает необходимость программной генерации
сообщения wm_Paint для принудительной перерисовки изображения в окне.
Необходимость в принудительной перерисовке возникает тогда, когда
приложение хочет динамически изменить уже существующее изображение,
т.е. добавить или удалить какой-нибудь примитив, изменить цвет текста или
примитива, изменить стиль заполнения фона какой-либо фигуры и т.д. Чаще
всего для этих целей используется системный вызов InvalidateRect. Данная
функция позволяет перерисовывать только часть окна, размеры которой
можно получить с помощью специальной функции, хотя практически всегда
выполняется полная перерисовка клиентской части окна. Вызов
InvalidateRect должен включаться в обработчик какого-либо события (меню,
таймер и т.д.), при этом в обработчике сначала должны выполняться какие-
либо изменения в структуре или параметрах изображения.