Мультимедиа в системе Windows

    Создавать мультимедиа-программы для Windows достаточно легко, и основная причина этого заключается в том, что всю тяжелую работу за вас уже сделали. Встроенная в Windows мультимедиа-система предоставляет вам необходимый минимум возможностей для манипулирования графикой, звуком и т.п. Причем все эти возможности содержатся и в Windows версии 3.1 (или 3.0 с мультимедиа-расширением), и в Windows 95 (известной также под названиями Chicago или Windows 4.0), и в Windows NT.
    Например, при помощи программы Sound Recorder вы можете добавить оцифрованный звук к текстовому документу Word, таблице Excel или любому другому документу, поддерживающему стандарт OLE (Object Linking And Embedding, связь и включение объектов). Программа Media Player может воспроизвести оцифрованный звуковой файл, MIDI-последовательность или видео-файл (здесь под видео подразумевается то, что вы видите на экране обычного телевизора). С помощью этой же программы вы можете воспроизводить аудио компакт-диски, а также, при наличии соответствующих драйверов, управлять множеством других устройств — цифровыми лазерными видеодисками, видеомагнитофонами или другими внешними устройствами с последовательным или SCSI-интерфейсом.
    Для работы со звуком имеется специальное программно-аппаратное расширение Windows — Windows Sound System, звуковая система, включающая в себя звуковую плату и программное обеспечение. С ее помощью вы можете, например, заставить текстовый процессор читать числа вслух, пока вы сравниваете их с другим документом.
    Помимо этих стандартных программ, фирма Microsoft любезно предоставила в наше распоряжение множество функций для управления устройствами и данными мультимедиа-систем. Все эти функции содержатся в библиотеке MMSYSTEM.DLL. Мы можем вызывать из наших приложений любую функцию MMSYSTEM.DLL как и другие функции API.
 

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

 
Рисунок 1.  Диалоговое окно "Insert Odject" позволяет вставлять в документ объекты Windows

    Запустите любое приложение Windows, поддерживающее OLE, например, Microsoft Word или Excel. Создайте или  загрузите в него любой файл. Затем найдите в меню пункт, позволяющий поместить в документ объект. Например, в Word это пункт Вставка-Объект. Перед вами появится картинка наподобие той, что изображена на рис. 1. Конкретный список типов объектов может изменяться от системы к системе, однако если вы установили всю необходимую аппаратуру и драйверы, то одним из типов будет звук (Sound). Если вы выберете этот тип объекта, то автоматически вызовется программа Sound Recorder. Теперь подключите к своей звуковой карте микрофон, нажмите кнопку "Запись" (маленькая кнопка с микрофоном на панели Sound Recorder) и скажите несколько слов. Постарайтесь быть не менее серьезным, чем был Александр Грэхем Белл, тестируя свой первый телефон (он сказал "Ватсон, идите сюда, вы мне нужны!"), но и не затягивайте особенно свою речь - для хранения звука требуется очень много места на диске.
    Когда вы закончите, закройте окно Sound Recorder. В вашем документе появится пиктограмма с микрофоном — ваш звук.. Теперь вы можете окружить ее текстом или чем угодно еще — как вам вздумается. Для того, чтобы воспроизвести звук, достаточно дважды щелкнуть мышью на пиктограмме с микрофоном. Если вы передадите свой документ по модему или перепишете его на диск своему приятелю, он тоже увидит в нем пиктограмму с микрофоном и сможет воспроизвести звук.
    Кстати, вы вовсе не обязаны записывать звук каждый раз, когда вам необходимо его вставить в текст, вы можете использовать уже готовый звуковой файл. Для этого выберите из списка объект типа Media Clip — при этом будет запущена программа Media Player. Загрузите в нее понравившийся вам звукковой файл, проиграйте его и закройте Media Player. Теперь в вашем документе появится пиктограмма Media Player, а не  предназначены специально для разработки мультимедиа-приложений. Вы получите доступ к тем же возможностям (звуку, видео и анимации), что и при помощи программирования, но, естественно, со множеством ограничений и неудобств и с гораздо меньшей гибкостью, чем если бы вы сами программировали свою систему.

