Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
14.05.2015
Размер:
194.05 Кб
Скачать

Лабораторная работа № 1

Разработка простейшего диалогового проекта с использованием MFC

Цель работы: изучение технологии разработки диалогового проекта с использованием библиотеки MFC, структуры проекта, порядка задания свойств и программирования элементов управления

Задание

1. Изучите раздел "Учебная информация" и реализуйте описанный в нем пример проекта. Опишите своими словами смысл выполняемых в проекте действий.

2. В соответствии с вариантом задания, содержащемся в файле Var01.doc, реализовать диалоговый MFC-проект под именем DlgXX, где XX – номер варианта. Под каждую вводимую и выводимую величину организовать отдельное поле. Надписи к полям должны соответствовать смыслу задачи. Выполнение решения задачи – по нажатию на кнопку.

3. Подготовьте отчет о работе. В раздел "Выполнение" включите ответы на контрольные вопросы и вид полученного диалогового окна.

Учебная информация

Создадим диалоговый MFC-проект, выполняющий возведение в квадрат вещественного числа. В отличие от консольного приложения, в котором диалог с пользователем ведется через текстовое окно, в создаваемом приложении основой для обмена информации с пользователем является специальное диалоговое окно, в котором можно размещать различные элементы управления работой проекта: кнопки, поля, надписи, рисунки и т.д.

1. Выберем тип проекта – MFC AppWizard (exe), зададим имя проекта – Dialog1 и на первом шаге Мастера установим переключатель Dialog based. Остальные настройки Мастера оставим без изменения. В результате получим окно интегрированной среды, показанное на рисунке 1.

Рис. 1.

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

Следует также заметить, что Мастер создал достаточно большой код проекта, содержащий три класса: CAboutDlg – класс окна "О программе"; CDialog1App – класс самого приложения и класс CDialog1Dlg – класс диалогового окна. На рисунке в окне управления проектом видно, что класс CDialog1Dlg содержит шесть функций различного назначения.

2. Удалим три элемента управления на диалоговом окне. Установим свои элементы управления: одну кнопку, два текстовых поля и две надписи как показано на рис. 2. Будем считать, что исходное число вводится в верхнее поле, а результат выводится в нижнее после нажатия кнопки "Пуск".

Для установки следует щелкнуть по соответствующему элементу на панели и "растянуть" его мышью в диалоговом окне. Тексты на кнопке и в элементах "Надпись" вводятся через окна свойств этих элементов. Для вызова этого окна необходимо щелкнуть правой кнопкой мыши по элементу и в контекстном меню выбрать Properties.

Прежде, чем вводить надписи русским текстом, необходимо выполнить следующие настройки:

  • обратиться к меню Project/Settings и на вкладке Resources установить язык – Russian;

  • в окне управления проектом щелкнуть правой кнопкой мыши по имени ресурса (диалогового окна) – IDD_DIALOG1_DIALOG, открыть окно свойств этого ресурса и в поле Language установить Russian.

В поле Caption окон свойств элементов управления введем надписи в соответствии с рис. 2. Размер и тип шрифта можно изменить в окне свойств диалогового окна (кнопка Font...).

3. Для хранения значений, вводимых и выводимых в текстовые поля, следует ввести соответствующие переменные – компоненты класса CDialog1Dlg. Для этого выполним View/ClassWizard и выберем вкладку Member Variables. Здесь в списке Control IDs выберем идентификатор первого поля – IDC_EDIT1 и нажмем кнопку Add Variable. В окне Add Member Variable в поле Member Variable Name зададим имя переменной – m_edit1, в поле Category выберем Value, а в поле Variable Type – тип double и нажмем Ok. Аналогично создадим переменную m_edit2 для второго текстового поля.

4. Основным командным элементом диалогового окна является кнопка "Пуск". Для программирования ее работы в окне ClassWizard следует открыть вкладку Message Maps, выбрать в поле Class Name имя CDialog1Dlg, в поле Object ID (идентификатор объекта) – IDC_BUTTON1, а в поле Messages (сообщения) – BN_CLICKED. После этого надо нажать кнопку Add Function (добавить функцию) и в открывшемся окне оставить имя функции – обработчика нажатия кнопки "Пуск" без изменения – OnButton1. В окне ClassWizard нажать кнопку Edit Code (редактировать код), после чего будет открыт редактор кода на заготовке вставленной функции. Место вставки кода обработки события нажатия кнопки "Пуск" обозначено комментарием:

//TODO: Add your control notification handler code here.

Этот комментарий можно удалить, а на его место вписать следующий код:

UpdateData(TRUE);

m_edit2=m_edit1*m_edit1;

UpdateData(FALSE);

5. Откомпилируем и запустим проект. Пример решения задачи показан на рис. 3.

Проанализируем состав файлов в папке проекта. В первую очередь, обратим внимание на наличие трех пар файлов: Dialog1.cpp и Dialog1.h; Dialog1Dlg.cpp и Dialog1Dlg.h; StdAfx.cpp и StdAfx.h. Первая пара описывает созданное приложение, вторая – диалоговое окно, третья подключает стандартные системные библиотеки.

C++ является объектно-ориентированным языком. Основным инструментом для реализации объектов являются классы. В С++ принят стиль записи программ, в котором общее описание класса содержится в заголовочном файле, а описание функций класса – в файле реализации, имеющем расширение .cpp. Таким образом выполняется поддержка принципа инкапсуляции и защита авторских прав программиста: пользователю передаются заголовочные файлы с прототипами функций класса и откомпилированные файлы проекта. Пользователь знает как использовать функции и компоненты данных класса, однако тексты функций класса, содержащиеся в файлах реализации типа .cpp могут остаться у автора.

Следует обратить внимание, что двойной щелчок по имени класса в окне управления проектом (рис. 1) приводит к открытию в редакторе соответствующего заголовочного файла, а двойной щелчок по имени любой компонентной функции класса – к открытию файла реализации .cpp.

Существенно автоматизировать добавление в проект новых классов, компонент данных и компонент–функций класса помогает Мастер ClassWizard. В рассмотренном примере в класс CDialog1Dlg добавлена функция – обработчик события нажатия на кнопку "Пуск" OnButton1(). Информация об этой функции автоматически добавляется Мастером ClassWizard в следующие области описания класса:

  • в заголовочный файл Dialog1Dlg.h добавлен прототип функции afx_msg void OnButton1();

  • в карту сообщений файла реализации Dialog1Dlg.cpp добавлена макрокоманда, связывающая между собой идентификатор кнопки IDC_BUTTON1 с функцией – обработчиком события: ON_BN_CLICKED(IDC_BUTTON1, OnButton1);

  • в конец файла Dialog1Dlg.cpp добавлена заготовка фукции – обработчика void CDialog1Dlg::OnButton1(){ }.

Следует заметить, что для добавления простых функций, не являющихся обработчиком какого-либо события, используется контекстное меню Add Member Function..., вызываемое щелчком правой кнопки мыши по имени класса в окне управления проектом. При этом в карту сообщений ничего не добавляется.

Контрольные вопросы

1. Что такое мастер ClassWizard?

2. Какие действия выполнены при разработке приложения с помощью мастера ClassWizard?

3. Что такое идентификатор объекта?

4. Как запрограммировать запуск решения задачи щелчком правой кнопке мыши по клиентской области окна?

5. Для чего в класс диалогового окна введены компоненты данных, связанные с текстовыми полями?

Соседние файлы в папке ВУМИП_ЗО