C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 183 - Семейство CDC / MFC шаг за шагом / Visual C++

Шаг 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) в одном из шагов.

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

  • связь с физическим устройством
  • набор изобразительных средств
  • регулирование вывода

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

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

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


| |
Автор Каев Артем.
[AD]