Пример выполнения лабораторной работы

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

СОЗДАНИЕ МНОГООКОННОГО ПРИЛОЖЕНИЯ НА ЯЗЫКЕ VC++ 6.0.

1. Цель работы: разработать многооконное приложение в среде Microsoft Developer Studio (Visual C++).

Краткие теоретические сведения.

2.1. Функция AfxMessageBox().

     Данная функция предназначена для вывода сообщения пользователю. Синтаксис вызова функции следующий:

 

int AfxMessageBox( LPCTSTR Text, UINT Type = MB_OK, UINT IDIcon = 0);

 

где Text – текстовая строка сообщения, Type – тип набора кнопок, отображаемых в окне сообщения, IDIcon – тип иконки.

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

MB_ABORTRETRYIGNORE – Кнопки Abort, Retry, и Ignore;

MB_OK – Кнопка OK (по умолчанию);

MB_OKCANCEL – Кнопки OK и Cancel;

MB_RETRYCANCEL – Кнопки Retry и Cancel;

MB_YESNO – Кнопки Yes и No;

MB_YESNOCANCEL – Кнопки Yes, No и Cancel.

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

 

MB_ICONEXCLAMATION
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONSTOP

 

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

IDABORT – была нажата кнопка Abort;

IDCANCEL– была нажата кнопка Cancel;

IDIGNORE – была нажата кнопка Ignore;

IDNO – была нажата кнопка No;

IDOK – была нажата кнопка OK;

IDRETRY – была нажата кнопка Retry.

 

Примеры.

1) Вывод сообщения в окно с кнопкой OK:

AfxMessageBox(" Сообщение ");

или

AfxMessageBox(" Сообщение ",MB_OK);

2) Вывод сообщения в окно с кнопками OK и CANCEL:

AfxMessageBox(" Запустить? ",MB_OKCANCEL);

 

3) Добавление иконки слева от сообщения:

AfxMessageBox(" Ошибка отправки данных ", MB_RETRYCANCEL | MB_ICONSTOP );

 

4) Обработка возвращаемого значения функции:

if (AfxMessageBox(" Ошибка отправки данных ", MB_RETRYCANCEL)==IDCANCEL)

AfxMessageBox("нажата кнопка Cancel");

 else

     AfxMessageBox("нажата кнопка Retry");

 

2.2. Класс CListBox.

Данный класс предназначен для отображения текстовых строк в виде списка. Он позволяет добавлять текстовые строки в список и получать текст, содержащийся в каждой строке объекта класса CListBox. Ниже приведено описание некоторых методов класса CListBox.

1) Метод AddString() позволяет добавить одну строку в список. Синтаксис вызова данного метода следующий:

 

int AddString(LPCTSTR str);

где str – объект класса CString или массив типа char, содержащий текст, который будет занесен в добавляемую строку.

Возвращаемое значение: индекс добавленной строки в списке, начинающийся с нуля.

 

Пример.

// Добавление 10 строк в объект класса CListBox.

CString str;

for (int j = 0; j < 10; j++)

{ str.Format("item string %i", j);

m_myListBox.AddString(str);

}

 

2) Метод GetCount() определяет число строк в списке. Синтаксис вызова данного метода следующий:

int GetCount( );

 

Возвращаемое значение: количество элементов в списке.

 

Пример.

// Проверка, содержится ли в объекте класса CListBox 10 или более строк.

if (m_myListBox.GetCount() >= 10) оператор;

 

3) Метод GetText() получает одну строку из списка. Синтаксис вызова данного метода следующий:

 

int GetText(int Index,LPTSTR str );

 

где str – объект класса CString или массив типа char, предназначенный для получения текста из одной строки списка, содержащегося в объекте класса CListBox, Index – индекс строки списка.

 

Возвращаемое значение: длина полученной строки в символах.

 

Пример.

// Вывод всех строк из списка на экран в виде сообщений.

CString str;

for (i=0;i< m_myListBox.GetCount();i++)

     { m_myListBox.GetText(i,str);

     AfxMessageBox(str);

}

 

