|
Проект Calc.
Создайте проект MFC Application ( Приложение MFC ) в Visual C++ и назовите его Calc. В окне MFC Application Wizard ( Мастер приложенийMFC ) измените следующие параметры:
в разделе Application Type ( Тип приложения ) - установите тип приложения Dialog based ( На основе диалоговых окон ) и уберите флажок Использовать библиотеки с поддержкой Юникода. Щелкните по кнопке Finish (Готово).
Создайте такой калькулятор:
Кнопкам с цифрами 0, 1, 2, …9 присвойте идентификаторы: IDC_BUTTON0, IDC_BUTTON1, IDC_BUTTON2, …, IDC_BUTTON9. Для остальных кнопок выберем идентификаторы:
- + - IDC_BUTTON_PLUS;
- - - IDC_BUTTON_MINUS;
- = - IDC_BUTTON_ENTER;
- C - IDC_BUTTON_CLEAR;
-. - IDC_BUTTON_COMMA
Добавьте переменные в класс CCalcDlg:
private:
double accum; // аккумулятор
char oper; //операции +, -, =
BOOL f; // если f = true, то ждём первое число, а если f = false то ждём остальные числа
С окном редактирования калькулятора (Edit Control) свяжите переменную m_Number класса CString. Для переменной m_Number установите Category (Категория): Value.
Инициализацию переменных поместите в конструктор класса CCalcDlg:
CCalcDlg::CCalcDlg(CWnd* pParent /*=NULL*/)
CCalcDlg::CDialogEx(CCalcDlg::IDD, pParent)
{
m_Number = _T("0");
f = true;
oper = '=';
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
Создайте обработчики сообщений BN_CLICKED для кнопок:
void CCalcDlg:: OnBnClickedButton9()
{
if (f)
{
m_Number = '9';
f=false;
}
else m_Number += '9';
UpdateData(FALSE);
}
void CCalcDlg:: OnBnClickedButtonMinus()
{
//Надо запомнить предыдущую операцию,
// вывести результат на индикатор,
// запомнить предыдущую операцию и
// установить режим ожидания первой
// цифры нового числа
if (f) { oper = '-'; }
else
{
DoOper(); // выполнить предыдущую операцию
oper = '-';// запомнить текущую операцию
f = true;// ждём первую цифру нового числа
}
}
void CCalcDlg::DoOper()
{
// accum содержит результат предыдущей операции,
// oper - код операции, который надо выполнить.
// Операнд находится на индикаторе.
double numb;
numb = atof(m_Number); // Преобразовываем строку в вещественное число
switch(oper)
{
case '+': accum += numb; break;
case '-': accum -= numb; break;
case '=': accum = numb; break;
}
m_Number.Format("%f", accum); // Вещественное число accum преобразуется в строку и заносится в m_Number.
UpdateData(FALSE);
}
void CCalcDlg:: OnBnClickedButtonЕnter()
{
if (f) { oper = '='; }
else
{
DoOper();
Oper = '=';
f = true;
}
}
void CCalcDlg:: OnBnClickedButtonСlear()
{
m_Number = '0';
accum = 0;
oper = '=';
f = TRUE;
UpdateData(FALSE);
}
void CCalcDlg::OnBnClickedButtonComma()
{
UpdateData(TRUE); //Пересылка из элементов управления в переменные, которые связанны с этими элементами управления
if (m_Number == '0') m_Number = "0.";
if (!strchr(m_Number,'.')) m_Number += '.';//Если нет десятичной точки, то добавляем точку
f = FALSE;
UpdateData(FALSE); //Пересылка из переменных в элементы управления, которые связанны с этими переменными
}
Самостоятельно. Добавить две кнопеи для умножения и деления.
Дата добавления: 2015-10-21; просмотров: 51 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |
Вычисления с комплексными числами на микрокалькуляторах | | | Калькулятор KK838B |