Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_4(моя).doc
Скачиваний:
5
Добавлен:
18.08.2019
Размер:
442.37 Кб
Скачать

Использование сообщения wm_paint

Сообщение WM_PAINT система посылает окну во всех случаях, требующих перерисовки клиентской области окна, например при наступлении следующих событий:

  1. Изменились размеры или местоположение окна;

  2. Клиентская область была полностью или частично закрыта другим окном или выпадающим меню, а теперь закрывающий объект исчез;

  3. Приложение вызвало одну из функций работы с полосами прокрутки.

Кроме того, приложение может само инициировать посылку сообщения WM_PAINT посредством вызова одной из функций InvalidateRect, InvalidateRgn или UpdateWindow.

Функция UpdateWindow посылает сообщение WM_PAINT непосредственно в оконную процедуру, минуя очередь приложения.

Использование функций InvalidateRect и InvalidateRgn

Если необходимо сгенерировать сообщение WM_PAINT для перерисовки некоторой части окна, то приложение может воспользоваться функциями InvalidateRect и InvalidateRgn. Функция InvalidateRect имеет следующий прототип:

BOOL InvalidateRect(HWND hWnd, CONST RECT* lpRect, BOOL bErase);

hWnd – дескриптор окна, у которого изменился обновляемый регион. Если этот параметр равен NULL, то система обновляет и перерисовывает все окна приложения, а также посылает сообщения WM_ERASEBKGNB и WM_NCPAINT оконной процедуре до возврата из функции.

lpRect – указатель на строку типа RECT, содержащую клиентские координаты прямоугольника, который добавляется к обновляемому региону. Если этот параметр имеет значение NULL, то к обновляемому региону добавляется вся клиентская область.

bErase – флаг, определяющий будет ли стираться фон обновляемого региона. Если этот параметр равен TRUE, то фон стирается, когда вызывается функция BeginPaint. Если указано значение FALSE, то фон остаётся без изменения. То есть, функция InvalidateRect добавляет прямоугольник в область перерисовки окна hwnd.

Функция InvalidateRgn имеет следующий прототип:

BOOL InvalidateRgn(HWND hWnd, HRGN hRgn, BOOL bErase);

Параметр hRgn содержит дескриптор региона, добавляемого к обновляемому региону. Этот дескриптор можно получить при помощи функций типа CreateRectRgn, CreatePolygonRgn и др. функций.

Таким образом функции InvalidateRect и InvalidateRgn изменяют обновляемый регион так, что в любом случае он уже не является пустым. Если же обновляемый регион не пуст, то система отправляет окну hWnd сообщение WM_PAINT.

Функция ValidateRect

Добавляемые для перерисовки прямоугольники накапливаются до обработки сообщения WM_PAINT. В качестве единой области перерисовки Window’s вычисляет один прямоугольник, который охватывает все добавленные прямоугольники.

Функция ValidateRect удаляет прямоугольную область из списка прямоугольников перерисовки. Прототип этой функции:

BOOL ValidateRect(HWND hwnd, CONST RECT *lpRect);

Параметр hwnd указывает на окно, из области перерисовки которого исключается прямоугольник. Если этот параметр равен NULL, Windows перерисовывает все окна – посылает сообщения WM_ERASEBKGND и WM_NCPAINT функциям всех окон.

Параметр lpRect указывает на прямоугольник, который будет удалён из области перерисовки. Если lpRect = NULL, то из области обновления удаляются все прямоугольники.

В случае успешного выполнения функция возвращает ненулевое значение.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]