效果图:
.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(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(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;
}