Лабораторная работа №13. Элементы управления "Шкала индикации" (Progress) и "Маркер" (Slider). Модальные диалоговые окна - Технология разработки программного обеспечения систем управления

Цель Работы - изучить принципы работы элементов управления Progress и Slider. Получить навыки по самостоятельному созданию модальных диалоговых окон.

- Теоретические сведения

Элементы Управления Progress И Slider

Для отображения завершенности какого либо длительного процесса в Windows существует элемент Progress(шкала индикации). Этот элемент управления используется для наглядного представления некоторой изменяемой характеристики. Progress представляет собой прямоугольник, который заполняется системным цветом в направлении слева направо по мере выполнения некоторой операции.

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

Int SetPos( int NPos );

Здесь nPos - это новая позиция линейного индикатора, функция возвращает его старую позицию. По умолчанию верхний предел значений равен 100 (соответствует полностью заполненному индикатору), а нижний 0 (соответствует полностью не заполненному индикатору).

При необходимости для изменения пределов можно воспользоваться функцией:

Void SetRange( short nLower, short nUpper );

Здесь nLower - значение нижнего предела,

NUpper - новое значение верхнего предела.

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

В MFC элементу линейного регулятора соответствует класс CSliderCtrl. Как и в классе CProgressCtrl для установки нового положения бегунка в классе CSiderCtrl есть функция SetPos, для установки диапазона допустимых значений служит функция SetRange. Когда требуется определить положение бегунка, вызывают функцию-член класса CSiderCtrl:

Int GetPos( ) const;

Кроме того, часто возникает необходимость запрограммировать обработчик сообщения WM_HSCROLL. Как правило, обработка данного сообщения сводится в определении нового положения бегунка (метод GetPos) и отображении его значения в другом элементе управления, например в диалоговой панели.

Модальные Диалоговые Окна

Существует два типа диалоговых окон модальные и немодальные.

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

Для создания модального диалогового сначала создают ресурс диалогового окна, и с помощью ClassWizard создают новый класс диалогового окна, порожденного от класса CDialog. Для вызова диалогового окна используют функцию DoModal( );. Для возвращения из модального диалогового окна значений в программу можно в классе диалогового окна объявить поля или функции.

Пример Реализации Программы

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

Где a, b - границы интегрирования;

N - число разбиений;

H - шаг,

H=(b-a)/N, .

Число разбиений должно задаваться с помощью элемента Slider, а скорость вычисления интеграла проконтролируем элементом Progress. Границы интегрирования необходимо задавать в модальном диалоговом окне.

Для решения задачи необходимо создать проект на основе диалогового окна (имя: CLabProgressBar), на втором шаге отключив опцию About Box. Используя панель Controls, нанести на заготовку формы - 1 элемент типа Edit Box, 2 - Static Text 2 - Button, 1 - Slider, 1- Progress. Название кнопки "OK" переименовать в "Выход" (рисунок 1).

результат работы программы

Рисунок 1. - Результат работы программы

С помощью мастера ClassWizard связать компонент EditBox с переменной m_res типа double, компонент Progress с переменной m_progress, выбрав ее тип как CProgressCtrl, а элемент управления Slider с переменной m_slider, выбрав ее тип как CSliderCtrl.

Для создания модального диалогового окна в закладке ResourseView окна Workspase во всплывающем меню требуется выбрать пункт INsert, после чего появиться диалог Insert Resource, изображенный на рисунке 2.

панель insert resource

Рисунок 2. - Панель Insert Resource

В диалоге Insert Resource следует выбрать пункт Dialog и нажать кнопку NEw, после чего появится заготовка нового окна. Создать окно, аналогичное снимку на рисунке 3.

окно для ввода данных

Рисунок 3. - Окно для ввода данных

После создания ресурса диалогового окна следует создать класс для работы с ним. Для этого в основном меню надо выбрать пункт INsert и далее NEw Class, после чего появиться диалог New Class (рисунок 4). В поле Name требуется ввести имя класса, например CMyDialog. В выпадающем списке BAse Class требуется выбрать в качестве базового класса CDialog. В списке Dialog ID должен стоять идентификатор созданного ранее диалогового окна, по умолчанию для первого окна это значение IDD_DIALOG1.

панель диалога new class

Рисунок 4. - Панель диалога New Class

После создания класса диалогового окна с помощью мастера Class Wizard связать поля ввода с переменными m_a и m_b типа double. Для создания экземпляра класса диалогового окна, объявить поле в классе главного окна.

Далее сделать необходимые добавления в тексте файлов проекта.

Ниже приведен фрагмент заголовочного фйла класса главного окна с необходимыми добавками.

// CLabProgressBarDlg dialog

#include "MyDialog. h" //подключили заголовочный файл класса модального //диалога.

Class CLabProgressBarDlg : public CDialog

{// Construction

Public:CLabProgressBarDlg(CWnd* pParent = NULL); // standard constructor

CMyDialog d; //объявили переменную класса модального диалога.

// Dialog Data

//{{AFX_DATA(CLabProgressBarDlg)

Далее в основной файл ClabProgressBarDlg. cpp в конце метода:

BOOL CLabProgressBarDlg::OnInitDialog():

// TODO: Add extra initialization here

M_slider. SetRange(100,1000000);

// устанавливаем диапазон в элементе Slider

M_slider. SetPos(50000);

//устанавливаем положение ползунка

Return TRUE; // return TRUE unless you set the focus to a control

}

И наконец тексты щелчков на кнопках:

Void CLabProgressBarDlg::OnButton1()

{

//обработчик кнопки Граничные условия.

D. DoModal(); //вызов модального окна

}void CLabProgressBarDlg::OnButton2()

{

//обработчик кнопки Пуск.

CWaitCursor w; //класс для установки курсора - часы.

Double s=0;

Double x=d. m_a; //считывание из диалога нач. значения.

Double h=(d. m_b-x)/m_slider. GetPos(); //вычисление h=(b-a)/N

Int i=0;

While(x<d. m_b)

{

Double f=x*x; //числение квадрата икса

S+=f*h; // вычисление суммы

X+=h;

M_progress. SetPos(100*i++/m_slider. GetPos());

//установка положения в полосы в Progress

}

M_res=s;

UpdateData(0);

}

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

Проверьте правильность выражений, вычислив интеграл:

    1. 6. 2. 7. 3. 8. 4. 9. 5. 10. - Контрольные вопросы 1. Опишите принципы работы элементов управления Progress и Slider. 2. Назовите свойства модального и немодального диалоговых окон. 3. Опишите процесс создания модального диалогового окна.

Похожие статьи




Лабораторная работа №13. Элементы управления "Шкала индикации" (Progress) и "Маркер" (Slider). Модальные диалоговые окна - Технология разработки программного обеспечения систем управления

Предыдущая | Следующая