1.1.4 Создание приложения с помощью Visul ++
О принципах устройства приложения рассказывалось выше. Теперь рассмотрим, как оно создается с помощью Visul ++. Сначала разберем одно важное понятие – проект. До сих пор приложение рассматривалось, как только как совокупность объектов базовых и производных классов. Но для обеспечения работы приложения требуется нечто большее – наряду с описанием классов необходимо описание ресурсов, связанных с приложением, нужна справочная система и т.п. Термин «проект» как раз и используется, когда имеется в виду такой общий взгляд на приложение.
В среде Visul ++ можно строить различные типы проектов. Такие проекты после их создания можно компилировать и запускать на исполнение. Фирма Mirsft разработала специальный инструментарий, облегчающий и ускоряющий создание проектов в среде Visul ++. Например, мастер MF Wizrd () позволяет создать проект, Windows-приложения которое имеет однодокументный, многодокументный или диалоговый интерфейс и использует библиотеку MF.
1.1.5 Инструментальное средство – lssWizrd (мастер классов)
Создаваемый остов приложения составлен так, что в дальнейшей работе с проектом можно использовать другое инструментальное средство – lssWizrd (мастер классов), предназначенное для создания остовов новых производных классов. Еще одно основное назначение lssWizrd в том, что он создает остовы для переопределяемых методов. Он позволяет показать все сообщения, приходящие классу, и создать остов обработчика любого из этих сообщений. Это только две основные функции lssWizrd. Он не всесилен, но его возможности довольно велики.
Средство lssWizrd предоставляет широкий спектр услуг. Он позволяет не только добавлять к существующему классу новые методы и данные.
При помощи lssWizrd можно добавить новый класс, созданный на основе базовых классов. В качестве базового класса можно использовать классы, наследованные от класса mdTrgt или класса Rrdst. Для наследования классов от других базовых классов использовать средства lssWizrd нельзя. Такие классы надо создавать вручную, непосредственно в текстовом редакторе.
Полученная заготовка класса полностью работоспособна. Ее можно дополнить по своему усмотрению новыми методами и данными. Эту работу можно выполнить вручную, но гораздо лучше и проще воспользоваться услугами lssWizrd. За счет использования lssWizrd процедура создания собственного класса значительно ускоряется и уменьшается вероятность совершить ошибку во время объявления методов.
Включение в класс новых методов.
Очень удобно использовать lssWizrd для включения в состав класса новых методов. Можно добавлять к классу методы, служащие для обработки сообщений Windows и команд от объектов, а также методы, переопределяющие виртуальные методы базовых классов.
lssWizrd не только позволяет добавить в класс новые методы, но и удалить их. lssWizrd самостоятельно удалит объявление метода из класса.
Включение в класс новых элементов данных.
lssWizrd позволяет включать в класс не только новые методы, но и элементы данных, связанные с полями диалоговых панелей, форм просмотра и форм для просмотра записей баз данных и полей наборов записей. lssWizrd использует специальные процедуры, чтобы привязать созданные им элементы данных к класса к полям диалоговых панелей. Эти процедуры носят названия «обмен данными диалоговой панели» и «проверка данных диалоговой панели» (Dilg Dt hng nd Dilg Dt Vlidtin – DD/DDV). Чтобы привязать поля из наборов записей к переменным, используется процедура обмена данными с полями записей (Rrd Fild hng – RF).
Значительно упрощают программисту работу с диалоговыми панелями. Они позволяют связать поля диалоговых панелей и переменные. Когда пользователь редактирует поля диалоговых панелей, процедуры DDV проверяют введенные значения и блокируют ввод запрещенных значений. Затем процедуры DD автоматически копируют содержимое полей диалоговых панелей в привязанные к ним элементы данных класса. И наоборот, когда приложение изменяет элементы данных класса, привязанные к полям диалоговой панели, процедуры DD могут сразу отобразить новые значения полей на экране компьютера. Процесс получения и обработки сообщений может показаться чересчур сложным, но, тем не менее, ему должны следовать все Windows-программы. К счастью, при использовании библиотеки MF большинство частных деталей скрыты от программиста, хотя и продолжают неявно присутствовать в программе. В простейшем случае программа, написанная с помощью MF, содержит два класса, порождаемые от классов иерархии библиотеки: класс, предназначенный для создания приложения, и класс, предназначенный для создания окна. Другими словами, для создания минимальной программы необходимо породить один класс от Win, а другой – от FrmWnd. Эти два класса обязательны для любой программы. Кроме создания вышеупомянутых классов, в программе также должна быть организована обработка всех сообщений, поступающих от Windows. В данном примере программа еще ничего полезного не делает, поэтому отвечать на каждое сообщение не нужно. MF обработает все сообщения, которые нас не интересуют. Тем не менее, в этом примере присутствует карта откликов на сообщения, или просто карта сообщений. Позже мы рассмотрим ее подробнее. Как уже упоминалось, MF – это базовый набор (библиотека) классов, написанных на языке С++ и предназначенных для упрощения и ускорения процесса программирования для Windows. Библиотека содержит многоуровневую иерархию классов, насчитывающую около 200 членов. Они дают возможность создавать Windows-приложения на базе объектно-ориентированного подхода. С точки зрения программиста, MF представляет собой каркас, на основе которого можно писать программы для Windows.
1.1.6 Преимущество MF библиотек
Библиотека MF разрабатывалась для упрощения задач, стоящих перед программистом. Как известно, традиционный метод программирования под Windows требует написания достаточно длинных и сложных программ, имеющих ряд специфических особенностей. В частности, для создания только каркаса программы таким методом понадобится около 75 строк кода. По мере же увеличения сложности программы ее код может достигать поистине невероятных размеров. Однако та же самая программа, написанная с использованием MF, будет примерно в три раза меньше, поскольку большинство частных деталей скрыто от программиста.
Одним из основных преимуществ работы с MF является возможность многократного использования одного и того же кода. Так как библиотека содержит много элементов, общих для всех Windows-приложений, нет необходимости каждый раз писать их заново. Вместо этого их можно просто наследовать (говоря языком объектно-ориентированного программирования). Кроме того, интерфейс, обеспечиваемый библиотекой, практически независим от конкретных деталей, его реализующих. Поэтому программы, написанные на основе MF, могут быть легко адаптированы к новым версиям Windows (в отличие от большинства программ, написанных обычными методами).
Еще одним существенным преимуществом MF является упрощение взаимодействия с прикладным программным интерфейсом (I) Windows. Любое приложение взаимодействует с Windows через I, которое содержит несколько сот функций. Внушительный размер I затрудняет попытки понять и изучить его целиком. Зачастую, даже сложно проследить, как отдельные части I связанны друг с другом! Но поскольку библиотека MF объединяет (путем инкапсуляции) функции I в логически организованное множество классов, интерфейсом становится значительно легче управлять. Поскольку MF представляет собой набор классов, написанных на языке С++, поэтому программы, написанные с использованием MF, должны быть в то же время программами на С++. Для этого необходимо владеть соответствующими знаниями. Для начала необходимо уметь создавать собственные классы, понимать принципы наследования и уметь переопределять виртуальные функции. Хотя программы, использующие библиотеку MF, обычно не содержат слишком специфических элементов из арсенала С++, для их написания тем не менее требуются солидные знания в данной области [7].
2. Описание программного продукта
2.1 Общие сведения
Данная программа написана на языке Visul ++ 6.0. После запуска программа предлагает ввести длины сторон треугольника и рассчитать некоторые его характеристики.
2.2Функциональное назначение
Данная программа предназначена для анализа треугольника на наличие в нем прямого угла, а также для расчета периметра, площади, радиуса вписанной и описанной окружности.
Программа называется Tringl. В программе были разработаны три класса и их методы. Интерфейс и все вычисления были выполнены в одном классе, описывающем главное диалоговое окно (рисунок 2.3.1). Класс называется TringlDlg. Он наследован от класса Dilg.
Рисунок 2.3.1 – Главное окно программы
Ввод длин сторон треугольника осуществляется через элементы dit. С ними связаны атрибуты класса m_lin_1, m_lin_2, m_lin_3. Эти атрибуты имеют тип int. Минимальным значение длины стороны является 1. У пользователя имеется возможность ввести значения вручную или использовать для этого элементы Sin. В программе реализована обработка события UD_DLTS данных элементов. Функции, реализующие обработку данных событий, называются nDltsSin1, nDltsSin2, nDltsSin3. В данные функции передается указатель NM_UDWN* NMUDwn. Через него можно получить значение атрибута iDlt (значение, на которое следует увеличить или уменьшить связанное с элементом число).