Азбука программирования в Win32 API


Азбука программирования в Win32 API - стр. 30


К этому моменту читатель уже представляет, как должна выгля­деть программа для Windows, знает кое-что о сообщениях и о том, что программа сама отвечает за перерисовку окна в случае необхо­димости.

Давайте, уважаемый читатель, обсудим вопрос: что должно происхо­дить в тех случаях, когда программе необходимо отобразить в рабочей области окна некоторое изображение? Для начала рассмотрим случаи, когда программе не нужно рисовать изображение, а необходимо скопи­ровать одно изображение на другое. Поговорим о том, что такое

КОНТЕКСТ УСТРОЙСТВА

Наверное, читатель уже знает о том, что с точки зрения программиста Windows является системой, не зависящей от устройств (device independent). Эту независимость со стороны Windows обеспечивает библиотека GDI32.dll, а со стороны устройства - драйвер этого устройст­ва. С точки зрения программы связующим звеном между программой и устройством является контекст устройства (Device Context - DC). Если

33

программе нужно осуществить обмен с внешним устройством, програм­ма должна оповестить GDI о необходимости подготовить устройство для операции ввода-вывода. После того, как устройство подготовлено, про­грамма получает хэндл контекста устройства, т. е. хэндл структуры, содержащей набор характеристик этого устройства. В этот набор входят:

bitmap (битовая карта, изображение), отображаемый в окне,

перо для прорисовки линий,

кисть,

палитра,

шрифт

и т. д. Программа никогда напрямую не обращается к контексту устрой­ства (кстати, эта структура не документирована Microsoft), она обращает­ся к нему опосредствованно, через определенные функции. После того, как все действия произведены, и необходимость в использовании устрой­ства отпала, программа должна освободить контекст устройства, чтобы не занимать память. Есть еще одна причина, из-за которой необходимо освобождать контекст устройства. В системе может существовать одно­временно только ограниченное число контекстов устройств. Если кон­текст устройства не будет освобождаться после операций вывода, то через несколько перерисовок окна система может зависнуть. Так что не забывайте освобождать контексты устройств!




Начало  Назад  Вперед



Книжный магазин