Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programming_Windows_95_Part_I.pdf
Скачиваний:
96
Добавлен:
05.06.2014
Размер:
4.61 Mб
Скачать

Глава 1 README.TXT

1

Эта книга для тех, кто будучи искусным программистом языка С, хотел бы научиться писать приложения для операционной системы Microsoft Windows 95. Близкое знакомство с языком С является первым из трех необходимых условий пользования этой книгой. Вторым условием является инсталляция 32-разрядной системы программирования Microsoft Visual С++ версии 4.0. И третье — реальное использование операционной системы Windows 95 и умение работать с ее пользовательским интерфейсом.

Как вы вероятно знаете, Windows 95 — это последнее воплощение графической операционной системы, впервые представленной в ноябре 1985 года для использования на компьютерах типа IBM PC и совместимых с ним. По мере проникновения на рынок, за последнее десятилетие, Windows почти полностью вытеснила всех имевшихся конкурентов и стала, фактически, эталоном операционной системы для персональных компьютеров. Теперь, если вы пишете программу для совместимых с IBM PC компьютеров, то вы пишете для Windows.

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

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

Вызов, брошенный программистам

В фильме Большой Каньон, отец помогает пятнадцатилетнему сыну научиться управлять машиной и замечает: "Умение делать левый поворот в Лос-Анджелесе — это одна из наиболее трудных вещей в жизни, которую тебе следует научиться делать." То же самое он мог бы сказать о программировании для Windows.

Не будем здесь подробно касаться механики программирования для Windows. Займемся этим неприятным делом в следующей главе. Здесь мы побольше расскажем о философии составления программ, а, чтобы упростить их понимание, вернемся немного назад. Это относительно новая концепция.

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

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

Здесь вполне уместна пословица о невозможности убить двух зайцев одним выстрелом. Должны страдать интересы либо пользователя, либо программиста, и кто-то должен заниматься более тяжким трудом. Вам, как программисту, суждено взять это бремя на себя.

12

К счастью, большая часть вашей трудной работы уже проделана конструкторами и программистами операционной системы Windows 95. Эти невоспетые герои уже реализовали большую часть кода, необходимого для создания объектов современного пользовательского интерфейса и для вывода программ на экран с использованием богатых возможностей оформления текста и графики. Занимаясь этим, они также создали развитой интерфейс программирования приложений (Application programming interface, API), который, однако, на первых порах вполне может испугать программистов, решивших работать с Windows. Это характерно не только для Windows, но и для любого современного графического интерфейса.

Раньше считалось, что для того, чтобы начать программировать для Windows, программисту нужно около 6 месяцев. (Иногда говорят, что при пользовании этой книгой, указанный срок мог бы сократиться до 26 недель или возможно даже до 180 дней.) За последние несколько лет Windows стала более обширной, но одновременно появились и дополнительные инструменты для решения трудных вопросов, поэтому, вероятно, правило шести месяцев остается вполне применимым.

Эта преамбула необходима, чтобы вы не почувствовали себя профессионально и умственно неполноценными, если не все сразу поймете. Если вы раньше никогда не программировали в графической среде, то, естественно, Windows окажется непривычной для вас. Однако, в конце концов вы добьетесь своего.

Основные правила

Вэтой книге мы хотели бы научить вас тому, что считается классическим программированием для Windows. Мы возьмем добрый старый язык программирования С (а не С++) и напрямую используем базовый интерфейс программирования приложений, а не какую бы то ни было другую оболочку, скрывающую под упрощенным, на первый взгляд, интерфейсом все тот же API. Несмотря на очевидные преимущества Windows 95 по сравнению с более ранними версиями Windows, большинство программ этой книги не слишком отличаются от программ, которые могли бы быть написаны (и писались) для Microsoft Windows версии 1.0 около десяти лет назад.

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

