"Графика для Windows средствами DirectDraw"

Предисловие
         

Посвящается Стэнли и Велме Коппок
(моим дедушке и бабушке по материнской линии), а также Дж. Д. и Марии
Трухильо (дедушке и бабушке по отцовской линии). Их общество и поддержка
радовали меня в детстве и продолжают радовать сейчас.





Предисловие

Программисты (особенно начинающие) любят задавать вопросы типа: «Скажи, на чем ты пишешь…?» Когда-то этот вопрос выглядел вполне логично.

Компиляторы, отладчики, серверы, системы управления базами данных и все остальное только-только выходило из каменного века. Программные инструменты разительно отличались друг от друга по качеству и возможностям. Стоило сделать ставку на неудачный инструментарий, и работа становилась излишне тяжкой, а качество результата — низким.

Сегодня стал актуальным другой вопрос: «А чего стоишь ты сам?» Благодаря непрерывной конкуренции современные средства разработчика стали невероятно мощными и качественными, так что среднему программисту вряд ли удастся выжать из них все возможное. Скорее всего, вы спасуете намного раньше, чем ваш инструментарий — если только не узнаете о нем абсолютно все и не доведете свое мастерство программиста до подлинного совершенства.

Книги этой серии предназначены для углубленного изучения программных инструментов. В них рассматриваются нетривиальные возможности, которые невозможно описать в простейшем учебнике. Полноценные проекты заставляют читателя мыслить на уровне эксперта — напрягать серое вещество, лежащее в основе всего, что мы называем «мастерством».

Конечно, это не единственный путь — например, можно добросовестно набивать шишки обо все острые углы новых технологий и наобум пробовать все подряд, пока что-нибудь не заработает. А можно воспользоваться опытом наших авторов, которые уже прошли стадию обучения и попутно сделали кое-какие заметки на память. Мы тщательно отобрали темы, авторов и методику изложения, чтобы читатель не путался в ненужных вступлениях или редких технологиях, которые ему все равно не понадобятся.

Наша главная цель — поднять ваше мастерство настолько, насколько вы сами захотите. Классные инструменты у вас уже есть, осталось лишь стать классным программистом.

Джефф Дантеманн

 

Введение

Засидевшись допоздна над своей предыдущей книгой, «Cutting-Edge Direct3D Programming», я решил ложиться спать. Оказалось, что та же самая мысль пришла в голову здоровенному пауку-каракурту. Что еще хуже, для этого нами была выбрана одна и та же кровать. Мы мирно улеглись, не подозревая о присутствии друг друга (во всяком случае, я ничего не подозревал).

До того мне приходилось слышать о каракуртах и даже видеть их время от времени. Бесспорно, они пользуются дурной славой. Я полагал, что после укуса каракурта следуют пять или десять минут невыносимой боли, а затем неизбежно наступает смерть. Оказалось, я ошибался в обоих отношениях. Сам по себе укус проходит совершенно безболезненно, но если его не лечить, боль продолжается до 48 часов. Тем не менее укус каракурта (даже без лечения) редко бывает смертельным.

И мне, и пауку пришлось пожалеть о встрече. Пауку — потому что он был жестоко раздавлен своей разгневанной и удивленной жертвой. Мне — потому что у врача я оказался лишь через восемь часов после укуса (а серьезные мышечные спазмы начинаются через 2–4 часа). После нескольких посещений местной амбулатории проблема была решена. Этой ночью я так и не спал, и к тому же в течение восьми часов мучался от жуткой боли. В довершение всего перед вводом противоядия меня накачали валиумом. Разумеется, о работе не могло быть и речи.

При первой возможности я позвонил своему редактору, Скотту Палмеру (Scott Palmer). Заплетающимся языком я рассказал, что немного задержусь с очередной главой, потому что меня укусил каракурт. Скотт проявил полное понимание, и мы перенесли срок сдачи материала.

Через несколько месяцев Скотт прислал мне первую главу своей новой книги. Книга была посвящена написанию технической литературы, а в главе говорилось о том, что ему пришлось узнать, будучи то автором, то редактором. В самом конце был приведен список отговорок, которыми авторы объясняли свои задержки. Представьте, он начинался с укуса каракурта!

Скотт заверил меня, что он никогда не сомневался в моей искренности, а в список включил сразу все оправдания, независимо от того, поверил он или нет. Тем не менее полагаю, его позиция вполне ясна.

Редактором этой книги была Мишель Страуп. Она берется за дело довольно жестко, так что мне повезло, что при написании этой книги дело обошлось без медицинского вмешательства — не то, пожалуй, пришлось бы посылать ей факсом справку от врача.

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

