Получение описателя контекста устройства
В простейшем случае описатель контекста (контекст) может быть получен с помощью функций:
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(), принимающей в качестве аргумента описатель контекста и индекс (номер) интересующего параметра (описываются системными константами) и возвращающей значение этого параметра.
Дата добавления: 2017-10-04; просмотров: 1119;