24. Назначение и состав структуры PAINTSTRUCT. Сообщение WM_PAINT. (1058878)
Текст из файла
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..
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.