Хотя книга учит классическому программированию для Windows, настоятельно рекомендуется этим не ограничиваться. В настоящее время существует множество средств, позволяющих облегчить программирование для Windows. Одним из таких популярных средств является язык С++, который используется в основном в сочетании с библиотеками классов, такими как Microsoft Foundation Classes (MFC) или Object Windows Library (OWL) фирмы Borland. Другими средствами являются Visual Basic фирмы Microsoft è Delphi фирмы Borland. В

распоряжении программиста имеются также системы, которые генерируют коды и, таким образом, берут на себя некоторую часть работы по программированию для Windows. Существует даже возможность создавать приложения для Windows, используя простые описательные языки, например ToolBook фирмы Asymetrix.

Трудно сказать, какое из этих средств лучше; это сильно зависит от того, что за приложение создается, и насколько программист готов пожертвовать для этого своим временем.

Еще одной темой, которая не рассматривается в книге, является использование интегрированной среды разработчика (Integrated Development Environment, IDE), такой как Microsoft Visual С++ версии 4.0. Эта среда может облегчить вам работу при создании ресурсов (например, меню и окон диалога), обеспечит генерацию makeфайлов (файлы, содержащие инструкции для компиляции и компоновки вашей программы, а также для создания исполняемого файла), и предоставит вам единую среду для компиляции, выполнения и отладки программ. IDE — это хорошо. Она превосходна. Однако, ее работа чаще вредит, чем помогает изучению классического программирования для Windows. Короче говоря, эта книга не научит вас формировать диалоговые окна в рамках IDE; она научит вас проектировать ваши собственные диалоговые окна и управлять процессом их заполнения.

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

13

Преимущество такого подхода в том, что вы можете просто скопировать файл-источник на ваш жесткий диск, затем вызвать окно командной строки MS-DOS, запустить make-файл для получения исполняемого файла, а затем уже полученный файл немедленно запустить из командной строки.

Большинство программ этой книги очень короткие, предназначенные для демонстрации одного или двух конкретных положений. Иными словами, они максимально упрощены. Эти программы являются инструментами для обучения, а не образцами законченных программ для Windows. Например, каждая реальная программа для Windows должна обладать уникальной иконкой, что относится только к нескольким из приведенных программ, поскольку, создание для каждой программы своей иконки было бы просто топтанием на месте. Кроме этого, строки текста, использованные в программе, должны вставляться в файл описания ресурсов для его перевода на различные языки. Думается, что это было бы помехой в освоении тех принципов, которые отстаивает книга. Очевидно, что чем короче программа, тем проще читателю ее изучить.

Возможно эта книга не сможет охватить все аспекты программирования для Windows 95. Она также не заменит официальной технической документации. После усвоения материала книги, вам потребуется еще много часов на чтение документации, чтобы узнать о характеристиках и функциях Windows 95.

Это не единственная книга по программированию для Windows, опубликованная Microsoft Press. Как альтернативу программированию для Windows на С с использованием приложенного IDE, вы, возможно, захотите изучить программирование для Windows 95 с использованием MFC, представленное в книге Джефа Просиса "Programming Windows 95 with MFC" (публикация намечена на лето 1996 года). Чтобы лучше понять скрытую работу Windows 95, посмотрите книгу Адриана Кинга "Inside Windows 95" (имеется перевод этой книги: Адриан Кинг, "Windows 95 изнутри", Microsoft Press & Питер, 1995). Разнообразие возможностей пользовательского интерфейса, показанное в главе 12, более полно представлено в книге Нэнси Винник Клутс "Programming the Windows 95 User Interface". Поверхностное обсуждение OLE в главе 20 может быть дополнено книгой Крэйга Броксмита "Inside OLE". Разные аспекты программирования для Windows 95 можно найти в "Programmer's Guide Microsoft Windows 95 ". Также интересными являются "Inside Visual C++" Дэвида Дж. Круглински, "OLE Controls Inside Out " Адама Денинга и

"Hardcore Visual Basic" Брюса МакКини.

