用C++写一个有图形界面的计算器,用VC++6.0 MFC只用实现加减乘除就行

如题所述

第1个回答  推荐于2016-07-16
很简单的,包含各种运算符的计算器。

//MyDlg的头文件
// CMyDlg 对话框
#include "afxwin.h"

class CMyDlg : public CDialog
{
DECLARE_DYNAMIC(CMyDlg)

public:
CMyDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~CMyDlg();
BOOL PreTranslateMessage(MSG* pMsg);

// 对话框数据
enum { IDD = IDD_LOGIN_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
public:
void Calc1();//按下数字键
void Calc2();//按下符号键
protected:
char m_sign;//记录按下哪个运算符
int m_numb;//记录按了哪个数字键
bool point;//是否按下小数点
bool equals;//是否按下等号
bool num; //是否按下数字键
bool funs;//是否按下功能键
int nums;//运算小数点之后的值
double number1;//按下运算符之后的数值
double number2;//没按运算符之前的数值
int m_edit;//记录按下的数字键的数值
char c_edit;//记录按下的运算符
CString m_EDIT1;
CString n_EDIT1;
protected:
afx_msg void OnClose();

public:
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();
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 : 实现文件
#include "stdafx.h"
#include "MyDlg.h"
#include "math.h"

// CMyDlg 对话框
IMPLEMENT_DYNAMIC(CMyDlg, CDialog)

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
number1 = 0;
number2 = 0;
nums =-1;
num = false;
point = false;
equals = false;
funs = false;
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_BN_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(IDC_BUTTON6, &CMyDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CMyDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CMyDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CMyDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CMyDlg::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON12, &CMyDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CMyDlg::OnBnClickedButton13)
ON_BN_CLICKED(IDC_BUTTON14, &CMyDlg::OnBnClickedButton14)
ON_BN_CLICKED(IDC_BUTTON15, &CMyDlg::OnBnClickedButton15)
ON_BN_CLICKED(IDC_BUTTON19, &CMyDlg::OnBnClickedButton19)
ON_BN_CLICKED(IDC_BUTTON11, &CMyDlg::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON16, &CMyDlg::OnBnClickedButton16)
ON_BN_CLICKED(IDC_BUTTON20, &CMyDlg::OnBnClickedButton20)
ON_BN_CLICKED(IDC_BUTTON22, &CMyDlg::OnBnClickedButton22)
ON_BN_CLICKED(IDC_BUTTON25, &CMyDlg::OnBnClickedButton25)
ON_BN_CLICKED(IDC_BUTTON24, &CMyDlg::OnBnClickedButton24)
ON_BN_CLICKED(IDC_BUTTON23, &CMyDlg::OnBnClickedButton23)
ON_BN_CLICKED(IDC_BUTTON26, &CMyDlg::OnBnClickedButton26)
// ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

// CMyDlg 消息处理程序

// void CMyDlg::OnBnClickedButton1()
// {
// // TODO: 在此添加控件通知处理程序代码
// }

void CMyDlg::OnBnClickedButton17()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
number1 = sqrt(number1);
m_EDIT1.Format("%lg",number1);

}
else
{
number2 = sqrt(number2);
m_EDIT1.Format("%lg",number2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButton18()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
if (number1!=0)
{
number1 = 1/number1;
m_EDIT1.Format("%lg",number1);

}
else
{
m_EDIT1 = "除数不能为0";
}
}
else
{
if (number2!=0)
{
number2 = 1/number2;
m_EDIT1.Format("%lg",number2);

}
else
{
m_EDIT1 = "除数不能为0";
}
}
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButton21()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 1;
Calc1();
}

void CMyDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 2;
Calc1();
}

void CMyDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 3;
Calc1();
}

void CMyDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 4;
Calc1();
}

void CMyDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 5;
Calc1();
}

void CMyDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 6;
Calc1();
}

void CMyDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 7;
Calc1();
}

void CMyDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 8;
Calc1();
}

void CMyDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 9;
Calc1();
}

void CMyDlg::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
m_numb = 0;
Calc1();
}

void CMyDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
Calc2();
m_sign = '+';
}

void CMyDlg::OnBnClickedButton13()
{
// TODO: 在此添加控件通知处理程序代码
Calc2();
m_sign = '-';
}

