24. Назначение и состав структуры PAINTSTRUCT. Сообщение WM_PAINT. (Ответы на вопросы билетов)
Описание файла
Файл "24. Назначение и состав структуры PAINTSTRUCT. Сообщение WM_PAINT." внутри архива находится в следующих папках: Ответы на вопросы билетов, WinAPI - Ответы на вопросы билетов. PDF-файл из архива "Ответы на вопросы билетов", который расположен в категории "". Всё это находится в предмете "api windows" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "api windows" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
1.Назначение и состав структуры PAINTSTRUCT. Сообщение WM_PAINT.Окно должно быть способно перерисовать свою внутреннюю поверхность или любую его часть в любоймомент времени при получении сообщения WM_PAINT.Сообщение WM_PAINT передается функции окна, если стала видна область окна, скрытая раньше другимиокнами, если вы изменили размер окна или выполнили операцию свертки (пролистывания) изображения в окне.Приложение может передать функции окна сообщение WM_PAINT явным образом, вызывая функцииUpdateWindow, InvalidateRect или InvalidateRgn.Иногда операционная система Windows может сама восстановить содержимое окна, не посылая сообщениеWM_PAINT. Например, при перемещении курсора мыши или пиктограммы свернутого приложения Windowsсамостоятельно восстанавливает содержимое окна.
Если же Windows не может восстановить окно, функция окнаполучает сообщение WM_PAINT и перерисовывает окно самостоятельно.Перед тем как записать сообщение WM_PAINT в очередь приложения, Windows посылает функции окнасообщение WM_ERASEBKGND (см. параметр № 2 для PAINTSTRUCT). Если функция окна не обрабатываетсообщение WM_ERASEBKGND, передавая его функции DefWindowProc, последняя в ответ на это сообщениезакрашивает внутреннюю область окна с использованием кисти, указанной в классе окна (при рег. класса окна).Функция окна может определить область окна, подлежащую обновлению при обработке сообщенияWM_PAINT из данных в структуре PAINTSTRUCT, являющейся 2-м параметром функции BeginPaint:HDC BeginPaint(HWND hwnd, PAINTSTRUCT FAR * lpps);Структура PAINTSTRUCT определена в файле windows.h следующим образом:typedef struct tagPAINTSTRUCT{ HDC hdc;//идентификатор контекста отображенияBOOL fErase;//стирать фона окна в области, подлежащей обновлению?RECT rcPaint;//структура, описывающая прямоуг.
областьBOOL fRestore;//остальные пар-ры исп-ся Windows, не должны изменяться.BOOL fIncUpdate;BYTE rgbReserved[16];} PAINTSTRUCT;2 – если да, то функция BeginPaint посылает функции окна сообщение WM_ERASEBKGND3 – структура типа RECT, описывающую прямоугольную область (координаты задаются в пикселях):typedef struct tagRECT{ int left; х-коор-та верхнего левого углаint top; y-коор-таint right; х-коор-та нижнего правого углаint bottom; y-коор-та} RECT;Если окно содержит несколько областей, подлежащих обновлению, приложение получает только односообщение WM_PAINT, в котором определена область, охватывающая все указанные выше области.Рассмотрим некоторые функции, имеющие отношение к сообщению WM_PAINT.1. Функция UpdateWindow имеет следующий прототип: void UpdateWindow(HWND hwnd);Эта функция посылает сообщение WM_PAINT функции окна, идентификатор которого задан в качествепараметра hwnd, в обход очереди сообщений приложения, если для окна существует непустая областьобновления.2.
При помощи функции InvalidateRect вы можете объявить любую область окна как требующую обновления.void InvalidateRect(HWND hwnd, LPRECT lprc, BOOL fErase);1 – идентификатор окна, для которого выполняется операция.2 – дальний указатель на структуру типа RECT, прямоуг. область, подлежащую обновлению.3 – необходимость стирания фона окна.3. Функция ValidateRect удаляет прямоугольную область из списка областей, подлежащих обновлению:void ValidateRect(HWND hwnd, LPRECT lprc);Итоги:А) Приложение должно выполнять вывод в окно "централизованно" в функции окна при получениисообщения WM_PAINT.Б) При обработке сообщения WM_PAINT для увеличения скорости работы следует использовать координатыобласти окна, подлежащей обновлению, хотя можно обновить и все окно.В) Используя специальные функции, приложение в любой момент времени может определить любуюобласть окна как подлежащую (или не подлежащую) обновлению и послать самому себе в соотв.
функцию окнасообщение WM_PAINT..