Visual C++. Использование MFC-приложений

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

Постановка задачи:

Написать программу решения квадратного или биквадратного уравнения.

Решение задачи:

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

  • три метки (Static Text) для вывода заголовков полей;
  • три поля редактирования (Edit Control);
  • один элемент Group Box;
  • две радиокнопки (Radio Button) для выбора типа уравнения;
  • флажок (Check Box), определяющий как будет происходить вывод;
  • метку для вывода результатов;
  • кнопки для решения уравнения и выхода из программы;

Class MFC - Kvodo.ru

Определим переменные для полей редактирования, радиокнопок и флажка. Щелкаем правой кнопкой мыши по первому полю ввода, выбираем «Добавить переменную…». Заполняем окно так, как это сделано на скриншоте.

Мастер MFC

Аналогично добавляем переменные для двух оставшихся полей (m_EditB, m_EditC).

Следующий шаг — определение переменных для радиокнопок. Заходим в свойства элемента Group Box и устанавливаем значение «Группа»->True. То же самое делаем и для обоих радиокнопок, после чего определяем имя и тип переменных для них (рис. ниже).

Добавление переменной члена

Добавление переменной члена

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

[important]При работе с группой радиокнопок нужно установить у них свойство Group в True, после чего назначить переменные для всех кнопок, а затем установить у всех кроме первой значение False[/important]

Определим переменную, которая будет отвечать за значок, ее тип BOOL.

Добавление переменной члена Visual C++

Изменим значение ID четвертой метки (расположена над кнопкой «Решить») на IDC_STATIC1. Определим переменную, отвечающую за работу с этой меткой (рис. ниже).

Добавление переменной члена Visual Studio

Переопределяем ID кнопки «Решить», впишем например ID_Solve.

Щелкаем два раза левой кнопкой мыши по кнопке «Решить», и попадаем в окно с кодом. Тут подключаем библиотеку math.h, после чего вводим в функцию OnBnClickedSolve() следующий текст.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
void CKvodoDlg::OnBnClickedSolve()
{
char S[80];
FILE *f;
double a, b, c, d, x1, x2, y1, y2, y3, y4;
UpdateData(TRUE);
//считываем значения a,b,c из полей редактирования
a=m_EditA;
b=m_EditB;
c=m_EditC;
//вычисляем дискриминант
d=b*b4*a*c;
//Функция (метод) GetCheck() проверяет, выбрана ли радиокнопка,
//в данном случае выбрана m_Kvadrat
if (m_Kvadrat.GetCheck())
if (d<0)
sprintf(S, «Корней нет»);
else
{
x1=(b+sqrt(d))/2/a;
x2=(bsqrt(d))/(2*a);
sprintf(S, «x1=%g\tx2=%g», x1, x2);
}
else
{
if (d<0)
sprintf(S, «Корней нет»);
else
{
x1=(b+sqrt(d))/2/a;
x2=(bsqrt(d))/(2*a);
if ((x1<0) && (x2<0))
sprintf(S, «Корней нет»);
else if ((x1>=0) && (x2>=0))
{
y1=sqrt(x1);
y2=y1;
y3=sqrt(x2);
y4=y3;
sprintf(S, «четыре корня: y1=%f\ty2=%f\ty3=%f\ty4=%f»,y1,y2,y3,y4);
}
else if (x1>=0)
{
y1=sqrt(x1);
y2=y1;
sprintf(S, «два корня: y1=%f\ty2=%f», y1,y2);
}
else
{
y1=sqrt(x2);
y2=y1;
sprintf(S, «два корня: y1=%f\ty2=%f», y1,y2);
}
}
}
//в зависимости от флажка message
if (m_message)
{
f=fopen(«Result.txt», «w»);
fprintf(f, S);
fclose(f);
}
else
{
m_Result=S;
UpdateData(FALSE);
}}

Ну вот, у нас готова рабочая программа! И хотелось бы заметить, что последняя метка, через которую выводиться результат должна быть достаточного размера для того, чтобы показать всю строку ответа.

Часто бывает, что необходимо добавить начальные значения в поля ввода, для этого в том файле, в который мы только что вписали код, есть функция OnInitDialog(). Добавьте этот код перед значением return TRUE:

1
2
3
4
m_EditA=2;
m_EditB=3;
m_EditC=1;
UpdateData(FALSE);

Файлы исходного кода созданной нами программы доступны для скачивания по этой ссылке.

Рейтинг
( Пока оценок нет )
Загрузка ...