Работ с общим контекстом отображения



Существуют следующие типы контекста отображения:

· общий контекст отображения (common display context);

· контекст отображения для класса окна (class display context);

· личный контекст отображения (private display context);

· родительский контекст отображения (parent display context);

· контекст отображения для окна (window display context);

· контекст физического устройства (device context);

· информационный контекст (information context);

· контекстдляпамяти (memory device context);

· контекст для метафайла (metafile context).

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

Как правило, приложения выполняют всю работу по рисованию во время обработки сообщения WM_PAINT, хотя часто требуется рисовать и во время обработки других сообщений. Приложение должно придерживаться следующей последовательности действий:

· получение или создание контекста отображения;

· установка необходимых атрибутов в контексте отображения;

· выполнение операций рисования;

· освобождение или удаление контекста отображения.

Для получения навыков работы с контекстом мы рассмотрим общий контекст отображения.

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

Функции BeginPaint и GetDCвозвращают контекст отображения для окна hwnd:

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

HDC WINAPI GetDC(HWND hwnd);

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

После использования контекст отображения, надо освобождать. Если контекст получали, используя функцию BeginPaint, то для освобождения надо использовать функцию void WINAPIEndPaint(HWND hwnd, const PAINTSTRUCT FAR* lpps). Если контекст получали, используя функцию GetDC, то используемintWINAPIReleaseDC(HWND hwnd).

Плюсы и минусы общего контекста

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

Минусы: каждый раз, когда приложение получает общий контекст отображения, его атрибуты принимают значения по умолчанию. Если перед выполнением рисования приложение изменит атрибуты контекста отображения, вызвав соответствующие функции GDI, в следующий раз при получении общего контекста отображения эти атрибуты снова примут значения по умолчанию. Поэтому установка атрибутов должна выполняться каждый раз после получения общего контекста отображения.

 


Дата добавления: 2018-06-01; просмотров: 230; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!