Последнее и основное правило этой книги состоит в том, что мы не будем копаться в недокументированных или неизученных аспектах программирования для Windows 95. Хотя эта информация и может оказаться интересной, она не является достаточно важной для всех приложений Windows, может быть только для каких-то наиболее необычных. Будучи опытным программистом, автор пытался по мере своих сил и возможностей не останавливаться на деталях реализации операционной системы, поскольку в ее будущих версиях детали могут измениться. Вместо этого он попытался так обойтись с API, как будто этот интерфейс полностью описан в технической документации. Это, конечно, далеко не всегда так, и часто документация не оправдывает возлагаемых на нее надежд. Также могут иметься и программные ошибки. Останавливаться на этих проблемах здесь мы не будем.

Краткая история Windows

Вскоре после появления в середине 1981 года IBM PC стало очевидно, что господствующей операционной системой для PC (включая совместимые) должна стать MS-DOS, что означает Microsoft Disk Operating System. Ранние версии MS-DOS обеспечивали для пользователя интерфейс командной строки, отображая такие команды как DIR и TYPE, которые могли загружать выполняемые программы в оперативную память и предлагали для этих программ определенный интерфейс для доступа к файлам, считывания информации с клавиатуры, и отображения на принтере и на экране дисплея (только в символьном режиме).

Из-за ограниченных возможностей программного и аппаратного обеспечения, псевдографическая среда пробивала себе дорогу медленно. Компьютеры Apple показали возможную альтернативу, когда в январе 1983 года была создана скандально известная Lisa, и затем в январе 1984 года Apple, разработав Macintosh, создала образцовую графическую среду, которая (несмотря на постепенную утрату этой моделью компьютера своих позиций на рынке) все еще рассматривается как эталон, по которому равняются создатели любой другой графической оболочки.

О работе над Windows корпорация Microsoft заявила в ноябре 1983 года (позже, чем появилась Lisa, но раньше, чем Macintosh) и реализовала ее двумя годами позже, в ноябре 1985 года. В течение двух следующих лет, Microsoft Windows версии 1.0 претерпела несколько модернизаций, необходимых для удовлетворения требований международного рынка. Кроме этого появились дополнительные драйверы для новых дисплеев и принтеров.

Windows версии 2.0 была создана в ноябре 1987 года. Эта версия содержала несколько изменений пользовательского интерфейса. Наиболее важное из этих изменений касалось использования перекрывающихся окон, вместо окон, расположенных рядом, что было характерно для Windows версии 1.x. Windows версии 2.0 содержала также улучшенный интерфейс клавиатуры и манипулятора мышь, а также, отчасти, окон меню и диалога.

В то время для Windows требовались только процессоры Intel 8086 или 8088, работающие в реальном режиме, при этом доступ осуществлялся к 1 мегабайту оперативной памяти. Windows/386 (созданная вскоре после Windows 2.0)

14

использовала виртуальный режим процессора Intel 80386 для запуска нескольких одновременно работающих с оборудованием программ MS-DOS в окнах. Для симметрии Windows версии 2.1 назвали Windows/286.

Windows версии 3.0 появилась 22 марта 1992 года. Здесь были объединены ранние версии Windows/286 и Windows/386. Главным изменением в Windows 3.0 была поддержка защищенного режима процессоров Intel 80286, 80386 и 80486. Это позволило Windows и ее приложениям получить доступ к 16 мегабайтам оперативной памяти. "Оболочка" программ Windows для запуска программ и поддержки файлов была полностью переделана. Windows 3.0 — это первая версия Windows, которая стала "родной" для множества пользовательских машин в домах и офисах.

Windows версии 3.1 появилась в апреле 1992 года. Сюда были включены такие важные свойства, как технология TrueType для шрифтов (что дало возможность масштабировать шрифты для Windows), multimedia (звук и музыка), OLE и диалоговые окна общего пользования. Кроме этого Windows 3.1 работала только в защищенном режиме и требовала процессора 80286 или 80386 и, по крайней мере, одного мегабайта оперативной памяти.

