С точки зрения программиста Windows является системой, не зависящей от устройств (device
independent). Эту независимость со стороны Windows обеспечивает библиотека GDI32.dll, а
со стороны устройства - драйвер этого устройства. С точки зрения программы связующим звеном
между программой и устройством является контекст устройства (Device Context - DC). Если
программе нужно осуществить обмен с внешним устройством, программа должна оповесить GDI о
необходимости подготовить устройство для операции ввода-вывода. После того, как устройство
подготовленно, программа получает хэндл контекста устройства, т.е. хэндл структуры,
содержащей набор характеристик этого устройства. В этот набор входят:
bitmap(битовая карта, изображение), отображаемый в окне,
перо для прорисовки линий,
кисть,
палитра,
шрифт
и т.д. Программа никогда напрямую не обращается к контексту устройства(кстати, эта структура
не документирована Microsoft), она обращается к нему опосредствованно, через определенные
функции. После того, как все действия произведены, и необходимость в использовании устройства
отпала, программа должна освободить контекст устройства, чтобы не занимать память. Есть еще
одна причина, из-за которой необходимо освобождать контекст устройства. В системе может
существовать одновременно только ограниченное число контекстов устройств. Если контекст
устройства не будет освобождаться после операций вывода, то через несколько перерисовок
окна система может повиснуть. Так что не забывайте освобождать контексты устройств!
Когда программа требует контекст устройства, она получает его уже заполненным значениями по умолчанию. Объект в составе контекста называется текущим объектом. Само слово - текущий - говорит о том, что контекст устройства можно изменить. Программа может создать новый объект, скажем, bitmap или шрифт, и сделать его текущем. Замещенный объект автоматически из памяти не удаляется, его необходимо позже удалить отдельно. Само собой разумеется, что программа может получить характеристики текущего устройства. А вот изменить эти характеристики, увы, можно только через замену объекта (впрочем, это и так понятно).
Типы контекта устройства
Режим отображения
Пишем программу
Коды растровых операций