MFC设计一个计算器(附源码)

发布时间:2023年12月17日

效果图:

.h文件:

// MFC完整计算器Dlg.h: 头文件
//

#pragma once
//声明
enum Calculator_Flag {
	FLAG_JIA,
	FLAG_JIAN,
	FLAG_CHENG,
	FLAG_CHU,
	FLAG_PINGFANG,
	FLAG_KAIFANG,
	FLAG_LIFANG,
	FLAG_KAILIFANG,
	FLAG_NFANG,
	FLAG_KAINFANG,
	FLAG_HTD,
	FLAG_OTD,//十进制
	FLAG_BTD,
	FLAG_H,
	FLAG_O,
	FLAG_B,
	FLAG_JIECHENG,
	FLAG_MOD,
	FLAG_LNX,
	FLAG_LOGNX,
	FLAG_EX,
	FLAG_SINX,
	FLAG_COSX,
	FLAG_TANX,
	
};
// CMFC完整计算器Dlg 对话框
class CMFC完整计算器Dlg : public CDialogEx
{
// 构造
public:
	CMFC完整计算器Dlg(CWnd* pParent = nullptr);	// 标准构造函数
	void SaveFirstValue();//保存输入第一个值
	void Calculator();//点击=经行计算

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_MFC_DIALOG };
#endif

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


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
private:
	CString mStr;//编辑框1 中的字符串
	CString mStr1;//编辑框2 中的字符串
	CString mStr2;
	CString mStr3;
	CString mStr4;
	CString mStr5;
	CString mStr6;
	CString mStr7;
	CString mStr8;
	CString mStr9;
	CString mStr10;
	CString mTempStr;
	double mNum1;//输入的两个值
	double mNum2;
	Calculator_Flag mFlag;//运算符号


public:
//以下函数是双击按钮系统自动产生函数,不要照搬
	afx_msg void OnBnClickedButton3();
	afx_msg void OnBnClickedButton54();
	afx_msg void OnBnClickedButton44();
	afx_msg void OnBnClickedButton45();
	afx_msg void OnBnClickedButton47();
	afx_msg void OnBnClickedButton37();
	afx_msg void OnBnClickedButton40();
	afx_msg void OnBnClickedButton38();
	afx_msg void OnBnClickedButton30();
	afx_msg void OnBnClickedButton33();
	afx_msg void OnBnClickedButton31();
	afx_msg void OnBnClickedButton10();
	afx_msg void OnBnClickedButton11();
	afx_msg void OnBnClickedButton12();
	afx_msg void OnBnClickedButton15();
	afx_msg void OnBnClickedButton13();
	afx_msg void OnBnClickedButton14();
	afx_msg void OnBnClickedButton51();
	afx_msg void OnBnClickedButton1();
	afx_msg void OnBnClickedButton2();
	afx_msg void OnBnClickedButton53();
	afx_msg void OnBnClickedButton52();
	afx_msg void OnBnClickedButton46();
	afx_msg void OnBnClickedButton39();
	afx_msg void OnBnClickedButton32();
	afx_msg void OnBnClickedButton16();
	afx_msg void OnBnClickedButton17();
	afx_msg void OnBnClickedButton18();
	afx_msg void OnBnClickedButton21();
	afx_msg void OnBnClickedButton19();
	afx_msg void OnBnClickedButton20();
	afx_msg void OnBnClickedButton42();
	afx_msg void OnBnClickedButton29();
	afx_msg void OnBnClickedButton28();
	afx_msg void OnBnClickedButton36();
	afx_msg void OnBnClickedButton43();
	afx_msg void OnBnClickedButton50();
	afx_msg void OnBnClickedButton49();
	afx_msg void OnBnClickedButton35();
	afx_msg void OnBnClickedButton8();
	afx_msg void OnBnClickedButton7();
	afx_msg void OnBnClickedButton9();
	afx_msg void OnBnClickedButton6();
	afx_msg void OnBnClickedButton5();
	afx_msg void OnBnClickedButton4();
};

.cpp:


