Visual C++. Лабораторная работа № 6.
Использование ползунка и обработка сообщений
- Цель работы:
- Изучить порядок использования ползунка как элемента графического интерфейса.
Научиться обрабатывать сообщения, получаемые программой. Получить практические
навыки в написании программ, обрабатывающих сообщения среды Windows.
1. Создайте приложение с помощью MFС AppWizard (exe) с диалоговым окном в
качестве главного. Использовать решенную в лабораторных работах № 4 и № 5 задачу,
добавив в нее возможность изменять массу перевозимого груза с помощью элемента
графического интерфейса Slider (Ползунок)
2. Усовершенствовать полученную программу, добавив к методу, переделяющему
положение движка вычисление оптимального варианта использования автомобиля для
перевозки груза заданной движком массы
3. Разработать тестовый пример (т.е. задать несколько вариантов марок
автомобилей разной грузоподъемности, с разным расходом бензина и разной его
стоимостью). Данные тестового примера вводить из файла, как делалось в работе № 5.
Исследовать с помощью элемента графического интерфейса Slider, как изменяется
выбор оптимального варианта при изменении веса перевозимого груза
Используем слегка измененные исходные коды из предыдущих работ, поэтому подробно
останавливаться на способах получения/обработки данных не будем. Рассмотрим только
работу с ползунком и саму программу. У нас есть кнопка ОТКРЫТЬ, с помощью которой
выбираем из стандартного диалога один из файлов, созданных нами в лабораторной
работе № 5. Данные из файла загружаются в массив, а названия автомобилей - в
список. В диалоге также имеется редактор m_edOptimum. При передвижении ползунка
будет изменяться масса перевозимого груза и вычисляться стоимость поездки. В
зависимости от результатов вычислений в редакторе m_edOptimum будет отображаться
название автомобиля, наиболее подходящего для поездки.
Добавляем переменную для ползунка. При этом нужно на вкладке Member Variables
щелкнуть кнопку Add Variable…, задать имя переменной (m_slider) и выбрать
категорию Control. Затем добавим событие NM_CUSTOMDROW и назовем обработчик
именем OnReplace. Код будет таким:
void CLab_06Dlg::OnReplace(NMHDR* pNMHDR, LRESULT* pResult)
{
m_edWeight = m_slider.GetPos() * 50; //Получить массу груза
int Num, j = 0;
float n, z;
float m[10];
//---Вычислить кол-во поездок и их стоимость-----------------------
for (int i = 0; i < car[0].NumCars; i++)
{
Num = 1;
if (car[i].Tonnage > 0) //Если грузоподъемность больше нуля
{
Num = int(m_edWeight / car[i].Tonnage);
z = float(m_edWeight) / float(car[i].Tonnage);
if (Num < z) Num = Num++;
}
m[i] = (car[i].Way/100)*car[i].Litres*car[i].Price*Num;
}
n = m[0];
for (i = 0; i < car[0].NumCars; i++) //Найти наименьшую стоимость
{
m_edResult = m[i];
if (m_edResult < n)
{
j = i;
n = m_edResult;
}
}
m_edResult = m[j];
m_edOptimum = car[j].Cars; //Получить авт-ль, соотв. наим. стоим.
UpdateData(0);
*pResult = 0;
}
Результат работы программы: