Этой книгой мы завершаем рассказ о программном интерфейсе Windows, начатый в 11 томе "Библиотеки системного программиста". Многие вопросы, затронутые здесь, актуальны не только при создании приложений для Windows версии 3.1, но и при создании приложений для Microsoft Windows NT, а также Microsoft Windows-95, известной во время бета-тестирования под названием Chicago.
Напомним, что тома 11, 12 и 13 ("Microsoft Windows 3.1 для программиста", часть 1, 2 и 3) были посвящены основам программирования для Windows. В них мы объяснили многие базовые понятия, без знания которых невозможно создать ни одно приложение Windows.
В 14 томе ("Интерфейс графических устройств GDI") мы научили вас пользоваться интерфейсом графических устройств GDI, который необходим для реализации в полном объеме графических возможностей Windows.
Для тех из вас, кто интересуется быстро развивающейся технологией мультимедиа, предназначен том 15 ("Мультимедиа для Windows. Руководство программиста"). В нем мы рассказали о том, как создавать мультимедиа-приложения, ориентированные на работу со звуком и видео.
В 16 томе ("Программирование модемов и факс-модемов в MS-DOS и Windows") отдельная глава посвящена программированию модемов и факс-модемов в среде Windows.
Надеемся, что после чтения наших книг вы смогли ощутить силу операционной системы Windows и научились создавать приложения, которые делают что-то полезное или просто интересны сами по себе. В этом случае вы много работали и возможно, устали от бесчисленных функций, сообщений и структур данных. Но потерпите, это еще далеко не все! Мы оставили без внимания многие важнейшие вопросы, в которых должен уметь ориентироваться профессиональный программист.
Например, мы до сих пор не рассказали вам о многооконном интерфейсе MDI, который используется в знакомых вам приложениях (например, в приложении Program Manager или Microsoft Word). Интерфейс MDI позволяет организовать работу пользователя с несколькими окнами, содержащими разные документы или разные представления одного документа. Мы расскажем о работе с интерфейсом MDI в первой главе нашей книги.
Так как приложения Windows работают не в гордом одиночестве (как программы MS-DOS), а в компании других приложений, у пользователя должна быть возможность передавать данные из одного приложения в другое или даже организовать постоянно действующий канал передачи данных между различными приложениями.
Для однократной или эпизодической передачи данных можно использовать универсальный буфер обмена Clipboard и соответствующие функции программного интерфейса Windows, которые мы опишем во второй главе.
Вы можете также организовать канал передачи данных между любыми приложениями, пользуясь механизмом динамической передачи данных DDE. Этот механизм, а также интерфейсная dll-библиотека DDEML будет описана в третьей главе.
Посмотрев на любое стандартное приложение Windows, вы без труда найдете в главном меню строку "Help", открывающую доступ к справочной системе приложения, выполненной с использованием средств Windows. Для того чтобы стиль вашего приложения мог претендовать на стандартный, приложение обязано иметь собственную справочную систему. Нужно создать hlp-файл (один или несколько) и обеспечить доступ к его содержимому через строку "Help" главного меню приложения. Нужно также обеспечить получение контекстно-зависимой справки при помощи клавиши <F1>. Четвертая глава книги поможет вам создать справочную систему и организовать работу с ней.
Помимо обычных сведений об использовании компилятора Help Compiler, мы рассказали о том, как создать в справочной системе встроенные окна (Embedded Windows). Вы можете использовать такие окна для отображения анимации, видеофильмов или других произвольных изображений. Отметим, что стандартная документация, которая поставляется вместе с SDK, умалчивает о такой возможности.
Пятая глава нашей книги посвящена драйверам Windows. Если что и есть в Windows по-настоящему сложное, так это драйверы, особенно стандартные и виртуальные. Сложнее драйверов разве лишь система привязки и вставки объектов OLE, для описания программного интерфейса которой требуются многие сотни страниц текста (описание OLE выходит за рамки этой книги).
Создание драйвера для стандартного устройства компьютера под силу только разработчику, имеющему доступ к полному описанию аппаратного интерфейса устройства и знающего все "потайные" уголки Windows. Однако к счастью, у обычных программистов практически никогда не возникает необходимость разработки собственного драйвера для стандартных устройств компьютера, таких как видеоконтроллер, принтер или контроллер диска - нужные драйверы поставляются разработчиком устройства или Microsoft. В то же время иногда возникают задачи, которые принципиально невозможно разрешить в рамках стандартного программного интерфейса Windows, рассчитанного на обычные приложения.
Например, для обеспечения работы нестандартного устройства в режиме реального времени вам потребуются средства, доступные только драйверам Windows. Иногда нужно "преодолеть" защиту Windows, основанную на использовании колец защиты. Приложения Windows работают в третьем, наименее привилегированном кольце защиты, а виртуальные драйверы - в нулевом. Поэтому только виртуальные драйверы могут обращаться к любым областям оперативной памяти, к любым регистрам процессора и портам ввода/вывода, а также обрабатывать прерывания в реальном времени. Другая важная задача, которая под силу только виртуальным драйверам, - организация взаимодействия между различными виртуальными машинами, работающими в среде Windows.
В пятой главе мы расскажем о трех различных типах драйверов Windows, уделив основное внимание виртуальным и загружаемым драйверам. Тех же, кому требуется разрабатывать драйверы стандартных устройств компьютера, мы отсылаем к документации, поставляющейся вместе с DDK - системой разработки драйверов Microsoft Driver Development Kit for Windows 3.1, а также к книге Д. Нортона "Writing Windows Device Drivers" (имеется перевод этой книги на русский язык).
При этом вы можете использовать пятую главу нашей книги с одной стороны, как введение в книгу Д. Нортона, с другой - как дополнение этой книги, в которой нет ни одного примера виртуального драйвера, и ничего не сказано про загружаемые драйверы.
Что нужно для работы с книгой?
Вам, прежде всего, потребуется система разработки Borland Turbo C++ версии 3.1 или Borland C++ версий 3.1, 4.0 или 4.02, а также система Microsoft Driver Development Kit for Windows 3.1 (для создания виртуальных драйверов).
Никаких особых требований к аппаратному обеспечению компьютера не предъявляется, достаточно иметь компьютер с процессором i386 и объемом оперативной памяти 4 Мбайт. Однако если вы используете систему разработки Borland C++ версии 4.0 или 4.02, для ускорения процесса сборки проекта желательно установить, по крайней мере, 8 Мбайт оперативной памяти и использовать процессор i486. Для нормальной работы систем Borland C++ и Windows Help нужен видеоконтроллер VGA или SVGA (но не EGA и тем более не CGA).
Исходные тексты приложений поставляются на дискете, которая продается вместе с книгой, поэтому вам не нужно набирать эти тексты вручную.
В следующих томах серии "Библиотека системного программиста" мы планируем рассказать вам об объектно-ориентированном программировании для Windows. Объектно-ориентированное программирование предполагает использование готовых библиотек классов, скрывающих многие (но не все) детали реализации программного интерфейса Windows. Наиболее известны библиотеки классов, разработанные Borland (OWL - Borland Object Windows Library) и Microsoft (MFC - Microsoft Foundation Classes). Каждая из этих библиотек имеет свои преимущества и недостатки, поэтому окончательный выбор будет за вами. Мы рассмотрим обе эти библиотеки в самое ближайшее время.
Несмотря на то, что библиотеки классов сильно упрощают и ускоряют процесс создания приложений Windows, вы едва ли сможете ими воспользоваться, не владея стандартным интерфейсом Windows и не понимая принципов, положенных в основу Windows. Поэтому перед тем как приступить к объектно-ориентированному программированию, мы рекомендуем вам изучить программный интерфейс Windows, проработав тома с 11 по 17 нашей серии книг.
Присылайте ваши отзывы в издательство или непосредственно нам через электронную почту по адресу:
frolov@glas.apc.org
Все ваши замечания будут учтены при подготовке новой редакции книги.
Авторы выражают благодарность сотрудникам издательского отдела АО "Диалог-МИФИ" Елене Виноградовой, Олегу Александровичу Голубеву, Наталье Дмитриевой и Оксане Кузьминовой. Мы благодарим корректора Виктора Кустова, а также системных программистов фирмы Interactive Products Inc. Максима Синева и Сергея Ноженко.
Сергей Ноженко принял самое активное участие в отладке виртуального драйвера VXDSRV, а также сопутствующих этому драйверу приложений. Драйвер VXDSRV описан в нашей книге и предназначен для запуска приложений Windows из командного приглашения виртуальной машины MS-DOS. Идея создания такого драйвера принадлежит Максиму Синеву.