Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Функция ValidateRect




Использование сообщения 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.

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

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

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

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

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

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




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 900; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.