Работ с общим контекстом отображения
Существуют следующие типы контекста отображения:
· общий контекст отображения (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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!