Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WinAPI-ekz_shpory.docx
Скачиваний:
12
Добавлен:
25.09.2019
Размер:
185.19 Кб
Скачать
  1. Общий контекст, родительский, личный, для класса окна, физический.

1. Общий контекст отображения.

Этот контекст используется чаще всего и поэтому для ускорения доступа к нему Windows использует кэширование (размер кэша достаточен для хранения только 5 контекстов отображения).

Для получения общего контекста отображения приложение должно вызвать функцию BeginPaint (при обработке сообщения WM_PAINT) или HDC WINAPI GetDC(HWND hwnd), int WINAPI ReleaseDC(HWND hwnd, HDC hdc) (при обработке других сообщений). При этом перед регистрацией класса окна в поле стиля класса окна в структуре WNDCLASS должно быть: wc.style = 0;

Функция BeginPaint возвращает указатель на структуру контекста отображения (HDC) для окна hwnd:

HDC WINAPI BeginPaint(HWND hwnd, PAINTSTRUCT FAR* lpps);

Перед этим она подготавливает указанное окно для рисования, заполняя структуру типа PAINTSTRUCT (адрес которой передается через lpps) информацией, которую можно использовать в процессе рисования.

Контекст отображения, полученный при помощи функции BeginPaint, необходимо освободить перед завершением обработки сообщения WM_PAINT, вызвав функцию EndPaint: void WINAPI EndPaint (HWND hwnd, 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;

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