Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода по ОАиП.doc
Скачиваний:
12
Добавлен:
11.05.2015
Размер:
3.21 Mб
Скачать

6.5. Получение описателя контекста устройства

В простейшем случае описатель контекста (контекст) может быть получен с помощью функций:

HDC GetDC(HWND hwnd);

HDC GetWindowDC(HWND hwnd);

HDC GetDCEx(HWND hwnd, HRGN hrgnClip, DWORD dwFlags);

Функции GetDC и GetDCEx возвращают контекст клиентской области окна (без заголовка, рамки и пр.). Контекст всего окна может быть получен с помощью функций GetWindowDC или GetDCEx с соответствующим флагом:

DCX_WINDOW – дать контекст всего окна, включая системную область;

DCX_PARENTCLIP – использовать видимую часть родительского окна;

DCX_CLIPCHILDREN – исключить подчиненные окна;

DCX_NORESETATTRS – не сбрасывать состояние контекста при его освобождении и т.д.

При этом поведение функций зависит также от некоторых установок стиля оконного класса:

CS_CLASSDC – использовать единственный разделяемый контекст для всех окон данного класса;

CS_OWNDC – использовать собственный контекст для каждого экземпляра окна;

CS_PARENTDC – использовать контекст и регион отсечения родительского окна и т.д.

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

Функции

HDC CreateDC(LPCTSTR lpszDriver, LPCTSTR lpszDevice,

LPCTSTR lpszOutput, CONST DEVMODE* lpInitData );

HDC CreateCompatibleDC(HDC hPrimDC);

создают новый контекст, связанный с указанным устройством (CreateDC) или совместимым с известным контекстом (CreateCompatibleDC). Во втором случае если «образцовый» контекст не задан, то создается контекст в памяти (memory context), совместимый с текущими установками экрана. Возвраща­е­мое значение – описатель контекста или NULL – в случае ошибки. Параметры:

lpszDriver – может быть DISPLAY для контекстов, связанных с экраном, и NULL для всех других устройств;

lpszDevice – логическое имя устройства в системе;

lpszOutput – имя устройства в файловой системе (в Win32 – NULL);

lpInitData – указатель на структуру DEVMODE с инициирующими данными для устройства, NULL – настройки по умолчанию;

hPrimDC – «образцовый» контекст, с которым будет совместим вновь создаваемый, если NULL – экран с текущими настройками.

По окончании работы с контекстом он должен быть освобожден (закрыт). Для контекстов, полученных с помощью функций Get..., используется функция

int ReleaseDC(HWND hwnd, HDC hdc);

которая освобождает «общие» и оконные контексты.

Для контекстов, созданных с помощью функций Create..., используется функция

int DeleteDC(HDC hdc);

возвращает 1 – при успешном завершении, 0 – при ошибке.

Многие характеристики действующего контекста могут быть получены с помощью функции GetDeviceCaps(), принимающей в качестве аргумента описатель контекста и индекс (номер) интересующего параметра (описываются системными константами) и возвращающей значение этого параметра.

6.6. Основные инструменты графической подсистемы

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

К основным инструментам относятся:

– перо (Pen) – отображение контурных примитивов («карандаш»);

– кисть(Brush) – заполнение внутренних областей примитивов;

– шрифт(Font) – отображение символов и строк;

– битовая карта (Bitmap) – «готовые» растровые изображения.

Инструмент идентифицируется его описателем и создается соответствующей функцией вида Create..., которая возвращает этот описатель (NULL– признак ошибки). Количество создаваемых инструментов искусственно не ограничивается, но в любом контексте одновременно может быть активным только один инструмент каждого типа. Выбор инструмента отменить нельзя, но можно повторять его сколько угодно раз с любыми другими инструментами того же типа. Инструменты различного типа между собой взаимно независимы. Перед удалением инструмент следует дезактивировать, выбрав активным другой инстру­мент того же типа, например, сохраненный предыдущий.