Escribir una calculadora con interfaz gráfica en C++
Una calculadora muy sencilla que contiene varios operadores.
//Archivo de encabezado MyDlg
// Cuadro de diálogo CMyDlg
#include "afxwin.h"
clase CMyDlg: CDialog público
{
DECLARE_DYNAMIC(CMyDlg)
public:
CMyDlg(CWnd* pParent = NULL // Constructor estándar ); p>
virtual ~CMyDlg();
BOOL PreTranslateMessage(MSG* pMsg);
//Datos de diálogo
enum { IDD = IDD_LOGIN_DIALOG } ;
protegido:
virtual void DoDataExchange(CDataExchange* pDX); // soporte DDX/DDV
DECLARE_MESSAGE_MAP()
público; :
afx_msg void OnBnClickedButton1();
public:
void Calc1();//Presiona la tecla numérica
void Calc2 ();//Presiona la tecla de símbolo
protected:
char m_sign;//Registra qué operador se presiona
int m_numb;/ /Registra qué operador numérico se presionó la tecla
bool point;//Si se presionó el punto decimal
bool es igual;//Si se presionó el signo igual
bool num; /Si se presiona la tecla numérica
bool funs; //Si se presiona la tecla de función
int nums;//Valor de operación después del punto decimal
double number1 ;//El valor después de presionar el operador
double number2;//El valor antes de que no se presione el operador
int m_edit;//Registra el valor de lo presionado tecla numérica
char c_edit;//Registra el operador presionado
CString m_EDIT1;
CString n_EDIT1;
protegido:
afx_msg void OnClose();
público:
afx_msg void OnBnClickedButton17();
afx_msg void OnBnClickedButton18();
afx_msg void OnBnClickedButton21();
afx_msg void OnBnClickedButton2();
afx_msg void OnBnClickedButton3();
afx_msg void OnBnClickedButton4();
afx_msg void OnBnClickedButton5();
afx_msg void OnBnClickedButton6();
afx_msg void OnBnClickedButton7();
afx_msg void OnBnClickedButton8();
p>afx_msg void OnBnClickedButton9();
afx_msg void OnBnClickedButton10
();
afx_msg void OnBnClickedButton12();
afx_msg void OnBnClickedButton13();
afx_msg void OnBnClickedButton14();
afx_msg void OnBnClickedButton15();
afx_msg void OnBnClickedButton19();
afx_msg void OnBnClickedButton11();
afx_msg void OnBnClickedButton16();
afx_msg void OnBnClickedButton20();
afx_msg void OnBnClickedButton22();
afx_msg void OnBnClickedButton25();
afx_msg void OnBnClickedButton24();
afx_msg void OnBnClickedButton23();
afx_msg void OnBnClickedButton26();
CEdit m_EDIT;
// afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd * pWnd, UINT nCtlColor);
};
#pragma once
// MyDlg.cpp: archivo de implementación
#include "stdafx.h"
#include "MyDlg.h"
#include "math.h"
// Cuadro de diálogo CMyDlg
IMPLEMENT_DYNAMIC(CMyDlg, CDialog)
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
número1 = 0;
número2 = 0;
núms =-1;
núm = falso;
punto = falso;
igual = falso;
funs = falso;
m_sign = '=';
}
CMyDlg::~CMyDlg()
{
}
void CMyDlg::DoDataExchange(CDataExchange* pDX )
{
CDialog::DoDataExchange(pDX);
/*DDX_Control(pDX, IDC_USERNAME, m_EDIT);*/
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
/*ON_BN_CLICKED(IDC_BUTTON1, &CMyDlg::OnBnClickedButton1)*/
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON17, &CMyDlg::OnBnClickedButton17)
ON_B
N_CLICKED(IDC_BUTTON18, &CMyDlg::OnBnClickedButton18)
ON_BN_CLICKED(IDC_BUTTON21, &CMyDlg::OnBnClickedButton21)
ON_BN_CLICKED(IDC_BUTTON2, &CMyDlg::OnBnClickedButton2)
ON _BN_CLICKED( IDC_BUTTON3, &CMyDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CMyDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CMyDlg::OnBnClickedButton5)
ON_BN_CLICKED( BOTÓN6, &CMyDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CMyDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CMyDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, Dlg: :OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CMyDlg::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON12, &CMyDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CM yDl g:: OnBnClickedButton13 )
ON_BN_CLICKED(IDC_BUTTON14, &CMyDlg::OnBnClickedButton14)
ON_BN_CLICKED(IDC_BUTTON15, &CMyDlg::OnBnClickedButton15)
ON_BN_CLICKED(IDC_BUTTON19, &CMyD lg::OnBnC hizo clic en el botón 19 )
ON_BN_CLICKED(IDC_BUTTON11, &CMyDlg::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON16, &CMyDlg::OnBnClickedButton16)
ON_BN_CLICKED(IDC_BUTTON20, &CMyDlg::OnBnClick edBotón20)
ON_BN_CLICKED(IDC_BUTTON22, &CMyDlg::OnBnClickedButton22)
ON_BN_CLICKED(IDC_BUTTON25, &CMyDlg::OnBnClickedButton25)
ON_BN_CLICKED(IDC_BUTTON24, &CMyDlg::OnBnClicked Pero ton24)
ON_BN_CLICKED(IDC_BUTTON
23, &CMyDlg::OnBnClickedButton23)
ON_BN_CLICKED(IDC_BUTTON26, &CMyDlg::OnBnClickedButton26)
// ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
// Controlador de mensajes CMyDlg
// void CMyDlg::OnBnClickedButton1()
// {
// // TODO: Agregar aquí Notificación de control código del controlador
// }
void CMyDlg::OnBnClickedButton17()
{
// TODO: aquí Agregar controlador de notificación de control código
si (es igual a)
{
número1 = sqrt(número1);
m_EDIT1.Format( "%lg", número1);
}
else
{
número2 = sqrt(número2);
m_EDIT1. Formato("%lg",número2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton18()
{
// TODO: Agregue el código del controlador de notificación de control aquí
if (igual a)
{
if (número1! =0)
{
número1 = 1/número1;
m_EDIT1.Format("%lg",número1
); }
else
{
m_EDIT1 = "El divisor no puede ser 0";
}
}
p>
}
si no
{
si (¡número2!=0)
{
número2 = 1/número2;
m_EDIT1.Format("%lg",número2);
}
else
{
m_EDIT1 = "El divisor no puede ser 0";
}
}
SetDlgItemText(IDC_EDIT1 ,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton21()
{
// TODO: en Esto agrega el código del controlador de notificaciones de control
m_numb = 1;
Calc1();
}
void CMyDlg::OnBnClickedButton2( )
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 2;
Calc1();
}
void CMyDlg::OnBnClickedButton3()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 3;
Calc1();
} p>
void CMyDlg::OnBnClickedButton4()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 4; p>
Calc1();
}
void CMyDlg::OnBnClickedButton5()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 5;
Calc1();
}
void CMyDlg::OnBnClickedButton6()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 6;
Calc1();
}
void CMyDlg::OnBnClickedButton7()
{
// TODO: Agregar controles aquí Código del controlador de notificaciones
m_numb = 7;
Calc1();
}
void CMyDlg::OnBnClickedButton8()
p>{ p>
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 8;
Calc1();
}
void CMyDlg::OnBnClickedButton9()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
m_numb = 9;
Calc1();
}
void CMyDlg::OnBnClickedButton10()
{ p>
// TODO: Agregar notificación de control código del controlador aquí
m_numb = 0;
Calc1();
}
void CMyDlg::OnBnClickedButton12()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
Calc2();
m_sign = '+';
}
void CMyDlg::OnBnClickedButton13()
{
/ / TODO: Agregue el código del controlador de notificaciones de control aquí
Calc2();
m_sign = '-';
}
void CMyDlg::OnBnClickedButton14()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
Calc2();
m_sign = '*';
}
void CMyDlg::OnBnClickedButton15()
{
// TODO: en Esto agrega el código del controlador de notificaciones de control
Calc2();
m_sign = '/';
}
void CMyDlg:: OnBnClickedButton19()
{
// TODO : Agregue el código del controlador de notificación de control aquí
número1 = 0;
n
número2 = 0;
núms =-1;
núm = falso;
punto = falso;
es igual a = falso;
funs = false;
m_sign = '=';
m_EDIT1.Format("%lg",number1);
SetDlgItemText (IDC_EDIT1,m_EDIT1);
}
void CMyDlg::OnBnClickedButton11()
{
// TODO: Agregar aquí Control código del controlador de notificaciones
Calc2();
m_sign = '=';
equals = true;
} p>
void CMyDlg::OnBnClickedButton16()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
if (es igual a)
{
if (punto == verdadero)
{
m_EDIT1.Format("%lg",número1);
}
else
{
m_EDIT1.Format("%lg",número1);
m_EDIT1 += ". ";
}
}
si no
{
si (punto == verdadero) p>
{
m_EDIT1.Format("%lg",número2);
}
else
{
m_EDIT1.Format("%lg",número2);
m_EDIT1 += ".";
}
} p>
punto = verdadero;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::Calc1()//Haga clic en la tecla numérica
{
cambiar(m_numb)
{
caso 0:
m_edit = 0;
romper;
caso 1:
m_edit = 1;
romper;
caso 2:
m_edit = 2;
descanso;
caso 3:
m_edit = 3 ;
descanso;
caso 4:
m_edit = 4;
descanso;
caso 5:
m_edit = 5;
romper;
caso 6:
m_edit = 6;
romper;
caso 7:
m_edit = 7;
descanso;
caso 8:
m_edit = 8 ;
romper;
caso 9:
m_edit = 9;
romper;
} p>
si (es igual a)
{
es igual a falso
;
núm = false;
}
si (punto)
{
número2 = número2+ m_edit *pow((double)10,(double)(nums--));
if (m_edit == 0)
{
if (nums == -2)
{
m_EDIT1.Format("%lg",número2);
m_EDIT1 += ".0";
p>}
else
{
m_EDIT1.Format("%lg",número2);
m_EDIT1 + = "0";
}
}
else
m_EDIT1.Format("%lg",número2);< / p>
}
else
{
número2 = número2 * 10 + m_edit;
m_EDIT1.Format(" % lg",número2);
}
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}< / p>
void CMyDlg::Calc2()//Operador de clic
{
if (!equals)
{
if (num)//Después de presionar el operador, si se presionó la tecla numérica
{
interruptor (m_sign)
{ p>
caso '+':
número1 = número1+número2;
descanso;
caso '-':
número1 = número1-número2;
descanso;
case '*':
número1 = número1*número2;
descanso p>
caso '/':
si (número2 != 0)
{
número1 = número1/número2;
}
romper;
}
}
si no
{
número1 = número2;
núm = verdadero;
}
}
else
{ p>
equals = false;
}
if (m_sign == '/'&& number2 == 0)
m_EDIT1 = " El divisor no puede ser cero";
else
m_EDIT1.Format("%lg",número1);
número2 = 0;
punto = false;
nums = -1;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton20()//Tecla de retroceso
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
si (!(equ
als||funs))
{
m_EDIT1.Format("%lg",number2);
int n = m_EDIT1.GetLength()-1 ;
CString c1 = m_EDIT1.Left(n);
if (n)
SetDlgItemText(IDC_EDIT1,c1);
else
SetDlgItemText(IDC_EDIT1,"0");
número2 = atof(c1);
}
UpdateData(FALSE) ;
}
void CMyDlg::OnBnClickedButton22()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí p>
si (es igual a)
{
número1 = sin(número1);
m_EDIT1.Format("%lg",número1);
}
else
{
número2 = sin(número2);
m_EDIT1.Format (" %lg",número2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton25()
{
// TODO: agregue aquí el código del controlador de notificaciones de control
if (equals)
{
número1 = exp (número1);
m_EDIT1.Format("%lg",número1);
}
else
{
número2 = exp(número2);
m_EDIT1.Format("%lg",número2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/ p>
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton24()
{
// TODO: Agregue el código del controlador de notificaciones de control aquí
if (es igual a)
{
número1 = log(número1);
m_EDIT1.Format("%lg",número1);
}
else
{
número2 = log(número2);
m_EDIT1.Format("%lg",número2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
>UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton23()
{
// TODO: Agregar aquí Control código del controlador de notificaciones
if (igual a)
{
número1 = cos(número1);
m_EDIT1.Format(" %lg ",número1);
}
else
{
número2 = cos(número2);
m_EDIT1.Format("%lg",número2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true ;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton26()
{
// TODO: Agregue el código del controlador de notificación de control aquí
if (es igual a)
{
número1 = pow(número1,2);
m_EDIT1.Format("%lg",número1);
}
else
{
número2 = pow(número2,2);
m_EDIT1.Format("%lg",número2);
/*IDC_EDIT1. ;*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE); p>
}
void CMyDlg::OnClose()
{
if ( MessageBox(_T("¿Salir del programa? "),_T ("Preguntar"),MB_YESNO|MB_ICONQUESTION) == IDYES )
{
CDialog::OnClose();
} p>
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN) p>
{
if(pMsg->wParam == VK_ESCAPE)
{
devuelve verdadero
}
if(pMsg->wParam == VK_RETURN)
{
devuelve verdadero
}
}
volver CDialog::PreTranslateMessage(pMsg);
}