Любая история Windows была бы неполной без упоминания об операционной системе OS/2, альтернативной для DOS и Windows, которая на первом этапе развивалась корпорацией Microsoft в сотрудничестве с IBM. OS/2 версии 1.0 (только для символьного режима) работала на процессорах Intel 80286 (или более поздних) и появилась в конце 1987 года. Графическая оболочка Presentation Manager (PM) была реализована в OS/2 версии 1.1 в октябре 1988 года. PM, как изначально предполагалось, должна была стать версией защищенного режима Windows, но графический интерфейс программирования приложений так сильно изменился, что производителям программного обеспечения стало очень трудно поддерживать одновременно обе платформы.

К сентябрю 1990 года конфликт между IBM и Microsoft достиг своего апогея, что вынудило каждую компанию идти своим путем. IBM взяла на себя OS/2, а для Microsoft стало очевидно, что Windows должна стать основной стратегией развития операционных систем. Хотя у OS/2 все еще имеется немало горячих поклонников, ее популярность не идет ни в какое сравнение с популярностью Windows.

Windows NT, появившаяся в июле 1993 года, стала первой версией Windows, поддерживающей 32-разрядную модель программирования для процессоров Intel 80386 и 80486, а также Pentium. Windows NT имеет сплошное плоское (flat) 32-разрядное адресное пространство и 32-разрядные целые. Кроме этого Windows NT переносима и работает на нескольких моделях рабочих станций, основанных на RISC-технологии.

Windows 95 (первоначально условно названная Chicago, а иногда упоминающаяся и как Windows версии 4.0) появилась в августе 1995 года. Также как Windows NT, Windows 95 поддерживает 32-разрядную модель программирования (требуя, таким образом, для себя процессор 80386 и выше). Хотя у Windows 95 и нет некоторых возможностей Windows NT, таких как высокая степень безопасности и переносимость для работы с машинами, созданными по RISC-технологии; тем не менее она способна работать на компьютерах, имеющих всего 4 мегабайта оперативной памяти.

Очевидно, что программы, написанные до появления Windows NT и Windows 95 для 16-разрядных версий Windows, не вполне подходят для новейших 32-разрядных версий Windows; в первых главах будет рассказано о некоторых изменениях, необходимых для переносимости прежних программ.

Создавая API, Microsoft попыталась разделить различные реализации этого интерфейса. API Win16 поддерживается операционной системой Windows 3.1. API Win32 поддерживается системами Windows NT и Windows 95. Дальше — больше. Microsoft предоставила программистам возможность писать 32-разрядные приложения для Windows 3.1: с помощью динамически подключаемой библиотеки (Dynamic Link Library, DLL) вызовы 32-разрядных функций преобразуются в 16-разрядные вызовы. Такой API назвали Win32s (литера "s" означает "subset" — подмножество, поскольку этот API поддерживает только функции Win16). В то же время API для Windows 95 назвали Win32c ("c" от слова "compatible" — совместимый), но потом от этого названия отказались.

В настоящее время считается, что и Windows NT и Windows 95 поддерживают API Win32. Однако, у каждой из этих операционных систем имеются некоторые черты, которых нет у другой. Тем не менее общего у них гораздо больше, что позволяет писать программы, работающие в обеих системах. Кроме этого общеизвестно, что в ближайшем будущем эти системы объединятся.

Краткая история этой книги

В начале 1988 года, первая редакция книги "Программирование для Windows" стала одной из первых книг по программированию для Windows, положив начало их нынешнему изобилию. Когда была подготовлена новая версия книги "Программирование для Windows 95", то автор был поражен тем, что 1995 год — это десятая годовщина Windows и одновременно десятая годовщина той самой книги. Это одновременно и радостный, и пугающий факт.

Соседние файлы в предмете Операционные системы