hDC, DC и D. Кто это??? О_о

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

hDC, DC и D. Кто это??? О_о

Сообщение Глендальфин » 02.03.2012 (Пт) 13:14

Здравствуйте, горожане!

Что такое hDC, DC и D? :cyclops:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: hDC, DC и D. Кто это??? О_о

Сообщение Хакер » 02.03.2012 (Пт) 14:19

D — это Device. В миру: монитор, или принтер, или плоттер, или даже блок памяти (в котором собираются рисовать).
DC — это Device Context. Вспомогательный объект, который система позволяет создавать программистам для собственных целей.

Допустим Device Context-ов бы не было, а нам нужно было бы наприсовть на экране 3 круга и 4 квадрата и 2 линии. Нам пришлось бы вызвать функции Circle, Rectancge и Line, и при каждом вызове указывать:
  • На каком устройстве (монитор, принтер и т.п.) нужно рисовать.
  • Координаты опорных точек, по которым рисуется данная фигура
  • Цвет линии контура
  • Толщина линии контура
  • Стиль линии контура (сплошная, пунктир, и т.п.)
  • Стиль «законцовок» линий (обрезать под прямым углом, сделать кругляшком, ромбиком и т.п.)
  • Стиль «обработки углов» линии контура (плавное сопряжение, сопряжение углом, без сопряжения)
  • Цвет внутренней заливки фигуры
  • Стиль внутренней заливки фигуры (сплошной, вертикальными линиями, горизонтальными линиями, диагональными, сеткой и т.д.)
  • Метод растровой операции (заменить старые пиксели на новые, вычислить новый цвет с помощью And/Or/Xor/ и т.п.)
  • Прозрачность (если она поддерживается / бы поддерживалась).
  • Регион отсечение — чтобы была возможность не затрагивать своим рисованием то, что не требуется.

В общем, это были бы адовые длиннющие вызовы, длинные и непонятные.
Передавать тысячу параметров при каждом вызове Circle/Rectangle/Line — неудобно. Особенно если Circle/Rectangle/Line сами вызываются 100 раз.
Поэтому придумали так: создаём служебный объект (контекст), и туда записываем всю эту тысячу параметров.

А потом, когда 100 раз вызывает Circle/Rectangle/Line — вместо того, чтобы каждый раз передавать тысячу параметров, передаём один — ссылку на служебный объект (контекст), хранящий все эти параметры.

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

Так образом, DC — это информация о том, на каком устройстве рисовать, и о том, какие параметры использовать при рисовании. Это никакой не контейнер графики, как многие считают. DC не лежат друг в друге, у DC нет Z-order'а. У них нет границ в привичном смысле, зато есть регион отсечения (который может быть произвольной формы) — который определяет область, рисование вне которой «игнорируется». Регионы отсечения разных DC могут пересекаться, накладываться и т.д.

hDC — это хендл DC. Числовое значение, которое однозначно идентифицирует DC в диалоге между программой и системой.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: hDC, DC и D. Кто это??? О_о

Сообщение ger_kar » 02.03.2012 (Пт) 18:51

Очень познавательно и интересно. Спасибо. Хоть и не я этим интересовался, но прочитал с большим интересом.
Бороться и искать, найти и перепрятать

Глендальфин
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 8
Зарегистрирован: 14.02.2011 (Пн) 9:01

Re: hDC, DC и D. Кто это??? О_о

Сообщение Глендальфин » 05.03.2012 (Пн) 7:55

Даже не ожидал такого развернутого и прекрасного ответа.. Спасибо огромное, Хакер


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 32

    TopList