// MFC完整计算器Dlg.cpp: 实现文件
//H->D 十六进制转化为十进制
//O->D 八进制转化为十进制
//B->D 二进制转化为十进制

#include "pch.h"
#include "framework.h"
#include "MFC完整计算器.h"
#include "MFC完整计算器Dlg.h"
#include "afxdialogex.h"
#define p1 3.1415926535898
#define std_angle (p1/180)
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

int dto(int m, int B)//十进制转化为其他进制数
{
	int index = 1;
	int result = 0;
	int temp_result = 0;
	while (m != 0) {
		result = result + (m % B) * index;
		m = m / B;
		index *= 10;
	}
	return result;

}
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
CString doth(int m)//十进制转化为16进制,因为会出现"A,B,C...",需要单独写一个函数
{
	CString result = _T("");
	int index = 0;
	int temp_result = 0;
	
	while (m != 0) {
	
		index = m % 16;
		switch (index)
		{
		case 0:
			result = _T("0") + result;
			break;
		case 1:
			result = _T("1") + result;
			break;
		case 2:
			result = _T("2") + result;
			break;
		case 3:
			result = _T("3") + result;
			break;
		case 4:
			result = _T("4") + result;
			break;
		case 5:
			result = _T("5") + result;
			break;
		case 6:
			result = _T("6") + result;
			break;
		case 7:
			result = _T("7") + result;
			break;
		case 8:
			result = _T("8") + result;
			break;
		case 9:
			result = _T("9") + result;
			break;
		case 10:
			result = _T("A") + result;
			break;
		case 11:
			result = _T("B") + result;
			break;
		case 12:
			result = _T("C") + result;
			break;
		case 13:
			result = _T("D") + result;
			break;
		case 14:
			result = _T("E") + result;
			break;
		case 15:
			result = _T("F") + result;
			break;
		default:
			break;

		}m = m / 16;
	}
	return result;

}
//其他进制数转化为十进制数
int tod(CString m, int B)
{
	int index = 0;
	int result = 0;
	int length = m.GetLength();
	CString temp_num;
	int num = 0;
	while (length != 0)
	{
		temp_num = m.Right(1);//从最右侧取一个字符
		num = _ttoi(temp_num);//字符转化为数字
		result = result + num * pow(B, index);
		index += 1;
		length -= 1;
		m = m.Left(length);//除去已经读取的剩余字符串
	}return result;
}
int htod(CString m)//十六进制转化为十进制
{
	int index = 0;
	int result = 0;
	int length = m.GetLength();
	CString temp_num;
	int num = 0;
	while (length != 0)
	{
		temp_num = m.Right(1);//从最右侧取一个字符
		if (temp_num == "0")
		{
			num = 0;
		}
		else if (temp_num == "1")
		{
			num = 1;
		}
		else if (temp_num == "2")
		{
			num = 2;
		}
		else if (temp_num == "3")
		{
			num = 3;
		}
		else if (temp_num == "4")
		{
			num = 4;
		}
		else if (temp_num == "5")
		{
			num = 5;
		}
		else if (temp_num == "6")
		{
			num = 6;
		}
		else if (temp_num == "7")
		{
			num = 7;
		}
		else if (temp_num == "8")
		{
			num = 8;
		}
		else if (temp_num == "9")
		{
			num = 9;
		}
		else if (temp_num == "A")
		{
			num = 10;
		}
		else if (temp_num == "B")
		{
			num = 11;
		}
		else if (temp_num == "C")
		{
			num = 12;
		}
		else if (temp_num == "D")
		{
			num = 13;
		}
		else if (temp_num == "E")
		{
			num = 14;
		}
		else if (temp_num == "F")
		{
			num = 15;
		}

		
		result = result + num * pow(16, index);
		index += 1;
		length -= 1;
		m = m.Left(length);//除去已经读取的剩余字符串
	}return result;
}
class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_ABOUTBOX };
#endif

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

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CMFC完整计算器Dlg 对话框



