效果图:
.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(CM服务器托管网FC完整计算器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 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 0)
{
f *= index;
index = index - 1;
}
if (f - (int)f
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【eBPF-01】初见:基于 BCC 框架的第一个 eBPF 程序
闲言少叙,本文记录了如何零基础通过 BCC 框架,入门 eBPF 程序的开发,并实现几个简易的程序。 有关 eBPF 的介绍,网络上的资料有很多,本文暂且先不深入讨论,后面会再出一篇文章详细分析其原理和功能。 我们目前只需要知道,eBPF 实际上是一种过滤器,…