void CMyDlg::OnBnClickedButton14()
{
// TODO: 在此添加控件通知处理程序代码
Calc2();
m_sign = '*';
}

void CMyDlg::OnBnClickedButton15()
{
// TODO: 在此添加控件通知处理程序代码
Calc2();
m_sign = '/';
}

void CMyDlg::OnBnClickedButton19()
{
// TODO: 在此添加控件通知处理程序代码
number1 = 0;
number2 = 0;
nums =-1;
num = false;
point = false;
equals = false;
funs = false;
m_sign = '=';
m_EDIT1.Format("%lg",number1);
SetDlgItemText(IDC_EDIT1,m_EDIT1);
}

void CMyDlg::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
Calc2();
m_sign = '=';
equals = true;
}

void CMyDlg::OnBnClickedButton16()
{
// TODO: 在此添加控件通知处理程序代码

if (equals)
{
if (point == true)
{
m_EDIT1.Format("%lg",number1);
}
else
{
m_EDIT1.Format("%lg",number1);
m_EDIT1 += ".";
}
}
else
{
if (point == true)
{
m_EDIT1.Format("%lg",number2);
}
else
{
m_EDIT1.Format("%lg",number2);
m_EDIT1 += ".";
}

}
point = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::Calc1()//点击数字键
{
switch(m_numb)
{
case 0:
m_edit = 0;
break;
case 1:
m_edit = 1;
break;
case 2:
m_edit = 2;
break;
case 3:
m_edit = 3;
break;
case 4:
m_edit = 4;
break;
case 5:
m_edit = 5;
break;
case 6:
m_edit = 6;
break;
case 7:
m_edit = 7;
break;
case 8:
m_edit = 8;
break;
case 9:
m_edit = 9;
break;
}
if (equals)
{
equals = false;
num = false;
}
if (point)
{
number2 = number2+m_edit*pow((double)10,(double)(nums--));
if (m_edit == 0)
{
if (nums == -2)
{
m_EDIT1.Format("%lg",number2);
m_EDIT1 += ".0";
}
else
{
m_EDIT1.Format("%lg",number2);
m_EDIT1 += "0";
}
}
else
m_EDIT1.Format("%lg",number2);

}
else
{
number2 = number2 * 10 + m_edit;
m_EDIT1.Format("%lg",number2);
}
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::Calc2()//点击运算符
{
if (!equals)
{
if (num)//按下运算符之后,接着是否按下了数字键
{
switch (m_sign)
{
case '+':
number1 = number1+number2;
break;
case '-':
number1 = number1-number2;
break;
case '*':
number1 = number1*number2;
break;
case '/':
if (number2 != 0)
{
number1 = number1/number2;
}
break;
}
}
else
{
number1 = number2;
num = true;
}
}
else
{
equals = false;
}
if (m_sign == '/'&& number2 == 0)
m_EDIT1 = "除数不能为零";
else
m_EDIT1.Format("%lg",number1);
number2 = 0;
point = false;
nums = -1;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);

}

void CMyDlg::OnBnClickedButton20()//退格键
{
// TODO: 在此添加控件通知处理程序代码
if (!(equals||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");
number2 = atof(c1);
}
UpdateData(FALSE);

}

void CMyDlg::OnBnClickedButton22()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
number1 = sin(number1);
m_EDIT1.Format("%lg",number1);

}
else
{
number2 = sin(number2);
m_EDIT1.Format("%lg",number2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);

}

void CMyDlg::OnBnClickedButton25()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
number1 = exp(number1);
m_EDIT1.Format("%lg",number1);

}
else
{
number2 = exp(number2);
m_EDIT1.Format("%lg",number2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButton24()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
number1 = log(number1);
m_EDIT1.Format("%lg",number1);

}
else
{
number2 = log(number2);
m_EDIT1.Format("%lg",number2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButton23()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
number1 = cos(number1);
m_EDIT1.Format("%lg",number1);

}
else
{
number2 = cos(number2);
m_EDIT1.Format("%lg",number2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}

void CMyDlg::OnBnClickedButton26()
{
// TODO: 在此添加控件通知处理程序代码
if (equals)
{
number1 = pow(number1,2);
m_EDIT1.Format("%lg",number1);

}
else
{
number2 = pow(number2,2);
m_EDIT1.Format("%lg",number2);
/*IDC_EDIT1.SetWindowText(m_EDIT1);*/
}
funs = true;
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}

void CMyDlg::OnClose()
{
if ( MessageBox(_T("是否退出程序?"),_T("提示"),MB_YESNO|MB_ICONQUESTION) == IDYES )
{
CDialog::OnClose();
}
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_ESCAPE)
{
return true;
}
if(pMsg->wParam == VK_RETURN)
{
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);

}本回答被网友采纳

急:mfc编程,用C++写一个简易的计算器,有图形界面的..请求各位大虾给出详...
1.新建一个对话框程序。2.添加计算器的各个按键及编辑框(用来显示输入和结果)3.为对话框添加一些变量:一个状态标志(计算加减乘除),一个标志(对运算两个数的哪个进行处理),两个double变量(用于运算的两个数),用类向导为编辑框绑定一个变量。定义一个计算函数(进行加减乘除)4.在对话框.h头文件中...

如何用VC++6.0 MFC 实现计算器
int nLength = m_strDisplay.GetLength (); m_strDisplay = m_strDisplay.Right (nLength - 1); 本回答由提问者推荐 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题2015-09-17 用C++写一个有图形界面的计算器,用VC++6.0 MFC只... 1 2015-02-17 如何用vc++6.0制作简单的计算器...

.C++怎么去编写那种有窗口界面的程序
1、首先打开QtCreator应用程序,新建一个qt工程。2、然后灯工程建立完毕,代码编辑界面出现,双击左侧的dialog.ui,将会打开图形界面编辑器。3、然后在中间的窗口中拖入一个按钮,一个文本框。左键按住Push Button按钮和Line Edit按钮不放,拖到界面上。4、然后把窗口的大小调整到想要的样式。5、然后点击...

用C++编写用户界面是怎样的
或者用dev c++这个编译器也行。(MFC貌似是用的c++的语法,就不要说了)Windows平台大致以下一些方案:①直接调用Win32 API。②使用MFC,这个需要C++基础。③使用GTK+,这个是纯C语言,但要用好需要理解里面的面向对象思想。等等建议选择①方案,市面上关于Win32 API的书也比较丰富,通过编程实践可以掌握...

如何用vc++6.0制作一个用c++编译的程序
1.双击桌面图标;2.这时会弹出一个对话框,点击运行程序,就进入了一个程序界面;3.点击左上角工具栏上的“文件”4.再点击新建。5,在弹出的对话框中输入工程名称,字母,数字都可。如:4或a;6,如果你是新手编一个简单的程序,就在左边点击Win32 Console Application,7点击“确定”,再之后弹出...

用C++编写计算器
用两个CString变量来存储第一个和第二个操作数,注意如果为除时要检测第二个操作数是否为0。随时检测输入框edit中输入的内容,最多只能有一个小数点,首先按小数点时显示为“0.”另注意一些细节:连续操作,结果数如果有小数点,末尾为0的要全部消除0等等 实现:edit控件:增加控件变量:m_edit新建上述...

VC++如何实现图形化界面
1、new 选择project选项卡 2、选择MFC AppWizard (exe) 填写相关信息点击确定就可以了 点击运行,就可以出现图形界面了,打开窗口设计文件可以添加控件到上面之类的。算了吧!pragma comment(linker,"\/SUBSYSTEM:Windows \/ENTRY:mainCRTStartup")#include <windows.h>\/* 使类名成为全局变量 *\/TCHAR sz...

怎样用vc++编写一个窗口应用程序?
1、首先设计好界面。2、然后编写DoDataExchange程式。3、然后编写OnInitDialog初始化程式。4、然后编写OnSysCommand程式。5、然后编写OnPaint绘制程式。6、最后编写OnSetlock锁程式。

怎么使用VC++6.0编写用户图形界面
新建项目的时候选择MFC,然后按照向导设置,然后有工具箱可以把控件拖拽到窗体上,在其中编写事件和方法。

用C++6.0做一个MFC,但是里面的那个尺寸单位到底是什么?
doubel width = MulDiv(showWidth ,GetDeviceCaps(GetDC()->m_hDC,LOGPIXELSX),2540);\/\/showWidth就是你看的单位,这个MulDiv就是将你看到的数字转换为像素长度

相似回答