4) Метод ResetContent() удаляет все элементы из списка. Синтаксис вызова данного метода следующий:

 

void ResetContent( );

 

Пример.

// Удаление всех строк из списка.

m_myListBox.ResetContent();

 

Пример выполнения лабораторной работы.

Задание: разработать программу, которая:

· генерирует массив целых чисел, сохраняя его в элементе управления ListBox, размерность массива задает пользователь в элементе управления EditBox (от 1 до 100 элементов);

· осуществляет расчет суммы элементов и среднего арифметического массива, вывод суммы элементов осуществляет с помощью функции вывода сообщения AfxMessageBox(), а вывод среднего арифметического – в дополнительное окно.

 

1) В среде Microsoft Developer Studio (Visual C++)создаем проект на основе диалога. Для этого в пункте меню File->New выбираем подпункт Projects

  Далее выбираем тип приложения на основе диалога (Dialog based) и нажимаем на кнопку «Finish».

  После выполнения указанных действий в проекте автоматически будут созданы файлы в выбранной директории.

 

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

     Размещаем в окне приложения элемент управления EditBox для ввода количества элементов массива пользователем, элемент ListBox для вывода элементов массива, три кнопки. Первая кнопка – для вызова функции генерации массива и заполнения объекта класса CListBox. Вторая кнопка – для вывода суммы элементов с помощью функции вывода сообщения AfxMessageBox(). Третья кнопка – для вывода среднего арифметического элементов массива в дополнительное окно. Также добавляем подписи ко всем элементам управления с помощью элементов Static Text. Удаляем кнопку ОК. Модифицируем надписи на кнопках в пункте «Properties», вызываемом нажатием правой кнопки мыши на поле элемента управления. Полученный в результате перечисленных действий интерфейс пользователя представлен на рис. 1.

Рисунок 1 – Интерфейс приложения

 

3) Для отключения автоматической сортировки списка строк в элементе управления ListBox убираем галочку в поле Sort в пункте меню Properties, вызываемом нажатием правой кнопки мыши на поле элемента управления ListBox (рис. 2).

Рисунок 2 – Стили элемента управления ListBox

 

4) Добавляем в проект функции для созданных кнопок с помощью мастера Class Wizard, вкладка Message Maps (рис. 3).

Рисунок 3 – Создание заголовков функций для кнопок

 

5) Создаем переменные для элементов управления ListBox (рис. 4) и EditBox (рис. 5) с помощью мастера Class Wizard, вкладка Member Variables (рис 6). Назначаем ограничения для поля ввода данных пользователем с клавиатуры.

Рисунок 4 – Объявление переменной для элемента управления ListBox

 

Рисунок 5 – Объявление переменной для элемента управления EditBox

 

Рисунок 6 – Результат объявления переменных

 

 

6) Редактируем программный код функции генерации массива и заполнения списка в элементе ListBox, функция находится в файле с именем Имя_проектаDlg.cpp.

 

  Для возможности работы с функциями time() и rand(), srand() добавляем в этот же файл в самом верху директивы препроцессора include для подключения необходимых библиотек time.h и stdlib.h.

 

 

// lara4Dlg.cpp : implementation file

//

 

#include "stdafx.h"

#include "lara4.h"

#include "lara4Dlg.h"

#include <stdlib.h> // для функции работы с псевдослучайными числами

#include <time.h> //для работы со временем

 

#ifdef _DEBUG

#define new DEBUG_NEW

 

Проверяем работу созданной функции (рис. 7).

Рисунок 7 – Результат работы функции, вызываемой при нажатии на кнопку «Генерация»

 

 

7) Редактируем программный код функции для расчета суммы элементов массива, функция находится в файле с именем Имя_проектаDlg.cpp.

Проверяем работу созданной функции (рис. 8).

Рисунок 8 – Результат работы функции, вызываемой при нажатии на кнопку «Сумма»

 

8) Для открытия дополнительного окна при выполнении третьей функции необходимо выполнить следующие действия:

     8.1) Создаем второй диалог, который будет вызываться по нажатию третьей кнопки выбирая пункты меню InsertResourceDialog (рис. 9).

