Введение
Visual C++ 6 представляет собой мощный и сложный инструмент для создания 32-разрядных приложений Windows 95 и Windows NT. Эти приложения намного превосходят как по объему, так и по сложности своих предшественников для 16-разрядной Windows и еще более древние программы, которые вообще обходились без графического интерфейса. Но, несмотря на то что объем и сложность программ увеличиваются, для их создания от программиста требуется не больше, а меньше усилий, по крайней мере для тех, кто правильно выбирает необходимые инструментальные средства.
Именно таким инструментом является Visual C++ 6. Оснащенный набором разнообразных мастеров (Wizard), формирующих программный код, этот продукт позволяет в считанные секунды создать вполне работоспособное приложение Windows. Включенная в состав Visual C++ 6 библиотека классов Microsoft Foundation Classes (MFC) уже стала фактически стандартом для разработчиков компиляторов на языке C++. Визуальные средства разработки интерфейса пользователя превращают процесс компоновки разнообразных меню и диалоговых окон в довольно увлекательную игру. Время, которое вы затратите на изучение возможностей этого продукта, сторицей окупится при создании первого же проекта.
Для кого написана эта книга
Эта книга научит вас использовать Visual C++ 6 (для создания 32-разрядных приложений Windows, включая обработку баз данных), Internet и приложения, в которых применяются богатые возможности новейшей технологии ActiveX. Конечно, такое заявление ко многому обязывает, особенно если учесть, что все нужно уместить менее чем в тысячу страниц. Поэтому кое-чего вы здесь точно не найдете. Эта книга не научит вас следующему.
- Языку программирования C++. Вы уже должны владеть этим языком. По ходу изложения вы только время от времени встретите упоминания о тех или иных соответствующих контексту концепциях объектно-ориентированного программирования или конструкциях языка C++. Материал на эту тему - C++ By Example (C++ в примерах) - находится на Web-сайте Издательского дома "Вильямс".
- Работе с приложениями Windows. Вы должны быть достаточно опытным пользователем Windows - в частности, уметь изменять размеры и положение окон, выполнять двойной щелчок мышью, ориентироваться в пиктограммах на панели инструментов.
- Использованию Visual C++ в качестве компилятора C. Если вы уже работали на языке C, то можете, очевидно, пользоваться продуктом Visual C++ как компилятором. А вот новичкам придется освоить данную технологию до изучения этой книги.
- Программированию для Windows без использования библиотеки MFC. Прекрасно, если вы с этим знакомы! Но кое-что о составе MFC вы все же узнаете.
- Детальному описанию методики программирования ActiveX. На некоторые из таких тем имеются ссылки в главах, касающихся ActiveX. Но это не более чем указание на материал, который вы должны изучить по другим источникам.
Эту книгу следует прочесть тем, кто считает себя принадлежащим одной из следующих категорий.
- Вы кое-что знаете о C++ и методике программирования приложений Windows, но о Visual C ++ знаете лишь понаслышке. Работая с этой книгой, можно изучить продукт Visual C++ значительно быстрее, чем если бы вы просто начали самостоятельно писать программы.
- Вы уже работали с предыдущими версиями Visual C++. Многие пользователи, освоив определенную методику работы, нуждаются в том, чтобы взглянуть на уже, казалось бы, известные вещи по-новому и попытаться использовать расширенные функциональные возможности, которые предоставляют новые версии инструментальных средств.
- Вы уже какое-то время поработали с Visual C++ и у вас появилось подозрение, что некоторые операции выполняются слишком сложно. Возможно, так оно и есть.
- Вы уже достаточно освоили Visual C++, но теперь хотите расширить возможности создаваемых продуктов. В этой книге вы найдете достаточно распространенные прототипы для решения таких задач, как оснащение продукта оперативной справкой и эффективными методами вывода на печать, а также программирование параллельных процессов.
Прежде чем приступить к чтению...
Прежде чем начать читать эту книгу, вам придется приобрести копию дистрибутива продукта Visual C++ 6.0 и затем установить его на компьютере. Сам по себе процесс установки настолько прост, что мы не сочли нужным загромождать книгу его описанием.
Еще до того как покупать Visual C++ 6.0, нужно установить на компьютере 32-разрядную операционную систему Windows: Windows 95, Windows NT Server или Workstation. Это, в свою очередь, требует достаточно мощного ПК - скажем, процессор должен быть не хуже 486, по крайней мере 16 Мбайт памяти и не менее 500 Мбайт пространства на диске, а также дисплей с разрешением не ниже 800x600 пикселей. Иллюстрации в этой книге сделаны с экрана монитора с разрешением 800x600 пикселей, и, как вы увидите, некоторые из них выглядят слегка перегруженными. Все исходные тексты примеров имеются на Web-сервере, поэтому работать будет значительно легче, если у вас есть модем и доступ к Internet.
И наконец, вы должны пообещать самому себе терпеливо идти вперед в обнимку с Visual C++ - читать эту книгу, щелкать мышью, вводить что-то с клавиатуры и, в конце концов, добиваться своего. Если не хотите, не набирайте тексты программ с клавиатуры - все они есть на Web-сервере. Но, по крайней мере, нужно быть готовым открывать файлы и анализировать тексты программ по мере изучения книги.
Содержимое книги
Такая обширная тема, как программирование для Windows с использованием Visual C++, включает множество вопросов. Эта книга разделена на главы, посвященные собственно обучению (с 1 по 28), и приложения (от А до Е). Просмотрите сейчас внимательно содержание приложений, перечисленных ниже, и по мере изучения материала обращайтесь к ним, если вы не знаете, как правильно выполнить ту или иную процедуру.
- Приложение А. Обзор языка C++ и основные концепции объектно-ориентированного программирования. Это приложение напомнит вам об основных идеях объектно-ориентированного программирования, на которых базируется язык C++.
- Приложение Б. Программирование для Windows и класс CWnd. Здесь речь идет об особенностях программирования для Windows, которые скрыты сейчас от пользователя такими классами из MFC, как CWnd.
- Приложение В. Интерфейс Visual Studio. Здесь приведены сведения обо всех меню, панелях инструментов, зонах редактирования на экране, клавишах быстрого вызова и других подобных элементах, которые и составляют этот довольно сложный, но очень развитый интерфейс между разработчиком и Visual Studio.
- Приложение Г. Отладка. Здесь описаны меню, окна, панели инструментов и команды, которые имеют отношение к процессу отладки и пробным сеансам выполнения приложения.
- Приложение Д. Макросы и глобальные объекты MFC. Здесь перечислены макросы препроцессора, глобальные переменные и функции, которые используются в заготовках текстов и программ, генерируемых мастерами Visual Studio.
- Приложение Е. Полезные классы. Здесь перечислены классы, используемые для манипулирования датами, строками и множествами объектов в примерах, которые рассматриваются в этой книге.
Вы можете не читать все главы подряд, изменять порядок изучения отдельных тем, возвращаться к вопросам, пропущенным при первом чтении, и вообще делать с этим материалом все, что вам заблагорассудится (это зависит от предшествующего опыта и индивидуальных наклонностей). Мы, однако, рекомендуем не пренебрегать теми несложными приложениями, которые включены в книгу. Они смогут вас многому научить.
Основной материал изложен в 28 главах. Каждая из них посвящена отдельной, достаточно автономной теме, но в редких случаях некоторые главы тематически связаны. Примером может служить создание панелей инструментов и включение в приложение оперативной справки. В каждой главе даны подробные инструкции по созданию одного или нескольких вполне работоспособных приложений.
В первых девяти главах описаны основные концепции программирования, которые имеют отношение едва ли не ко всем приложениям Windows. После того как вы получите достаточно четкое представление о них, будут рассмотрены более конкретные задачи.
Ниже перечислены основные темы книги.
Элементы управления и средства диалога
Какое приложение Windows обходится без диалогового окна или без текстовых полей, или без кнопок? Диалоговые окна и элементы управления являются жизненно важными средствами интерфейса пользователя. Каждое из них, даже простенькая надпись из нескольких букв, является, в свою очередь, окном. Использование стандартных элементов управления имеет несомненное преимущество, поскольку экономит и время пользователя, которому не нужно заново изучать технологию манипулирования уже знакомыми ему окнами типа File Open или средствами навигации по дереву каталогов, и время разработчика. Узнать больше обо всех этих элементах управления вы сможете в главе 2, Диалоговые окна и элементы управления, и главе 10, Элементы управления общего назначения.
Сообщения и команды
Сообщения - это основной элемент программирования в среде Windows. Что бы ни случилось в Windows-машине (щелкнет ли пользователь кнопкой мыши, нажмет ли клавишу на клавиатуре), все эти события порождают сообщения, которые передаются в одно или даже более окон. Те, в свою очередь, с ними что-то делают. Visual C++ облегчает создание программ, которые перехватывают сообщения и обрабатывают их. В главе 3, Сообщения и команды , рассматривается концепция формирования и обработки сообщений и то, как MFC и другие компоненты Visual C++ помогают программисту справиться с ними.
Парадигма документ/представление
Парадигма - это модель, способ взглянуть на вещи со стороны. Создатели MFC приняли в качестве базовой концепции следующее предположение: любая программа формирует нечто такое, что предполагает сохранить в виде файла. Именно эту совокупность информации и обозначили как документ (document). Представление (view) - это один из способов просмотра документа. В таком разделении содержимого и формы есть много преимуществ, которые подробно рассматриваются в главе 4, Документы и представления. MFC предлагает набор классов, которые можно наследовать при создании собственных классов документов и классов представлений. В результате такие распространенные задачи программирования, как, например, экранная прокрутка "крупногабаритных" объектов, решаются беспроблемно.
Вывод на экран
Какую бы умную программу вы ни создавали, вам не обойтись без вывода на экран либо текста, либо графики. Без этого вся "заумность" вашей программы останется "вещью в себе", как любили выражаться классики немецкой философии. Значительная часть работы в этой сфере может быть выполнена автоматически классами представления (в этом одно из преимуществ парадигмы документ/представление). Но не волнуйтесь: вам придется многое сделать и самому. О том, что такое контекст устройства (device context) и прокрутка, а также о многом другом вы узнаете из главы 5, Вывод на экран.
Вывод на печать
Включение в разрабатываемое приложение вывода на печать - зачастую самая простая из задач. Дело в том, что если уж вы организовали в программе вывод на экран, то можете тот же код использовать и для вывода на печать. Но если речь идет о выводе более чем одной страницы информации, задача несколько усложняется. В главе 6, Распечатка и предварительный просмотр, рассматриваются возникающие при этом проблемы и способы их решения, а также режимы наложения (mapping modes), формирование верхних и нижних колонтитулов и многое другое.
Работа с файлами
Некоторые весьма полезные средства, такие как экранный калькулятор и окно для обмена краткими сообщениями в сети, нужны только временно. Большинство же программ сохраняют информацию в файлах, а затем многократно открывают и закрывают их в процессе модификации ранее сохраненных документов. MFC позволяет значительно упростить программирование операций архивирования и расширить возможности операторов вывода в поток (в частности, операторов >> и <<). О программировании операций с файлами вы узнаете из главы 7, Сохранение-восстановление объектов и работа с файлами.
Программирование с использованием технологии ActiveX
ActiveX - это усовершенствованная технология OLE, которая значительно упрощает взаимодействие приложений на уровне объектов, позволяя, например, ввести документ Word в рабочий лист Excel или выполнить подобные манипуляции сотнями других объектов в приложениях, разработанных в рамках этой технологии (в дальнейшем - ActiveX-приложениях). Различным аспектам использования технологии ActiveX посвящен целый ряд глав: глава 13, Концепции технологии ActiveX, глава 14, Создание приложения - контейнера ActiveX, глава 15, Создание приложения - сервера ActiveX, глава 16, Создание сервера автоматизации, и глава 17, Создание элемента управления ActiveX.
Internet
Microsoft полагает (и небезосновательно), что распределенные вычисления, при которых нагрузка распределяется между двумя или более компьютерами, становятся все более и более обычным делом в мире ПК. Программы должны "разговаривать" друг с другом, пользователи - посылать сообщения по сети (локальной или глобальной), а MFC - обеспечивать всех желающих создавать такого рода программные продукты с помощью соответствующих классов. В этой книге проблемам программирования для Internet посвящены четыре главы: глава 18, Windows Sockets, MAPI и Internet, глава 19, Использование классов WinInet при программировании для Internet, глава 20, Создание элемента управления ActiveX для Internet, и глава 21, Библиотека Active Template Library .
Доступ к базам данных
Программирование обработки баз данных также упрощается. Пакет ODBC (Open DataBase Connectivity) от Microsoft позволяет программировать функции API, которые обеспечивают доступ к базам данных в самых разнообразных форматах: Oracle, DBase, рабочие листы Excel, обычный текстовый формат, прежние версии систем для больших компьютеров, использующие SQL, и многие другие. Вам нужно только вызвать стандартную функцию и средства API, которые поставляются разработчиком или дистрибьютором конкретной базы данных и берут на себя все заботы по выполнению преобразования. Подробности, касающиеся этой темы, вы найдете в главе 22, Доступ к базам данных, и главе 23, SQL и редакция Visual C++ Enterprise Edition.
Новейшие тенденции
Пользователям, которые, как они полагают, уже стали мастерами в применении базовых методов программирования на Visual C++, предлагается несколько глав, в которых собран материал о новейших тенденциях в этой области. С их помощью вы сможете повысить свое мастерство до такого уровня, который доступен только асам программирования. Здесь вы сможете узнать, как избежать проблем с памятью, расширить "узкие" места и найти "занозы" в тексте программы. Методика выполнения подобных операций изложена в главе 24, Повышение производительности приложений.
Концепция повторного использования приобретает в последнее время огромную популярность в программировании, особенно среди менеджеров программных проектов, озабоченных проблемой снижения издержек. Если вы хотите освоить создание такого рода программных продуктов, обратитесь к главе 25, Как достичь повторного использования программных компонентов , в которой найдете все необходимое.
Язык C++ сравнительно молод и изменяется едва ли не ежегодно. По мере того как Комиссия Американского института стандартов (ANSI - American National Standard Institute) работает над стандартизацией языка в направлении создания очередного окончательного стандарта, изготовители компиляторов включают в свои версии все новые и новые ключевые слова и возможности. Глава 26, Исключения, шаблоны и последние модификации С++,познакомит вас с новинками этого языка.
Поскольку требования пользователей к возможностям программных продуктов непрерывно возрастают, программисты просто вынуждены постоянно обновлять методику работы, создавая приложения, которые обеспечивают все более быструю реакцию на события. Для многих разработчиков создание приложений с параллельным выполнением функций является жизненной необходимостью, вытекающей из потребностей рынка. Об этом рассказано в главе 27, Многозадачность на основе потоков Windows.
Глава 28, Что еще полезно знать, послужит для вас путеводителем по темам, которые из-за ограниченности объема мы не смогли включить в эту книгу. Это не более чем самое поверхностное изложение таких вопросов, как создание консольных (не соответствующих спецификации API) приложений, разработка динамически связываемых библиотек и работа с уникодом (Unicode).
Соглашения, принятые в этой книге
Само собой разумеется, что в этой книге очень часто встречаются фрагменты текстов программ. Иногда это одна-две строки, в которых текст программы перемежается собственно текстом главы, как, например, ниже:
int SomeFunction( int x, int y)
{
return x+y;
}
Отличить текст программы от собственно текста книги довольно легко, поскольку мы применяем в этих фрагментах различные шрифты. Иногда фрагменты текста программы довольно объемны и не перемежаются текстом изложения. Именно такой вариант представлен в листинге 1.
Листинг 1. Пример листинга
CHostDialog dialog(m_pMainWnd);
if(dialog.DoModal() == IDOK()
{
AppSocket =
new CSocket();if (AppSocket->Connect(dialog.m_hostname,
119))
{ while(AppSocket->GetStatus() ==
CONNECTING)
{
YieldControl();
} if(AppSocet->GetStatus() == CONNECTED)
{
CString response = AppSocet->GetLine();
SocetAvailable = TRUE;
}
}
}
if (!SocketAvailable)
{
AfxMessageBox("Can't connect to server. Please
quit.", MB_OK|MB_ICONSTOP);
}
В предпоследней строке листинга вы видите символ
, который мы назвали символом продолжения программной строки. Он указывает место разрыва программной строки, который пришлось сделать при верстке текста, чтобы уместить программную строку в формат книжной страницы. В действительности в тексте программы обе части разорванной строки слиты воедино. Если вам придется копировать вручную тексты программ из данной книги, то в этом месте не разрывайте программную строку, а продолжайте вводить текст в той же строке. Если вы воспользуетесь прилагаемым компакт-диском, то при просмотре текстов программ не увидите никакого разрыва строки на этом месте. Поэтому пусть вас не смущает некоторая разница в том, что вы видите на странице книги и на экране дисплея .
Главное назначение фрагментов текстов программ в книге - проиллюстрировать те или иные процессы по ходу изложения, а не быть источником для копирования вручную. Все тексты программ есть на Web-сервере. Не пренебрегайте им - это избавит вас не только от затрат времени на ввод вручную, но и от поиска ошибок (а они при вводе будут неизбежны). Иногда по ходу изложения мы приводим несколько вариантов программы, демонстрируя процесс ее создания и совершенствования. На сервере хранится только окончательная версия. Адреса серверов - www.mcp.com/info и www.gregcons.com/uvc6.htm.
Это заметка: здесь описано то, на что очень рекомендуется обратить внимание. Не пренебрегайте сведениями, которые выделены таким образом. Это относится и к тем, кто считает излишним терять свое время на выслушивание (или хотя бы чтение) чужих советов.
На этом мы заканчиваем затянувшееся вступление. Все
необходимое для того, чтобы приступить к делу, уже сказано, включая некоторые
замечания относительно разметки текста в книге. Настало время заняться изучением
методов создания приложений Windows на базе MFC, а затем и разработкой своих
собственных приложений. В добрый путь! Пусть не покажется он вам слишком
ухабистым! Как говорят французы, Vouloir c'est pouvoir: "Хотеть
- значит мочь".