CMFC完整计算器Dlg::CMFC完整计算器Dlg(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_MFC_DIALOG, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
//将各个编辑框内的数据与字符串连接
void CMFC完整计算器Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, mStr);//保存十个历史记录,文本框与字符串关联
	DDX_Text(pDX, IDC_EDIT2, mStr1);
	DDX_Text(pDX, IDC_EDIT3, mStr2);
	DDX_Text(pDX, IDC_EDIT4, mStr3);
	DDX_Text(pDX, IDC_EDIT5, mStr4);
	DDX_Text(pDX, IDC_EDIT6, mStr5);
	DDX_Text(pDX, IDC_EDIT7, mStr6);
	DDX_Text(pDX, IDC_EDIT8, mStr7);
	DDX_Text(pDX, IDC_EDIT9, mStr8);
	DDX_Text(pDX, IDC_EDIT10, mStr9);
	DDX_Text(pDX, IDC_EDIT11, mStr10);
}
//双击自动产生函数,不要照搬
BEGIN_MESSAGE_MAP(CMFC完整计算器Dlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_BUTTON3, &CMFC完整计算器Dlg::OnBnClickedButton3)
	ON_BN_CLICKED(IDC_BUTTON54, &CMFC完整计算器Dlg::OnBnClickedButton54)
	ON_BN_CLICKED(IDC_BUTTON44, &CMFC完整计算器Dlg::OnBnClickedButton44)
	ON_BN_CLICKED(IDC_BUTTON45, &CMFC完整计算器Dlg::OnBnClickedButton45)
	ON_BN_CLICKED(IDC_BUTTON47, &CMFC完整计算器Dlg::OnBnClickedButton47)
	ON_BN_CLICKED(IDC_BUTTON37, &CMFC完整计算器Dlg::OnBnClickedButton37)
	ON_BN_CLICKED(IDC_BUTTON40, &CMFC完整计算器Dlg::OnBnClickedButton40)
	ON_BN_CLICKED(IDC_BUTTON38, &CMFC完整计算器Dlg::OnBnClickedButton38)
	ON_BN_CLICKED(IDC_BUTTON30, &CMFC完整计算器Dlg::OnBnClickedButton30)
	ON_BN_CLICKED(IDC_BUTTON33, &CMFC完整计算器Dlg::OnBnClickedButton33)
	ON_BN_CLICKED(IDC_BUTTON31, &CMFC完整计算器Dlg::OnBnClickedButton31)
	ON_BN_CLICKED(IDC_BUTTON10, &CMFC完整计算器Dlg::OnBnClickedButton10)
	ON_BN_CLICKED(IDC_BUTTON11, &CMFC完整计算器Dlg::OnBnClickedButton11)
	ON_BN_CLICKED(IDC_BUTTON12, &CMFC完整计算器Dlg::OnBnClickedButton12)
	ON_BN_CLICKED(IDC_BUTTON15, &CMFC完整计算器Dlg::OnBnClickedButton15)
	ON_BN_CLICKED(IDC_BUTTON13, &CMFC完整计算器Dlg::OnBnClickedButton13)
	ON_BN_CLICKED(IDC_BUTTON14, &CMFC完整计算器Dlg::OnBnClickedButton14)
	ON_BN_CLICKED(IDC_BUTTON51, &CMFC完整计算器Dlg::OnBnClickedButton51)
	ON_BN_CLICKED(IDC_BUTTON1, &CMFC完整计算器Dlg::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &CMFC完整计算器Dlg::OnBnClickedButton2)
	ON_BN_CLICKED(IDC_BUTTON53, &CMFC完整计算器Dlg::OnBnClickedButton53)
	ON_BN_CLICKED(IDC_BUTTON52, &CMFC完整计算器Dlg::OnBnClickedButton52)
	ON_BN_CLICKED(IDC_BUTTON46, &CMFC完整计算器Dlg::OnBnClickedButton46)
	ON_BN_CLICKED(IDC_BUTTON39, &CMFC完整计算器Dlg::OnBnClickedButton39)
	ON_BN_CLICKED(IDC_BUTTON32, &CMFC完整计算器Dlg::OnBnClickedButton32)
	ON_BN_CLICKED(IDC_BUTTON16, &CMFC完整计算器Dlg::OnBnClickedButton16)
	ON_BN_CLICKED(IDC_BUTTON17, &CMFC完整计算器Dlg::OnBnClickedButton17)
	ON_BN_CLICKED(IDC_BUTTON18, &CMFC完整计算器Dlg::OnBnClickedButton18)
	ON_BN_CLICKED(IDC_BUTTON21, &CMFC完整计算器Dlg::OnBnClickedButton21)
	ON_BN_CLICKED(IDC_BUTTON19, &CMFC完整计算器Dlg::OnBnClickedButton19)
	ON_BN_CLICKED(IDC_BUTTON20, &CMFC完整计算器Dlg::OnBnClickedButton20)
	ON_BN_CLICKED(IDC_BUTTON42, &CMFC完整计算器Dlg::OnBnClickedButton42)
	ON_BN_CLICKED(IDC_BUTTON29, &CMFC完整计算器Dlg::OnBnClickedButton29)
	ON_BN_CLICKED(IDC_BUTTON28, &CMFC完整计算器Dlg::OnBnClickedButton28)
	ON_BN_CLICKED(IDC_BUTTON36, &CMFC完整计算器Dlg::OnBnClickedButton36)
	ON_BN_CLICKED(IDC_BUTTON43, &CMFC完整计算器Dlg::OnBnClickedButton43)
	ON_BN_CLICKED(IDC_BUTTON50, &CMFC完整计算器Dlg::OnBnClickedButton50)
	ON_BN_CLICKED(IDC_BUTTON49, &CMFC完整计算器Dlg::OnBnClickedButton49)
	ON_BN_CLICKED(IDC_BUTTON35, &CMFC完整计算器Dlg::OnBnClickedButton35)
	ON_BN_CLICKED(IDC_BUTTON8, &CMFC完整计算器Dlg::OnBnClickedButton8)
	ON_BN_CLICKED(IDC_BUTTON7, &CMFC完整计算器Dlg::OnBnClickedButton7)
	ON_BN_CLICKED(IDC_BUTTON9, &CMFC完整计算器Dlg::OnBnClickedButton9)
	ON_BN_CLICKED(IDC_BUTTON6, &CMFC完整计算器Dlg::OnBnClickedButton6)
	ON_BN_CLICKED(IDC_BUTTON5, &CMFC完整计算器Dlg::OnBnClickedButton5)
	ON_BN_CLICKED(IDC_BUTTON4, &CMFC完整计算器Dlg::OnBnClickedButton4)
