Приложение получает доступ к контексту через переменную типа HDC (дескриптор контекста). При помощи функции GetDC(HWND hWnd) программист получает контекст hDC, связанный с окном hWnd. Зная контекст, можно найти связанное с ним окно. По дескриптору окна найти hDC нельзя, так как для одного окна можно хранить одновременно несколько контекстов разного содержания.

Все функции вывода графических примитивов интерфейса GDI используют контекст, получая дескриптор типа HDC в качестве параметра. Когда приложение первый раз создает или запрашивает контекст для окна, с контекстом связываются объекты, заданные по умолчанию. Для пути значение по умолчанию не задается. После этого программист может изменить элементы контекста.

При выполнении функции GetDCC) для хранения запрошенного контекста выделяется место в системной памяти. Поэтому после вывода изображения эту память необходимо возвратить функцией освобождения контекста ReleaseDC (HWND hWnd, HDC hDC).

Особенно важно освобождать контекст в системах Windows 9х, так как эти операционные системы позволяют запрашивать одновременно не более пяти различных контекстов. В Windows NT такого жесткого ограничения нет. В литературе указывается, что запрос к операционной системе для выделения контексту памяти и возвращение контекста требовали в Windows 3.1 существенных затрат времени. В этой системе одновременно с созданием окна создавалось и пять контекстов. В процессе рисования они не создавались и не уничтожались, программист просто получал доступ к жестко предопределенным контекстам. Ну или не получал. При запросе одновременно более пяти контекстов в Windows 98 у меня также нарушалось соответствие между контекстами и связанными с ними окнами.

Структуры данных, определяющие параметры базовых объектов контекста, хранятся отдельно от контекста. Это позволяет один раз создать объект, а потом

Контекст устройства

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


⇐ Предыдущая| |Следующая ⇒