Программирование для Windows - черная магия ?
    Программирование для системы Windows не похоже на все остальные виды программирования. Например, стандартный графический интерфейс (GUI, Graphical User Interface) разработан для того, чтобы интерфейс всех программ был примерно одинаковым и простым в использовании. Конечно, увлекаться стандартизированием тоже не стоит — ведь тогда все программы будут выглядеть совершенно одинаково! В то же время множество программ — текстовые редакторы, таблицы и прочие — выполняют сходные операции. Например, текстовые процессоры пользуются функциями перемещения курсора, вывода текста, печати или копирования. Кроме того, во всех программах используются функции взаимодействия с пользователем, позволяющие вводить информацию или выбирать определенные пункты в меню.
    Большинство этих функций уже содержится в самой системе Windows. Интерфейс прикладных программ Windows API включает более тысячи функций — некоторые из них выполняют сложные операции вроде воспроизведения видеоотрывка в окне на экране, другие служат для простейших действий, например, сообщают координаты курсора. Таким образом, для того, чтобы создать программу, вы должны всего лишь расположить в определенной последовательности системные вызовы функций API? Нет!

 
Рисунок 1.2. Объект программы Recorder внутри документа Microsoft Word

    Любое приложение Windows все время активно взаимодействует с операционной системой. Приложение и система, как молодые влюбленные, с огромной частотой обмениваются множеством сообщений. Каждый раз, когда в системе Win-dows что-нибудь происходит, она посылает сообщение, на которое ваше приложение может отреагировать тем или иным образом. Часто такое сообщение вызывает целую лавину изменений! Возможно, вы уже знакомы по языкам С/C++ с процедурой WinProc, которая состоит главным образом из гигантского оператора case, забитого процедурами-реакциями на различные сообщения. В этом и заключается работа Windows-приложения. Если вы когда-нибудь видели исходный текст программы для Windows, то могли заметить целые страницы сложного кода, ответственного за реакцию на различные сообщения. Конечно, все это может показаться очень сложным и запутанным и привести вас к выводу о том, что даже при помощи C++ писать программы для Windows очень нелегко. И это действительно так: на написание даже самой простой программы необходимо затратить множество усилий, времени и знаний. Однако ситуация в корне изменяется, когда вы начинаете пользоваться VC++! Хотите —верьте, хотите — нет, но VC++ может написать за вас почти всю вашу программу!

Visual C++ — система, разработки приложений для Windows
    Мы гарантируем , что программирование для Windows при помощи VC++ гораздо проще, чем вы можете предположить. Наша уверенность основана на огромном количестве инструментов и функций, которые входят в систему VC++ — функций, выполняющих за вас почти всю рутинную и сложную работу.
 Мы не собираемся убеждать вас в том, что программировать в системе Windows очень просто и что это доступно каждому — конечно же, это не так. Как и в любой другой области деятельности, для получения удовлетворительного результата вы должны затратить массу времени и усилий. Вместе с тем, все усилия, затраченные на освоение VC++, вполне окупятся дополнительной гибкостью и новыми возможностями, которые поступят в ваше распоряжение.