END_MESSAGE_MAP()


// CMFC完整计算器Dlg 消息处理程序

BOOL CMFC完整计算器Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CMFC完整计算器Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CMFC完整计算器Dlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFC完整计算器Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}
//双字符运算需要先保存第一个数字
void CMFC完整计算器Dlg::SaveFirstValue()//保存第一个操作数
{
	UpdateData(TRUE);
	mNum1 = _wtof(mStr);//字符串转化为float类型数字
	mTempStr = mStr;//保存字符串
	mStr = L"";
	UpdateData(FALSE);
}
//双字符或者开放平方点击“=”号触发calculator计算结果
void CMFC完整计算器Dlg::Calculator()
{
	UpdateData(TRUE);
	mNum2 = _wtof(mStr);//第二个字符串转化为浮点型数字
	double result = 0.0f;
	switch (mFlag)
	{
	case FLAG_JIA:
		result = mNum1 + mNum2;
		mTempStr = mTempStr + _T("+") + mStr + _T("=");
		break;
	case FLAG_JIAN:
		result = mNum1 - mNum2;
		mTempStr = mTempStr + _T("-") + mStr + _T("=");
		break;
	case FLAG_CHENG:
		result = mNum1 * mNum2;
		mTempStr = mTempStr + _T("*") + mStr + _T("=");
		break;
	case FLAG_CHU:
		if (mNum2 == 0.0f)
		{
			result = mNum1;
			mTempStr = _T("除数不能为0!!!");
		}
		else
		{
			result = mNum1 / mNum2;
			mTempStr = mTempStr + _T("÷") + mStr + _T("=");
		}
		break;
	case FLAG_NFANG://n方
		result = pow(mNum1, mNum2);
		mTempStr = mTempStr + _T("^") + mStr + _T("=");
		break;
	case FLAG_KAINFANG://开n方
		result = pow(mNum1, 1.0/mNum2);
		mTempStr = mStr + _T("开方") + mTempStr + _T("=");
		break;
	case FLAG_MOD://mod
		result = (int)mNum1%(int)mNum2;
		mTempStr = mTempStr + _T("%") + mStr + _T("=");
		break;
	case FLAG_LOGNX://对数
		result = log(mNum2)/log(mNum1);
		mTempStr = _T("log")+mTempStr + _T("(") + mStr + _T(")=");
		break;
	case FLAG_PINGFANG://平方
		result = mNum1*mNum1;
		mTempStr = mTempStr + _T("^2=");
		break;
	case FLAG_KAIFANG://开方
		result = sqrt(mNum1);
		mTempStr =_T("开方")+ mTempStr + _T("=");
		break;
	case FLAG_LIFANG://立方
		result = mNum1 * mNum1*mNum1;
		mTempStr = mTempStr + _T("^3=");;
		break;
	case FLAG_KAILIFANG:
		result = pow(mNum1, 1.0/3);
		mTempStr = _T("开立方") + mTempStr + _T("=");
		break;
	default:
		break;
	}
	//如果是整数就显示为整数
	if (result - (int)result <= 1e-5)
	{
		mStr.Format(L"%d", (int)result);
	}
	else
	{
		mStr.Format(L"%f", result);
	}
	mTempStr += mStr;//历史数据最多有十条,完成一个运算对顺序进行更新
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = result;
	mNum2 = 0.0f;
}
//Clear功能
void CMFC完整计算器Dlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr = "";//转为空字符串
	mNum1 = 0.0f;//重新初始化
	mNum2 = 0.0f;
	mFlag = FLAG_JIA;
	UpdateData(FALSE);
}

