Шаг 183 - Семейство CDC

Празднику, за который было заплачено более - 20 000 000 человеческих 
жизней, посвящается !!! С днем победы !!!!!!

Основа работы с графикой в Windows и естественно в MFC является GDI. Работа с этой библиотекой производится всегда в независимости от того куда направляется вывод на принтер или экран или куда еще подальше. Всегда пользуемся функциями GDI. Для реализации всего этого реализовано три механизма.

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

Драйвер устройства - это специальная программа которая умеет этот самый контекст перевести на конкретное устройство

Режим отображения - это настройки растрирования. На данный момент все устройства вывода работают с растрами даже если вы создаете векторный чертеж. Раньше были старые такие плоттеры типа HP Draf Pro, которые умели рисовать линиями с помощью разноцветных карандашей :-), но на данный момент большинство устройств переводят все в растр и выводят на печать или еще куда.

В MFC есть несколько контекстов устройств и все наследники от CDC, вот смотрите сами.

CObject -	    
	|	   |->  CClientDC	
	|	   |->  CWindowDC	
	CDC------->|->  CMetaFileDC	
    		   |->  CPaintDC	

Каждый из контекстов рисует в определенном месте, то есть каждый контекст предназначен для рисования в определенной области. Странно, но CPaintDC и CClientDC очень похожи. Оба эти класса предназначены для рисования внутри клиентской области окна. То есть они не могут добраться до меню или рамки окна. Чем они отличаются ? CPaintDC используется только тогда когда отвечает на сообщение WM_PAINT. Вместе с этим сообщением будет передана та область, которая требует перерисовки. Ведь окно может быть на экране не полностью. Для извешения о перерисовке вызываются функции BeginPaint и EndPaint без их вызова Windows будет считать, что перерисовка не произошла. Вот в этом и существенные отличия CPaint, в его конструкторе автоматически вызывается BeginPaint, а в деструкторе EndPaint. CClientDC не выполняет эти функции автоматически.

Если вы хотите получить доступ ко всему окну, то должны использовать класс CWindowDC этот класс позволит вам рисовать и поверх меню и везде в пределах рамки окна определенной при создании окна.

Контекст CMetaFileDC мы с Вами уже использовали для создания метафайлов (WMF) в одном из шагов.

Разговаривая о контексте надо четко понимать, что это не только пустая бумага, но и

Смысл логической связи, что вы можете рисовать на устройстве не заботясь о том, как это устройство физически работает. Ну, например, монитор. Вас не интересует его производитель, марка и всякие там особенности. За это отвечает драйвер связанный с контекстом устройства. Вы просто рисуете линию.

Набор изобразительных средств - это то, чем вы можете рисовать. Контекст устройства дает вам перья, кисти, умеет делать некоторые операции по рисованию примитивов. То есть он дает еще и инструментарий по рисованию.

Регурировка вывода связана с необходимостью следить за тем, что часть экрана может перекрывать другими областями и поэтому в них рисовать нельзя.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 09.05.2000