Базовые классы Microsoft (Microsoft Foundation Classes, MFC)
    Своими мощью и гибкостью язык VC++ во многом обязан тому, что принято называть базовыми классами Microsoft (MFC). При помощи MFC парни из Microsoft уже написали для вас большую часть вашей программы. Как такое может быть? Очень просто.
    Если вы помните, выше мы говорили о том, что почти все программы для Windows включают в себя множество одинаковых элементов — меню, "кнопки", экранные окна, диалоговые окна и т.п. Более того, все эти элементы и выглядят почти одинаково —стандартизованный пользовательский интерфейс был одной из основных концепций, положенных в основу Windows. Написав и тщательно протестировав код для этих элементов, Microsoft значительно облегчила вашу задачу. Если, допустим, вам в вашей программе понадобилась полоса прокрутки, вы можете воспользоваться классом CScrollBar из библиотеки MFC. Код, содержащийся в этом классе, сделает за вас все самое главное — обеспечит взаимодействие с пользователем и с системой Windows. Все, что вы должны будете после этого сделать, — это добавить части программы, отвечающие за детали внешнего вида вашей полосы прокрутки и за ее поведение в рамках вашей собственной программы. Но вы, похоже, не вполне понимаете, что такое "класс", не так ли?
    Класс - это не что, иное, как определение элемента, который используется в программе. Классы могут быть заранее определены, как, например, в библиотеке MFC, или же могут создаваться вами самими. Класс может определять все, что угодно: элемент экрана, как в случае с полосой прокрутки область памяти для хранения массива данных, способ доступа к файлу на диске, реакцию на клавиатурную команду, способ обработки ошибок и так далее. Определение класса включает весь код и все данные, необходимые для задания поведения и свойств описываемого объекта. Обратите внимание: класс может включать как программный код, так и данные. Код содержится в функциях-членах (member functions), а данные — в переменных-членах (member variables).
    Необходимо отметить также и то, что определение класса — это в самом деле не больше, чем определение. Если вам в программе требуется один из элементов такого класса, то вы должны создать экземпляр такого класса, называемый объектом (object). Программа может создавать столько объектов, сколько ей потребуется. Простейшая аналогия — это чертеж стула, который можно сравнить с определением класса, и сам стул, который является объектом этого класса.
    Как вы, наверное, знаете, VC++ — это объектно-ориентированный язык программирования, а классы — это одно из основных понятий такого способа программирования. Эта система не является учебником объектно-ориеитпрованного программирования, поэтому мы не будем подробно описывать преимущества и особенности такого метода, Исключение сделаем только для так называемого "наследования" (inheritance).
 Наследование — это одно из основных понятий объектно-ориентпрованного программирования и, что для нас особенно важно, основа того способа, при помощи которого мы будем создавать наши мультимедиа-программы. Наследование означает тот факт, что вы можете создавать новые классы на основании уже имеющихся, то есть вы можете "производить" (derive) новые классы из старых. При этом новый класс автоматически наследует все свойства и возможности базового класса. Это очень важная особенность, и мы проиллюстрируем ее следующим примером.
    Предположим, что вы пишете мультнмедиа-приложенпе, в котором необходимо выводить на экран в окне видеоизображение. Экранное окно — это очень сложный объект со множеством свойств. Неужели необходимо писать весь код самостоятельно? Ни в коем случае! В библиотеке MFC вы обнаруживаете базовый класс CWnd. Теперь вы просто выводите новый класс (скажем, CWndVideo) из базового класса CWnd. При этом основные свойства экранного окна — изменение размера, перемещение и тому подобные — автоматически наследуются от базового класса, а вам остается только написать код, отвечающий за вывод видеоизображения в полученном окне, и добавить его к определению класса CWndVideo.
    Но не будем останавливатсья на этом!. Допустим, теперь, что вы решили использовать еще и такое окно, в котором можно воспроизводить не только видео, но и звук. Для этого вы из класса CWndVideo производите новый класс CWndVideoSound, который автоматически наследует как базовые свойства класса CWnd, так и дополнительные свойства класса CWndVideo, то есть способность воспроизводить видеоклипы.
 Мы думаем, что говорить о важности такого наследования излишне. Способность использовать код при помощи наследования означает, что во множестве случаев вам потребуется написать код для определенной задачи всего лишь один раз. В дальнейшем внимательное планирование и тщательная разработка структуры программы и иерархии наследования помогут вам сэкономить массу времени и усилий.

AppWizard (Волшебник приложений)
    Многие из вас, возможно, уже знакомы с "волшебниками" (wizards), которые имеются во многих приложениях. Волшебник помогает автоматизировать определенное действие, например, поиск информации в базе данных или формирование текста в редакторе. Волшебник AppWizard создаст для вас новую программу-приложение на VC++.

AppWizard (Волшебник приложений) задает вам ряд вопросов, касающихся вашего приложения, например, о его названии и местоположении. Кроме того, вы указываете особенности своей новой программы, например наличие линейки кнопок-инструментов или на многодокументный интерфейс. Затем AppWizard создает файлы, составляющие "скелет" вашей программы. Созданная таким образом программа является уже вполне законченным приложением, то есть вы можете откомпилировать ее и запустить. Плохо только то, что она пока еще ничего не делает. Но с этим легко справиться — ведь теперь к имеющейся основе вы можете добавлять код и данные, которые сделают ее шедевром программирования!

ClassWizard (Волшебник классов) Волшебник ClassWizard используется для создания и изменения классов, о которых мы говорили выше. С его помощью вы можете добавить в класс новые функции или переменные либо изменить уже имеющиеся. Волшебник не пишет за вас функции и не создаст переменные, но он значительно облегчает эту задачу, располагая все элементы в нужных местах, давая им нужные названия и делая множество других мелочей.

Редакторы ресурсов (resource editors) В настоящем контексте под словом "ресурсы" подразумеваются видимые элементы программы, такие как диалоговые окна, меню, пиктограммы, картинки и т.п. VC++ включает мощные WYSIWYG-редакторы для этих элементов (WYSIWYG - What You See Is What You Get, что видите - то и имеете). В более старых версиях VC++ такие редакторы назывались Арр Studio. Все эти редакторы связаны с волшебшгком ClassWizard — это дает возможность легко устанавливать связь между ресурсами и кодом программы.

Простая поддержка API Несмотря на то, что большинство функций Windows API посещают наши программы незаметно, "с черного хода" VC++, некоторые из них приходится вызывать непосредственно. К счастью, это достаточно легко. (На самом деле функции API достаточно просты сами по себе. Проблема может заключаться только в том, чтобы найти их правильное сочетание.).