Рисунок 9 – Добавление диалога

 

  8.2) Добавляем элементы управления в новый диалог: EditBox для вывода среднего арифметического элементов массива, подпись к нему, удаляем кнопку Cancel (рис. 10).

 

Рисунок 10 – Интерфейс нового диалога

 

     8.3) Вызываем мастер Class Wizard для добавления переменной для нового элемента EditBox. Появляется сообщение о необходимости создания нового класса для этого диалогового окна (рис. 11).

Рисунок 11 – Сообщение о необходимости создания класса для нового диалога

 

     Нажимаем кнопку ОК. В появившемся окне в верхнем поле задаем имя нового класса, например, CSecond (рис. 12). Опять нажимаем кнопку ОК.

 

 

Рисунок 12 – Задание имени класса дополнительного окна

 

  8.4) Далее нужно создать переменную для элемента EditBox, служащую для вывода среднего арифметического элементов массива, во вкладке Member Variables  мастера Class Wizard. Тип переменной задаем вещественный, т.к. результат будет получен с помощью деления, следовательно, он может быть дробным (рис. 13).

Рисунок 13 – Создание переменной во вкладке Member Variables  

         

     8.5) Для того, чтобы пользователь не имел возможности вводить данные с клавиатуры, изменяем стили (Read-only) элемента EditBox, служащего для вывода среднего арифметического, как показано на рис. 14.

 

Рисунок 14 – Изменение стилей   элемента EditBox

 

     8.6)  Объявляем в классе основного диалога объект дополнительного диалога.

Для этого в файл Имя_проектаDlg.h (в данном примере lara4Dlg.h) добавляем строку:

 

CSecond Dlg1; // объявление объекта второго диалога

 

в раздел открытых элементов класса public (рис. 15).

         

8.7)  Присоединяем заголовочный файл класса дополнительного диалога в файлы Имя_проекта.h и Имя_проектаDlg.h (см. расположенный выше программный код) с помощью директивы препроцессора include:

 

#include "Second.h"

 

Эту строку необходимо разместить в самом начале файлов.

 

8.8)  Присоединяем ресурсы к дочернему диалогу с помощью директивы препроцессора (рис. 15) в файле Second.h (имя файла соответствует имени нового класса, созданного для дополнительного диалога):

 

#include "resource.h"

.

 

Рисунок 15 – Добавление ресурсов в класс дополнительного диалога

 

9) Редактируем программный код функции для расчета среднего арифметического элементов массива, функция находится в файле с именем Имя_проектаDlg.cpp.

     Метод DoModal() отображает на экране дополнительное окно для вывода среднего арифметического элементов массива.

  Проверяем работу созданной функции (рис. 16).

Рисунок 16 – Результаты работы функции, вызываемой по нажатию кнопки «Среднее арифметическое»

 

Задание.

Разработать программу, которая:

· генерирует массив целых чисел, сохраняя его в элементе управления ListBox, размерность массива задает пользователь в элементе управления EditBox (от одного до 100 элементов);

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

 

Варианты заданий.

1) Определить количество отрицательных элементов и максимальный элемент массива.

2) Найти количество нечетных элементов массива и сумму положительных элементов массива.

3) Найти среднее арифметическое отрицательных элементов массива  и количество четных элементов массива.

4) Найти сумму элементов, значения которых принадлежат диапазону [50,100] и количество нечетных элементов массива.

5) Найти минимальный элемент массива и сумму элементов, значения которых принадлежат диапазону [50,100].

6) Найти количество нулевых элементов массива и сумму элементов, значения которых кратны 7.

7) Найти среднее арифметическое четных элементов массива и количество положительных элементов массива.

 

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

1) Функция AfxMessageBox().

2) Класс CListBox и его элементы.

3) Классы. Элементы классов. Атрибуты доступа.

4) Связывание двух диалогов в проекте.

5) Функции генерации псевдослучайных чисел.

6) Определите отличия использования функции AfxMessageBox() и дополнительного окна для вывода данных.


Дата добавления: 2018-04-05; просмотров: 765; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!