//按键  0
void CMFC完整计算器Dlg::OnBnClickedButton54()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"0";
	UpdateData(FALSE);

}

//按键 1
void CMFC完整计算器Dlg::OnBnClickedButton44()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"1";
	UpdateData(FALSE);
}

//按键 3
void CMFC完整计算器Dlg::OnBnClickedButton45()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"3";
	UpdateData(FALSE);
}

//按键 2
void CMFC完整计算器Dlg::OnBnClickedButton47()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"2";
	UpdateData(FALSE);
}

//按键 4
void CMFC完整计算器Dlg::OnBnClickedButton37()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"4";
	UpdateData(FALSE);
}

//按键 5
void CMFC完整计算器Dlg::OnBnClickedButton40()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"5";
	UpdateData(FALSE);
}

//按键 6
void CMFC完整计算器Dlg::OnBnClickedButton38()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"6";
	UpdateData(FALSE);
}

//按键 7
void CMFC完整计算器Dlg::OnBnClickedButton30()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"7";
	UpdateData(FALSE);
}

//按键 8
void CMFC完整计算器Dlg::OnBnClickedButton33()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"8";
	UpdateData(FALSE);
}

//按键 9
void CMFC完整计算器Dlg::OnBnClickedButton31()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"9";
	UpdateData(FALSE);
}

//按键 A
void CMFC完整计算器Dlg::OnBnClickedButton10()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"A";
	UpdateData(FALSE);
}

//按键 B
void CMFC完整计算器Dlg::OnBnClickedButton11()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"B";
	UpdateData(FALSE);
}

//按键 C
void CMFC完整计算器Dlg::OnBnClickedButton12()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"C";
	UpdateData(FALSE);
}

//按键 D
void CMFC完整计算器Dlg::OnBnClickedButton15()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"D";
	UpdateData(FALSE);
}

//按键 E
void CMFC完整计算器Dlg::OnBnClickedButton13()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"E";
	UpdateData(FALSE);
}

//按键 F
void CMFC完整计算器Dlg::OnBnClickedButton14()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr += L"F";
	UpdateData(FALSE);
}