Другими словами, Coriolis отвечает за распространение и продажу книги, однако за содержащийся в ней материал отвечаю я. Следовательно, если у вас возникнут какие-либо вопросы по поводу программ или CD-ROM, не стесняйтесь и пишите мне. Некоторые читатели обращаются в Coriolis, но издательство все равно просто пересылает почту мне. Если вы захотите обратиться ко мне, обязательно укажите, о какой книге идет речь, и постарайтесь сделать свои вопросы и замечания по возможности конкретными. Со мной можно связаться по адресу mailto:stan@rezio.com. .

Кроме того, некоторые вопросы встречаются особенно часто. Я собираюсь создать и вести список ЧаВО (часто задаваемых вопросов) на Web-узле этой книги (www.rezio.com/wgp) . Здесь вы найдете ответы на некоторые вопросы, а также исправления ошибок, обновления и, возможно — даже новые демонстрационные программы.

 

Для чего написана эта книга

В той отрасли, где мы работаем, библиотека DirectDraw появилась довольно давно. Во всяком случае, за это время она успела доказать свои возможности, и о ней было написано несколько книг. Как обычно, эти книги отличаются по своему качеству. Однако в основном это были добротные учебники, которые (как и многие книги о компьютерах) были написаны за три месяца авторами, изучавшими предмет по ходу дела. В результате большинство этих книг содержит лишь подготовительный материал. Теперь, когда библиотека DirectDraw подросла и обрела свою репутацию (во всяком случае, она старше других компонентов DirectX), настало время уйти от основ и познакомиться с ее некоторыми нетривиальными возможностями.

Эта книга начинается с того, на чем другие книги обычно заканчивались. Мы поговорим об основах DirectDraw, но лишь в общих чертах. Читатель — опытный программист, но незнакомый с DirectDraw — сможет с ходу войти в курс дела. Затем мы перейдем к другим темам, столь же интересным, сколь и полезным.

Цель этой книги — научить вас работать с DirectDraw, а не предоставить некоторую «структурную основу» или нестандартный API, который бы выполнял за вас всю работу. Демонстрационные программы написаны на C++ и используют MFC, но совсем не для того, чтобы скрыть все технические подробности. С++ и MFC — превосходные инструменты, потому что с их помощью любое приложение можно написать несколькими разными способами. Примеры для этой книги были написаны так, чтобы при этом получались структурированные и удобные для чтения проекты, которые наглядно показывают, что и почему происходит в программе.

Помимо DirectDraw, во многих примерах используется библиотека DirectInput. Строго говоря, при программировании графики для Windows можно обойтись и без DirectInput, но ей все же стоит воспользоваться. Она работает быстрее традиционных средств ввода Windows и к тому же входит в DirectX, так что для работы с ней не потребуется никаких дополнительных SDK.

 

Требования к читателю

Эта книга научит вас почти всему, что можно узнать о DirectDraw. Тем не менее она не учит C, C++, MFC или работе с Developer Studio пакетов семейства Visual — предполагается, что вы уже знакомы с этими темами. С другой стороны, от вас не требуется никаких выдающихся познаний. Например, мы будем использовать MFC, но лишь в объеме, необходимом для написания наших приложений. Следовательно, чтобы читать эту книгу, вовсе не обязательно быть экспертом в MFC.

 

Программные требования

Для работы с книгой необходимо иметь Windows NT 4.0 или Windows 95. Кроме того, потребуется Visual C++ 5.0 или более поздней версии.

Вам также понадобится собственно DirectX версии 3a или выше (желательно DirectX 5). Учтите, что DirectX распространяется в двух видах: в runtime-варианте и в SDK. Runtime-вариант часто устанавливается программами, использующими DirectX, он также встроен в операционную систему Windows NT 4.0. На CD-ROM этой книги содержатся runtime-компоненты DirectX 5. С другой стороны, пакет DirectX SDK необходим для компиляции программ, написанных для DirectX. Он отсутствует на CD-ROM этой книги, однако его можно бесплатно скачать по адресу: www.microsoft.com/msdownload .

 

Аппаратные требования

Вам потребуется компьютер с процессором Pentium и выше. Под Windows NT необходимо иметь 32 Мбайт RAM, а под Windows 95 — не менее 16 Мбайт. Общий принцип остается прежним — чем больше, тем лучше. Также потребуется дисковод CD-ROM.

Наконец, понадобится видеокарта, поддерживаемая библиотекой DirectDraw (на данный момент DirectDraw поддерживают практически все современные видеокарты).

Пора заняться делом. Начнем с краткого курса DirectDraw.