Введение
Получаю письма: "Помогите стать актером".
Отвечаю: "Бог поможет!"
Фаина Раневская
Приходит программист на стрельбы. Делает десять выстрелов — все мимо. Инструктор в недоумении разводит руками: "Как же так?" Программист подходит вплотную к мишени, нажимает на курок — естественно, попадает в "десятку" и говорит: "У меня все в порядке — это у вас не работает". Это, конечно же, анекдот, но любой человек, занимающийся программированием, подтвердит, что сам не раз оказывался в ситуации, когда был полностью уверен, что протестировал свою программу вдоль и поперек и "выловил" все ошибки, и все же программа, оказавшись в руках заказчика, непостижимым образом начинала выдавать всякую чушь. Не зря же считается, что любая прекрасно работающая программа содержит как минимум две ошибки.
К чему я это рассказываю? В названии книги, которую вы держите в руках, есть слово "самоучитель". Другими словами, вы в той или иной степени — новичок. И именно поэтому вам мой первый совет — разрабатывая любую, пусть самую простую программу, всегда старайтесь предусмотреть все, даже самые невероятные ситуации, которые могут возникнуть в процессе ее эксплуатации. Помните: ответственность за сбои лежит на программисте, а не на пользователе.
Данная книга посвящена программированию для системы Windows. Основная проблема, с которой сталкивается программист, начиная работать в некоторой операционной системе, состоит в понимании фундаментальных принципов и моделей, включенных в ее архитектуру. И только проникнувшись "образом мышления Windows", начинаешь понимать, что программирование под Windows не сложнее любого другого.
Какой бы язык программирования вы не выбрали, очевидно, что базой будет Windows API (Application Programming Interface, Интерфейс прикладного программирования): только освоив его, можно писать программы, использующие все возможности, предоставляемые операционной системой. Однако сложность современных приложений поднялась на такой уровень, что разработка коммерческого программного обеспечения с использованием только Windows API и языка С уже не может удовлетворить программиста. В настоящее время предлагается два подхода к построению сложного ПО. Первый — это использование систем визуального программирования, а второй — применение библиотек классов, которые самостоятельно выполняют массу черновой работы и при этом гораздо в большей степени, нежели сама система Windows, поддерживают программиста, структурируя и облегчая его деятельность. Не будем заниматься сравнением достоинств и недостатков — каждый вправе сам решить, что ему больше подходит.
Но если вас заинтересовала эта книга, то рискну предположить, что вы, как и я, предпочитаете создавать все сами, а не полагаться на готовые решения, несмотря на то, что поначалу много времени будет уходить на рутину. А затем, по мере накопления собственного опыта, можно перейти на хорошо известный принцип "ножниц и клея", перенося уже написанные и отлаженные фрагменты из одной программы в другую. Это обычная и, на мой взгляд, правильная практика.
Основной темой книги является изучение библиотеки MFC (Microsoft Foundation Classes, Базовые классы Microsoft). Несмотря на то, что эта библиотека сложна и многогранна, и на сегодняшний день существует более десяти ее версий, для начала работы с ней вполне достаточно знакомства с языком программирования C++. Более того, если вы еще не знакомы с этим языком — не отчаивайтесь. Поставляемые исходные тексты библиотеки MFC могут значительно помочь одновременно изучить и C++. Новичкам даже не потребуется знание принципов программирования в Windows. Дело в том, что в компилятор Visual C++ включено специатьное средство, позволяющее автоматизировать процесс разработки приложения, — мастер MFC AppWiz-ard, который создаст для вас работающую программу. Конечно, это будет только шаблон, и наполнять его конкретным содержанием придется самостоятельно. Но первоначальное знакомство со сгенерированным кодом принесет начинающим программистам значительную пользу.
Теперь несколько слов о методике изложения материала. Она несколько отличается от принятой для самоучителей и базируется на двух основных подходах:
На мой взгляд, такая методика позволит значительно лучше освоить спектр возможностей, предоставляемых библиотекой MFC. Сначала вы рассматриваете конкретные примеры, а потом пытаетесь реализовать уже собственные идеи, используя приведенные описания компонентов различных классов. На основе своего, достаточно богатого опыта, могу вас заверить, что без самостоятельной работы, ограничиваясь только разбором кем-то написанного кода, научиться программировать невозможно.
И еще одно замечание по этому поводу. Первоначально я предполагал в конце каждой главы поместить вопросы и упражнения, чтобы помочь закрепить прочитанный материал. Однако в процессе работы над книгой я отказался от этой идеи. И связано это опять же с попыткой подтолкнуть вас к самостоятельной работе. На прилагаемой дискете вы найдете многочисленные примеры, в которых реализованы подходы и возможности либо совсем не описанные, либо только упоминающиеся в тексте. Попробуйте их найти и самостоятельно разработать на их основе работающие приложения. Примеры написаны для версии компилятора Visual C++ 5.0, в которую включена библиотека MFC версии 4.22. Однако рассматриваются и некоторые особенности библиотеки версии 4.23, поставляемой с пакетом Visual C++ 6.0.
Все замечания и пожелания можно присылать по электронной почте по адресу support@microsoft.com