//按键 小数点
void CMFC完整计算器Dlg::OnBnClickedButton51()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	//如果没有小数点,则加上一个小数点,保证小数点最多只有一个
	if (-1 == mStr.Find('.'))//找到小数点返回1 否则返回-1
	{
		mStr += L'.';
	}UpdateData(FALSE);
}

//按键 back
void CMFC完整计算器Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	if (!mStr.IsEmpty())//判断是否为空则不执行
	{
		mStr=mStr.Left(mStr.GetLength()-1);//从左边取子字符串,长度得之前的减一
	}
	UpdateData(FALSE);


}

//按键 clearall
void CMFC完整计算器Dlg::OnBnClickedButton2()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mStr = L"";
	mStr1 = L"";
	mStr2 = L"";
	mStr3 = L"";
	mStr4 = L"";
	mStr5 = L"";
	mStr6= L"";
	mStr7 = L"";
	mStr8 = L"";
	mStr9 = L"";
	mStr10 = L"";
	mNum1 = 0.0f;//重新初始化
	mNum2 = 0.0f;
	mFlag = FLAG_JIA;
	UpdateData(FALSE);

}

//按键 +
void CMFC完整计算器Dlg::OnBnClickedButton53()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_JIA;
}

//按键 =
void CMFC完整计算器Dlg::OnBnClickedButton52()
{
	// TODO: 在此添加控件通知处理程序代码
	Calculator();
}

//按键 -
void CMFC完整计算器Dlg::OnBnClickedButton46()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_JIAN;
}

//按键 *
void CMFC完整计算器Dlg::OnBnClickedButton39()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_CHENG;
}

//按键 ÷
void CMFC完整计算器Dlg::OnBnClickedButton32()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_CHU;
}

//按键 ^1/2
void CMFC完整计算器Dlg::OnBnClickedButton16()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_KAINFANG;
}

//按键 n方
void CMFC完整计算器Dlg::OnBnClickedButton17()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_NFANG;
}

//按键 ^1/3
void CMFC完整计算器Dlg::OnBnClickedButton18()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_KAILIFANG;
}

//按键 立方
void CMFC完整计算器Dlg::OnBnClickedButton21()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_LIFANG;
}

//按键 ^1/2
void CMFC完整计算器Dlg::OnBnClickedButton19()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_KAIFANG;
}

//按键 ^2
void CMFC完整计算器Dlg::OnBnClickedButton20()
{
	// TODO: 在此添加控件通知处理程序代码
	SaveFirstValue();
	mFlag = FLAG_PINGFANG;
}


void CMFC完整计算器Dlg::OnBnClickedButton42()
{
	// TODO: 在此添加控件通知处理程序代码,求对数
	SaveFirstValue();
	mFlag = FLAG_LOGNX;
}


void CMFC完整计算器Dlg::OnBnClickedButton29()
{
	// TODO: 在此添加控件通知处理程序代码,取余
	SaveFirstValue();
	mFlag = FLAG_MOD;
	
}


void CMFC完整计算器Dlg::OnBnClickedButton28()
{
	// TODO: 在此添加控件通知处理程序代码,阶乘
	UpdateData(TRUE);
	mTempStr = mStr + _T("!=");
	mNum1 = _wtof(mStr);
	double f = 1;
	int index = (int)mNum1;
	while(index > 0)
	{
		f *= index;
		index = index - 1;

	}
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr;
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_JIECHENG;
}


void CMFC完整计算器Dlg::OnBnClickedButton36()
{
	// TODO: 在此添加控件通知处理程序代码,sinx
	UpdateData(TRUE);
	mTempStr =  _T("sin(")+ mStr+_T(")=");
	mNum1 = _wtof(mStr);
	double f = sin(mNum1 * std_angle);
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr;
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;

}


void CMFC完整计算器Dlg::OnBnClickedButton43()
{
	// TODO: 在此添加控件通知处理程序代码
	// TODO: 在此添加控件通知处理程序代码,cosx
	UpdateData(TRUE);
	mTempStr = _T("cos(") + mStr + _T(")=");
	mNum1 = _wtof(mStr);
	double f = cos(mNum1 * std_angle);
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr;
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;

}


