21. Общий контекст, родительский, личный, для класса окна, физический. (Ответы на вопросы билетов)
Описание файла
Файл "21. Общий контекст, родительский, личный, для класса окна, физический." внутри архива находится в следующих папках: Ответы на вопросы билетов, WinAPI - Ответы на вопросы билетов. PDF-файл из архива "Ответы на вопросы билетов", который расположен в категории "". Всё это находится в предмете "api windows" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "api windows" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
1.Общий контекст, родительский, личный, для класса окна, физический.1. Общий контекст отображения.Этот контекст используется чаще всего и поэтому для ускорения доступа к нему Windows используеткэширование (размер кэша достаточен для хранения только 5 контекстов отображения).Для получения общего контекста отображения приложение должно вызвать функцию BeginPaint (приобработке сообщения WM_PAINT) или HDC WINAPI GetDC(HWND hwnd), int WINAPI ReleaseDC(HWND hwnd, HDChdc) (при обработке других сообщений).
При этом перед регистрацией класса окна в поле стиля класса окнав структуре WNDCLASS должно быть: wc.style = 0;Функция BeginPaint возвращает указатель на структуру контекста отображения (HDC) для окна hwnd:HDC WINAPI BeginPaint(HWND hwnd, PAINTSTRUCT FAR* lpps);Перед этим она подготавливает указанное окно для рисования, заполняя структуру типа PAINTSTRUCT(адрес которой передается через lpps) информацией, которую можно использовать в процессе рисования.Контекст отображения, полученный при помощи функции BeginPaint, необходимо освободить передзавершением обработки сообщения WM_PAINT, вызвав функцию EndPaint: void WINAPI EndPaint (HWNDhwnd, const PAINTSTRUCT FAR* lpps);Каждый раз, когда приложение получает общий контекст отображения, его атрибуты принимаютзначения по умолчанию.
Поэтому установка атрибутов должна выполняться каждый раз после полученияобщего контекста отображения.2. Контекст отображения для класса окнаЭто такой контекст отображения, который хранится отдельно в единственном экземпляре ииспользуется всеми окнами, созданными на базе класса окна. При регистрации такого класса окна выдолжны указать стиль CS_CLASSDC: wc.style = CS_CLASSDC;Приложения, однажды получив контекст отображения для класса окна, могут не освобождать его.Контекст отображения класса окна можно использовать в тех случаях, когда по соображениямповышения производительности нежелательно выполнять настройку многочисленных атрибутов контекстаотображения после каждого вызова функции BeginPaint или EndPaint.
Эту настройку можно выполнитьтолько один раз. Каждый раз, когда функция окна получает контекст отображения класса окна, в немвыполняется настройка только двух атрибутов - области ограничения и начала системы физическихкоординат устройства вывода. Остальные атрибуты остаются без изменений.3.
Личный контекст отображенияУказав в стиле класса окна значение CS_OWNDC: wc.style = CS_OWNDC;, можно добиться того, что длякаждого окна, созданного на базе такого класса, Windows создаст отдельную структуру контекстаотображения. Личный контекст отображения можно, настроив один раз, никогда не освобождать.4. Родительский контекст отображенияРодительский контекст отображения используется для дочерних окон.
Он позволяет дочерним окнам"унаследовать" атрибуты контекста отображения у родительского окна, например, тот же шрифт и цвета.Для использования родительского контекста отображения в классе, на базе которого создаетсядочернее окно, перед регистрацией необходимо указать стиль CS_PARENTDC: wc.style = CS_PARENTDC;5. Контекст физического устройстваВывод изображений на такое устройство, как принтер, может выполняться с использованием тех жеприемов, что и вывод в окно приложения.
Прежде всего, необходимо получить контекст устройства. Затемможно вызывать функции GDI, выполняющие рисование, передавая им идентификатор полученногоконтекста в качестве параметра.Он не получается, а создается:HDC WINAPI CreateDC(LPCSTR lpszDriver,LPCSTR lpszDevice,LPCSTR lpszOutput,const void FAR* lpvInitData);////////имя драйвераимя устройстваимя файла или порта выводаданные для инициализацииСозданный при помощи функции CreateDC контекст устройства следует удалить (но не освободить),вызвав функцию DeleteDC:BOOL WINAPI DeleteDC(HDC hdc);.