void CMFC完整计算器Dlg::OnBnClickedButton50()
{
	// TODO: 在此添加控件通知处理程序代码
	// TODO: 在此添加控件通知处理程序代码,tanx
	UpdateData(TRUE);
	mTempStr = _T("tan(") + mStr + _T(")=");
	mNum1 = _wtof(mStr);
	double f = sin(mNum1 * std_angle)/ cos(mNum1 * std_angle);
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr;
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;

}


void CMFC完整计算器Dlg::OnBnClickedButton49()
{
	// TODO: 在此添加控件通知处理程序代码    e^x
	UpdateData(TRUE);
	mTempStr = _T("e^") + mStr + _T(")=");
	mNum1 = _wtof(mStr);
	double f = pow(2.71828182845,mNum1);
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr;
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}


void CMFC完整计算器Dlg::OnBnClickedButton35()
{
	// TODO: 在此添加控件通知处理程序代码            lnx
	UpdateData(TRUE);
	mTempStr = _T("ln(") + mStr + _T(")=");
	mNum1 = _wtof(mStr);
	double f = log(mNum1);
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr;
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}


void CMFC完整计算器Dlg::OnBnClickedButton8()
{
	// TODO: 在此添加控件通知处理程序代码
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mTempStr = mStr + _T("=");
	mNum1 = _wtof(mStr);
	int result = dto((int)mNum1, 2);//进制数转换函数,转二进制
	double f = result;
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr+ _T("(2)");
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;

}


void CMFC完整计算器Dlg::OnBnClickedButton7()
{
	// TODO: 在此添加控件通知处理程序代码,转八进制
	UpdateData(TRUE);
	mTempStr = mStr + _T("=");
	mNum1 = _wtof(mStr);
	int result = dto((int)mNum1, 8);
	double f = result;
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr += mStr + _T("(8)");
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}


void CMFC完整计算器Dlg::OnBnClickedButton9()
{
	// TODO: 在此添加控件通知处理程序代码,转十六进制
	UpdateData(TRUE);
	mTempStr = mStr + _T("=");
	mNum1 = _wtof(mStr);
	mStr = doth((int)mNum1);
	mTempStr = mTempStr + _T("(") + mStr + _T(")16");

	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);

	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}


void CMFC完整计算器Dlg::OnBnClickedButton6()
{
	// TODO: 在此添加控件通知处理程序代码,二进制转十进制
	UpdateData(TRUE);
	mTempStr = _T("(")+mStr + _T(")2=");
	int result = tod(mStr, 2);
	double f = result;
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr +=  _T("(") + mStr + _T(")10");
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}


void CMFC完整计算器Dlg::OnBnClickedButton5()//八进制转化为十进制
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(TRUE);
	mTempStr = _T("(") + mStr + _T(")8=");
	int result = tod(mStr,8);
	double f = result;
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr +=  _T("(") + mStr + _T(")10");
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}



void CMFC完整计算器Dlg::OnBnClickedButton4()
{
	// TODO: 在此添加控件通知处理程序代码  十六转十
	UpdateData(TRUE);
	mTempStr = _T("(") + mStr + _T(")16=");
	int result = htod(mStr);
	double f = result;
	if (f - (int)f <= 1e-5)
	{
		mStr.Format(L"%d", (int)f);
	}
	else
	{
		mStr.Format(L"%f", f);
	}
	mTempStr +=  _T("(") + mStr + _T(")10");
	mStr10 = mStr9;
	mStr9 = mStr8;
	mStr8 = mStr7;
	mStr7 = mStr6;
	mStr6 = mStr5;
	mStr5 = mStr4;
	mStr4 = mStr3;
	mStr3 = mStr2;
	mStr2 = mStr1;
	mStr1 = mTempStr;
	UpdateData(FALSE);
	mNum1 = f;
	mNum2 = 0.0f;
	mFlag = FLAG_SINX;
}

文章来源:https://blog.csdn.net/2303_76561497/article/details/134957081
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。