MFC之计算器(优化版)

前面的一篇日志写过的计算器,由于那个存在一些问题所以这次经过优化和美化后,暂定为最终版本。

源码下载

效果图片:

下面是源码 按钮的美化 是用了上一篇日志所写的方法,并没有重新写一个NEWButton类。

// CalculatorDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Calculator.h"
#include "CalculatorDlg.h"

#include <math.h>
#include <stack>
using namespace std;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CCalculatorDlg dialog

CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCalculatorDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCalculatorDlg)
	m_edit1 = _T("");
	m_edit2 = 0.0;
	m_result=0.0;
	m_Count_Style=-1;
	m_temp1=0.0;
	m_temp2=0.0;
	m_Window_right=0.0;
	m_Count_type=0;
	m_OFF_Click=false;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCalculatorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCalculatorDlg)
	DDX_Text(pDX, IDC_EDIT1, m_edit1);
	DDX_Text(pDX, IDC_EDIT2, m_edit2);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCalculatorDlg, CDialog)
	//{{AFX_MSG_MAP(CCalculatorDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_BUTTON_EQUAL, OnButtonEqual)
	ON_BN_CLICKED(IDC_BUTTON_1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON_0, OnButton0)
	ON_BN_CLICKED(IDC_BUTTON_10X, OnButton10x)
	ON_BN_CLICKED(IDC_BUTTON_2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON_3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON_4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON_7, OnButton7)
	ON_BN_CLICKED(IDC_BUTTON_5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON_6, OnButton6)
	ON_BN_CLICKED(IDC_BUTTON_8, OnButton8)
	ON_BN_CLICKED(IDC_BUTTON_9, OnButton9)
	ON_BN_CLICKED(IDC_BUTTON_POINT, OnButtonPoint)
	ON_BN_CLICKED(IDC_BUTTON_PLUS, OnButtonPlus)
	ON_BN_CLICKED(IDC_BUTTON_SUB, OnButtonSub)
	ON_BN_CLICKED(IDC_BUTTON_MUL, OnButtonMul)
	ON_BN_CLICKED(IDC_BUTTON_DIV, OnButtonDiv)
	ON_BN_CLICKED(IDC_BUTTON_DAOSHU, OnButtonDaoshu)
	ON_BN_CLICKED(IDC_BUTTON_SQRT, OnButtonSqrt)
	ON_BN_CLICKED(IDC_BACKSPACE, OnBackspace)
	ON_BN_CLICKED(IDC_C, OnC)
	ON_BN_CLICKED(IDC_BUTTON_QUYU, OnButtonQuyu)
	ON_BN_CLICKED(IDC_BUTTON_ONOFF, OnButtonOnoff)
	ON_BN_CLICKED(IDC_BUTTON_Science, OnBUTTONScience)
	ON_BN_CLICKED(IDC_BUTTON_SIN, OnButtonSin)
	ON_BN_CLICKED(IDC_BUTTON_COS, OnButtonCos)
	ON_BN_CLICKED(IDC_BUTTON_TAN, OnButtonTan)
	ON_BN_CLICKED(IDC_BUTTON_SINH, OnButtonSinh)
	ON_BN_CLICKED(IDC_BUTTON_COSH, OnButtonCosh)
	ON_BN_CLICKED(IDC_BUTTON_TANH, OnButtonTanh)
	ON_BN_CLICKED(IDC_BUTTON_INT, OnButtonInt)
	ON_BN_CLICKED(IDC_BUTTON_X2, OnButtonX2)
	ON_BN_CLICKED(IDC_BUTTON_X3, OnButtonX3)
	ON_BN_CLICKED(IDC_BUTTON_XY, OnButtonXy)
	ON_BN_CLICKED(IDC_BUTTON_LN, OnButtonLn)
	ON_BN_CLICKED(IDC_BUTTON_N, OnButtonN)
	ON_BN_CLICKED(IDC_BUTTON_LOG, OnButtonLog)
	ON_BN_CLICKED(IDC_BUTTON_LEFT, OnButtonLeft)
	ON_BN_CLICKED(IDC_BUTTON_RIGHT, OnButtonRight)
	ON_BN_CLICKED(IDC_BUTTON_PorN, OnBUTTONPorN)
	ON_WM_CTLCOLOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CCalculatorDlg message handlers

BOOL CCalculatorDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

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

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here

	CRect rectLarge;
	CRect rectSmall;
	CRect rectSeprator;

	GetWindowRect(&rectLarge);
	GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeprator);
	m_Window_right=rectLarge.right-rectSeprator.right;
	
	rectSmall.left=rectLarge.left;
	rectSmall.bottom=rectLarge.bottom;
	rectSmall.top=rectLarge.top;
	rectSmall.right=rectSeprator.right;

	SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE | SWP_NOZORDER);
	
	SetWindowText(_T("kay & dan's calculator"));

	m_brush.CreateSolidBrush(RGB(30,144,255));
	m_font.CreatePointFont(90,"华文行楷");

	//设置计算初始状态为normal模式
	CButton *p; 
	p=(CButton*)GetDlgItem(IDC_RADIO2); 
	p->SetCheck(1);
	m_Count_Style=2;

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CCalculatorDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CCalculatorDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		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;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
		/*
		CPaintDC dc(this);
		CRect rect;
		GetClientRect(&rect);
		
		CDC dcMem;
		dcMem.CreateCompatibleDC(&dc);
	
		CBitmap bmpBackground;
		bmpBackground.LoadBitmap(IDB_BK);
		
		BITMAP bitmap;
		bmpBackground.GetBitmap(&bitmap);
		CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
		dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmWidth,SRCCOPY);
		*/
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CCalculatorDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CCalculatorDlg::OnRadio1() 
{
	// TODO: Add your control notification handler code here
	//计算表达式
	m_Count_Style=1;
}

void CCalculatorDlg::OnRadio2() 
{
	// TODO: Add your control notification handler code here
	m_Count_Style=2;
}

void CCalculatorDlg::OnBUTTONScience() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	CString str;
	if(GetDlgItemText(IDC_BUTTON_Science,str),str=="功能增强>>")
	{
		SetDlgItemText(IDC_BUTTON_Science,"基本运算<<");
	}
	else
	{
		SetDlgItemText(IDC_BUTTON_Science,"功能增强>>");
	}
	
	static CRect rectLarge;
	static CRect rectSmall;
	
	if(rectLarge.IsRectEmpty())
	{
		GetWindowRect(&rectSmall);
		
		rectLarge.left=rectSmall.left;
		rectLarge.top=rectSmall.top;
		rectLarge.right=rectSmall.right+m_Window_right;
		rectLarge.bottom=rectSmall.bottom;
	}
	if(str=="基本运算<<")
	{
		SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),SWP_NOMOVE | SWP_NOZORDER);
	}
	else
	{
		SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(),SWP_NOMOVE | SWP_NOZORDER);
	}
}

void CCalculatorDlg::OnBackspace() 
{
	// TODO: Add your control notification handler code here
	UpdateData();

	char *ch=(LPTSTR)(LPCTSTR)m_edit1;
	int length=m_edit1.GetLength();
	ch[length-1]='\0';
	m_edit1=ch;
	
	UpdateData(FALSE);
}

void CCalculatorDlg::OnC() 
{
	// TODO: Add your control notification handler code here
	m_edit1="";
	m_edit2=0.0;
	m_result=0.0;
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonOnoff() 
{
	// TODO: Add your control notification handler code here
	CString str;
	if(GetDlgItemText(IDC_BUTTON_ONOFF,str),str=="OFF")
	{
		SetDlgItemText(IDC_BUTTON_ONOFF,"ON");	
		m_OFF_Click=TRUE;
		
	}
	else
	{
		SetDlgItemText(IDC_BUTTON_ONOFF,"OFF");
		m_OFF_Click=FALSE;
	}
	
	if(str=="OFF")
	{
		GetDlgItem(IDC_EDIT1)->EnableWindow(FALSE);
		GetDlgItem(IDC_EDIT2)->EnableWindow(FALSE);
		m_edit1="";
		m_edit2=0.0;
		UpdateData(FALSE);
	}
	else
	{
		GetDlgItem(IDC_EDIT1)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDIT2)->EnableWindow(TRUE);
	}
}

void CCalculatorDlg::OnButtonPoint() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
		return;
	}
	UpdateData();
	m_edit1+='.';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnBUTTONPorN() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	if(m_edit1=="")
		MessageBox("操作不合法");
	else if(m_Count_Style==1)
		MessageBox("此功能暂不支持表达式模式下的操作");
	else
	{
		if(m_edit1[0]=='-')
		{
			m_edit1.Remove('-');
		}
		else
			m_edit1="-"+m_edit1;
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton0() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='0';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='1';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here

	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='2';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton3() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='3';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton4() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='4';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton5() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='5';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton6() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='6';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton7() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='7';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton8() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='8';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton9() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	UpdateData();
	m_edit1+='9';
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonPlus() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	if(m_Count_Style==1)
	{
		UpdateData();
		m_edit1+='+';
		UpdateData(FALSE);
	}
	if(m_Count_Style==2)
	{
		m_Count_type=1;
		char m_char[10];
		GetDlgItem(IDC_EDIT1)->GetWindowText(m_char,10);
		m_temp1=atof(m_char);
		m_edit1="";
		UpdateData(FALSE);
	}

}

void CCalculatorDlg::OnButtonSub() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	if(m_Count_Style==1)
	{
		UpdateData();
		m_edit1+='-';
		UpdateData(FALSE);
	}
	if(m_Count_Style==2)
	{
		m_Count_type=2;
		char m_char[10];
		GetDlgItem(IDC_EDIT1)->GetWindowText(m_char,10);
		m_temp1=atof(m_char);
		m_edit1="";
		UpdateData(FALSE);
	}
}

void CCalculatorDlg::OnButtonMul() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	if(m_Count_Style==1)
	{
		UpdateData();
		m_edit1+='*';
		UpdateData(FALSE);
	}
	if(m_Count_Style==2)
	{
		m_Count_type=3;
		char m_char[10];
		GetDlgItem(IDC_EDIT1)->GetWindowText(m_char,10);
		m_temp1=atof(m_char);
		m_edit1="";
		UpdateData(FALSE);
	}
}

void CCalculatorDlg::OnButtonDiv() 
{
	// TODO: Add your control notification handler code here

	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	if(m_Count_Style==1)
	{
		UpdateData();
		m_edit1+='/';
		UpdateData(FALSE);
	}
	if(m_Count_Style==2)
	{
		m_Count_type=4;
		char m_char[10];
		GetDlgItem(IDC_EDIT1)->GetWindowText(m_char,10);
		m_temp1=atof(m_char);
		m_edit1="";
		UpdateData(FALSE);
	}
}

void CCalculatorDlg::OnButtonQuyu() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	if(m_Count_Style==2)
	{
		m_Count_type=5;
		char m_char[10];
		GetDlgItem(IDC_EDIT1)->GetWindowText(m_char,10);
		m_temp1=atof(m_char);
		m_edit1="";
		UpdateData(FALSE);
	}
}

void CCalculatorDlg::OnButtonXy() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	m_Count_type=6;
	char m_char[10];
	char m_char2[10];
	
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);
	
	int temp=atoi(m_char);
	if(temp==0)
	{
		m_temp1=atof(m_char2);
		m_edit1="";
	}
	else
	{
		m_temp1=temp;
		m_edit1="";
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonDaoshu() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char1[10];
	char m_char2[10];
	
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char1,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);
	
	double temp=atof(m_char1);
	double temp2=atof(m_char2);
	CString str=m_char1;

	if(temp==0 && temp2==0)
		MessageBox("0不能做除数");
	else if(temp!=0)
	{
		m_edit1="1/"+str;
		m_edit2=1/temp;
	}
	else
	{
		str=m_char2;
		m_edit1="1/"+str;
		m_edit2=1/temp2;
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonSqrt() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}
	
	char m_char[10];
	char m_char2[10];

	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	double temp=atof(m_char);
	double temp2=atof(m_char2);

	if(temp2==0)
	{
		m_edit2=sqrt(temp);
		m_edit1="sqrt("+str+")";
	}
	else if(temp==0 && temp2!=0)
	{
		m_edit2=sqrt(temp2);
		str=m_char2;
		m_edit1="sqrt("+str+")";
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonSin() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}
	
	char m_char[10];
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	CString str=m_char;
	double temp=atof(m_char);
	m_edit1="sin("+str+")";
	m_edit2=sin(temp);
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonCos() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	CString str=m_char;
	double temp=atof(m_char);
	m_edit1="cos("+str+")";
	m_edit2=cos(temp);
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonTan() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	CString str=m_char;
	double temp=atof(m_char);
	m_edit1="tan("+str+")";
	m_edit2=tan(temp);
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonSinh() 
{
	// TODO: Add your control notification handler code here	
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	CString str=m_char;
	double temp=atof(m_char);
	m_edit1="sinh("+str+")";
	m_edit2=sinh(temp);
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonCosh() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	CString str=m_char;
	double temp=atof(m_char);
	m_edit1="cosh("+str+")";
	m_edit2=cosh(temp);
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonTanh() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}
	
	char m_char[10];
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	CString str=m_char;
	double temp=atof(m_char);
	m_edit1="tanh("+str+")";
	m_edit2=tanh(temp);
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonInt() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	char m_char2[10];
	
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	int temp=atoi(m_char);
	int temp2=atoi(m_char2);

	if(temp2==0)
	{
		m_edit1="Int("+str+")";
		m_edit2=temp;
	}
	else if(temp==0)
	{
		str=m_char2;
		m_edit1="Int("+str+")";
		m_edit2=temp2;
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonX2() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	char m_char2[10];
	
	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	double temp=atof(m_char);
	double temp2=atof(m_char2);

	if(temp!=0)
	{
		m_edit1=str+"*"+str;
		m_edit2=temp*temp;
	}
	else if(temp==0)
	{
		str=m_char2;
		m_edit1=str+"*"+str;
		m_edit2=temp2*temp2;
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonX3() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}
	
	char m_char[10];
	char m_char2[10];

	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	double temp=atof(m_char);
	double temp2=atof(m_char2);
	
	if(temp!=0)
	{
		m_edit1=str+"*"+str+"*"+str;
		m_edit2=temp*temp*temp;
	}
	else if(temp==0)
	{
		str=m_char2;
		m_edit1=str+"*"+str+"*"+str;
		m_edit2=temp2*temp2*temp2;
	}
	
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButton10x() 
{
	// TODO: Add your control notification handler code here

	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	char m_char2[10];

	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	int temp=atoi(m_char);
	int temp2=atoi(m_char2);

	if(temp2==0)
	{
		m_edit1="10^"+str;
		m_edit2=pow(10,temp);
	}
	else if(temp==0)
	{
		str=m_char2;
		m_edit1="10^"+str;
		m_edit2=pow(10,temp2);
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonLn() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}
	char m_char[10];
	char m_char2[10];

	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	double temp=atof(m_char);
	double temp2=atof(m_char2);

	if(temp2==0 && temp<=0)
		MessageBox("参数不合法");
	else if(temp>0)
	{
		m_edit1="ln("+str+")";
		m_edit2=log(temp);
	}
	else if(temp==0 && temp2>0)
	{
		str=m_char2;
		m_edit1="ln("+str+")";
		m_edit2=log(temp2);
	}
	
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonN() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	char m_char2[10];

	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str;
	int temp=atoi(m_char);
	int temp2=atoi(m_char2);
	
	if(temp>0)
	{
		itoa(temp,m_char,10);
		str=m_char;
		m_edit1=str+"!";
		m_edit2=temp;
		for(int i=temp-1;i>=1;i--)
			m_edit2*=i;
	}
	else 
	{
		itoa(temp2,m_char2,10);
		str=m_char2;
		m_edit1=str+"!";
		m_edit2=temp2;
		for(int i=temp2-1;i>=1;i--)
			m_edit2*=i;
	}
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonLog() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	char m_char[10];
	char m_char2[10];

	GetDlgItem(IDC_EDIT2)->GetWindowText(m_char,10);
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_char2,10);

	CString str=m_char;
	double temp=atof(m_char);
	double temp2=atof(m_char2);

	if(temp>0)
	{
		m_edit1="Log10("+str+")";
		m_edit2=log10(temp);
	}
	else if(temp2>0 && temp==0)
	{
		str=m_char2;
		m_edit1="Log10("+str+")";
		m_edit2=log10(temp2);
	}
	else
		MessageBox("参数不合法");
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonLeft() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}
	UpdateData();
	if(m_Count_Style==1)
		m_edit1+="(";
	else
		MessageBox("此操作仅在表达式模式下有用");
	UpdateData(FALSE);
}

void CCalculatorDlg::OnButtonRight() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;;
	}
	UpdateData();
	if(m_Count_Style==1)
		m_edit1+=")";
	else
		MessageBox("此操作仅在表达式模式下有用");
	UpdateData(FALSE);
}

void Count(stack<char> &s1,stack<double> &s2)
{
	double v1,v2,v3;
	switch(s1.top())
	{
	case '+':
		v1=s2.top();
		s2.pop();
		v2=s2.top();
		s2.pop();
		v3=v1+v2;
		s2.push(v3);
		break;
	case '-':
		v1=s2.top();
		s2.pop();
		v2=s2.top();
		s2.pop();
		v3=v2-v1;
		s2.push(v3);
		break;
	case '*':
		v1=s2.top();
		s2.pop();
		v2=s2.top();
		s2.pop();
		v3=v1*v2;
		s2.push(v3);
		break;
	case '/':
		v1=s2.top();
		s2.pop();
		v2=s2.top();
		s2.pop();
		v3=v2/v1;
		s2.push(v3);
		break;
	}
	s1.pop();
}

void CCalculatorDlg::OnButtonEqual() 
{
	// TODO: Add your control notification handler code here
	if(m_OFF_Click)
	{
		MessageBox("请按ON键开启计算器");
			return;
	}

	if(m_Count_Style==1)
	{
		UpdateData();
		if(m_edit1=="")
		{
			m_result=0;	
			goto lp;
		}
		int i=0;
		double v,s,f;
		char *ch=(LPTSTR)(LPCTSTR)m_edit1; //将CString类型强制转换为char *类型
		
		stack<char> s1;
		stack<double> s2;
		
		while(ch[i]!='\0')
		{
			s=0;
			f=0.1;
			switch(ch[i])
			{
			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				while( (ch[i]>='0') && (ch[i]<='9') )
				{
					s=s*10+(ch[i]-'0');
					i++;
				}
				if(ch[i]=='.')
				{
					i++;
					while( (ch[i]>='0') && (ch[i]<='9'))
					{
						s=s+(ch[i]-'0')*f;
						f=f*0.1;
						i++;
					}
				}
				s2.push(s);
				i--;
				break;
			case '+':
			case '-':		
				if( (s1.empty()) || (s1.top()=='(') )
					s1.push(ch[i]);
				else
				{
					while( (!s1.empty()) && (s1.top()!='(') )
					{
						Count(s1,s2);
					}
					s1.push(ch[i]);
				}
				break;
				
			case '*':
			case '/':
				if( (s1.empty()) || (s1.top()=='(') || (s1.top()=='+') || (s1.top()=='-') )
					s1.push(ch[i]);
				else
				{
					while( (!s1.empty()) && (s1.top()!='(') && (s1.top()!='+') && (s1.top()!='-') )
					{
						Count(s1,s2);
					}
					s1.push(ch[i]);
				}
				break;
				
			case '(':
				s1.push(ch[i]);
				break;
				
			case ')':
				while( (!s1.empty()) && (s1.top()!='(') )
				{
					Count(s1,s2);
				}
				if(!s1.empty())//pop掉左括号
					s1.pop();
				break;
			}
			i++;
		}
		
		while(!s1.empty())
		{
			Count(s1,s2);
		}	
		
		v=s2.top();
		s2.pop();
		m_result=v;
	}
	else
	{
		CString str1,str2;
		char m_c1[10],m_c2[10];
		char m_char[10];
		GetDlgItem(IDC_EDIT1)->GetWindowText(m_char,10);
		m_temp2=atof(m_char);
		m_edit1="";
		UpdateData(FALSE);

		switch(m_Count_type)
		{
		case 1:
			m_temp1+=m_temp2;
			if(m_result==0)
				m_result=m_temp1;
			else
				m_result+=m_temp2;
			break;
		case 2:
			m_temp1-=m_temp2;
			if(m_result==0)
				m_result=m_temp1;
			else
				m_result-=m_temp2;
			break;
		case 3:
			m_temp1*=m_temp2;
			if(m_result==0)
				m_result=m_temp1;
			else
				m_result*=m_temp2;
			break;
		case 4:
			m_temp1/=m_temp2;
			if(m_result==0)
				m_result=m_temp1;
			else
				m_result/=m_temp2;
			break;
		case 5:
			m_temp1=(int)m_temp1%(int)m_temp2;
			if(m_result==0)
				m_result=m_temp1;
			else
				m_result=(int)m_result%(int)m_temp2;
			break;
		case 6:
			itoa(m_temp1,m_c1,10);
			itoa(m_temp2,m_c2,10);
			str1=m_c1;
			str2=m_c2;
			m_edit1=str1+"^"+str2;
			m_result=pow(m_temp1,m_temp2);
			break;
		default:
			m_result=m_temp2;
		}
	}
lp:	m_edit2=m_result;
	UpdateData(FALSE);
}


HBRUSH CCalculatorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	// TODO: Return a different brush if the default is not desired

	if(pWnd->GetDlgCtrlID()==IDC_EDIT1 || IDC_EDIT2)
	{
		if(pWnd->GetDlgCtrlID()==IDC_TEXT_1 || IDC_TEXT_2)
		{
			pDC->SelectObject(&m_font);
		}
		pDC->SetTextColor(RGB(255,215,0));
		pDC->SetBkMode(TRANSPARENT);
		//pDC->SetBkColor(RGB(255,55,55));
		return m_brush;
	}
	return hbr;
}
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
课程设计:简易计算器,逻辑运算 功能代码: // 计算器1Dlg.cpp : implementation file // #include "stdafx.h" #include "计算器1.h" #include "计算器1Dlg.h" #include<cmath> #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About int focus=0,point1=0,point2=0,i=0,j=0; double temp1=1,temp2=1,equal; double temp3[100],temp4[100]; class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMy1Dlg dialog CMy1Dlg::CMy1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CMy1Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CMy1Dlg) m_1 = 0.0; m_2 = 0.0; m_result = 0.0; m_string = _T(""); m_string2 = _T(""); m_string3 = _T(""); //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMy1Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMy1Dlg) DDX_Control(pDX, IDC_BUTTON_point, m_point); DDX_Text(pDX, IDC_EDIT1, m_1); DDX_Text(pDX, IDC_EDIT2, m_2); DDX_Text(pDX, IDC_EDIT3, m_result); DDX_Text(pDX, IDC_EDIT4, m_string); DDX_Text(pDX, IDC_EDIT5, m_string2); DDX_Text(pDX, IDC_EDIT7, m_string3); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMy1Dlg, CDialog) //{{AFX_MSG_MAP(CMy1Dlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_EN_SETFOCUS(IDC_EDIT1, OnSetfocusEdit1) ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1) ON_EN_SETFOCUS(IDC_EDIT2, OnSetfocusEdit2) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_BUTTON_point, OnBUTTONpoint) ON_EN_CHANGE(IDC_EDIT2, OnChangeEdit2) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) ON_BN_CLICKED(IDC_BUTTON7, OnButton7) ON_BN_CLICKED(IDC_BUTTON8, OnButton8) ON_BN_CLICKED(IDC_BUTTON9, OnButton9) ON_BN_CLICKED(IDC_BUTTON0, OnButton0) ON_BN_CLICKED(IDC_BUTTON_delete, OnBUTTONdelete) ON_BN_CLICKED(IDC_BUTTON_equal, OnBUTTONequal) ON_BN_CLICKED(IDC_BUTTON15, OnButton15) ON_BN_CLICKED(IDC_BUTTON16, OnButton16) ON_BN_CLICKED(IDC_BUTTON17, OnButton17) ON_BN_CLICKED(IDC_BUTTON18, OnButton18) ON_BN_CLICKED(IDC_BUTTON19, OnButton19) ON_BN_CLICKED(IDC_BUTTON20, OnButton20) ON_BN_CLICKED(IDC_BUTTON21, OnButton21) ON_BN_CLICKED(IDC_BUTTON22, OnButton22) ON_BN_CLICKED(IDC_BUTTON23, OnButton23) ON_BN_CLICKED(IDC_BUTTON24, OnButton24) ON_BN_CLICKED(IDC_BUTTON25, OnButton25) ON_BN_CLICKED(IDC_BUTTON27, OnButton27) ON_BN_CLICKED(IDC_BUTTON28, OnButton28) ON_BN_CLICKED(IDC_BUTTON29, OnButton29) ON_BN_CLICKED(IDC_BUTTON26, OnButton26) ON_BN_CLICKED(IDC_BUTTON30, OnButton30) ON_BN_CLICKED(IDC_BUTTON31, OnButton31) ON_BN_CLICKED(IDC_BUTTON32, OnButton32) ON_BN_CLICKED(IDC_BUTTON10, OnButton10) ON_BN_CLICKED(IDC_RADIO1, OnRadio1) ON_BN_CLICKED(IDC_RADIO2, OnRadio2) ON_COMMAND(ID_MENUITEM32792, OnMenuitem32792) ON_COMMAND(ID_MENUITEM32793, OnMenuitem32793) ON_COMMAND(ID_MENUITEM32794, OnMenuitem32794) ON_COMMAND(ID_MENUITEM32795, OnMenuitem32795) ON_COMMAND(ID_MENUITEM32796, OnMenuitem32796) ON_COMMAND(ID_MENUITEM32797, OnMenuitem32797) ON_COMMAND(ID_MENUITEM32798, OnMenuitem32798) ON_COMMAND(ID_MENUITEM32799, OnMenuitem32799) ON_COMMAND(ID_MENUITEM32800, OnMenuitem32800) ON_COMMAND(ID_MENUITEM32801, OnMenuitem32801) ON_COMMAND(ID_MENUITEM32802, OnMenuitem32802) ON_COMMAND(ID_MENUITEM32791, OnMenuitem32791) ON_COMMAND(ID_MENUITEM32790, OnMenuitem32790) ON_COMMAND(ID_MENUITEM32789, OnMenuitem32789) ON_COMMAND(ID_MENUITEM32788, OnMenuitem32788) ON_COMMAND(ID_MENUITEM32803, OnMenuitem32803) ON_COMMAND(ID_MENUITEM32804, OnMenuitem32804) ON_BN_CLICKED(IDC_BUTTON33, OnButton33) ON_BN_CLICKED(IDC_BUTTON14, OnButton14) ON_COMMAND(ID_MENUITEM32809, OnMenuitem32809) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMy1Dlg message handlers BOOL CMy1Dlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CMy1Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CMy1Dlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle 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; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CMy1Dlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CMy1Dlg::OnSetfocusEdit1() { focus=1; } void CMy1Dlg::OnChangeEdit1() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } void CMy1Dlg::OnSetfocusEdit2() { focus=2; } void CMy1Dlg::OnBUTTONpoint() //--------------------------------------------------小数点键 { if(focus==1) point1=1; if(focus==2) point2=1; } void CMy1Dlg::OnChangeEdit2() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } void CMy1Dlg::OnButton1() //-----------------------------------------------------数字键1 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+1; i++;temp3[i]=m_1;} if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1+m_1; i++;temp3[i]=m_1;point1++;} if(focus==2&&point2;==0) {m_2=m_2*10+1; j++;temp4[j]=m_2;} if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton2() //-----------------------------------------------------数字键2 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+2; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*2+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+2; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*2+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton3() //-----------------------------------------------------数字键3 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+3; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*3+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+3; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*3+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton4() //-----------------------------------------------------数字键4 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+4; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*4+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+4; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*4+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton5() //-----------------------------------------------------数字键5 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+5; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*5+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+5; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*5+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton6() //-----------------------------------------------------数字键6 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+6; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*6+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+6; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*6+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton7() //-----------------------------------------------------数字键7 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+7; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*7+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+7; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*7+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton8() //-----------------------------------------------------数字键8 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+8; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*8+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+8; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*8+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton9() //-----------------------------------------------------数字键9 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10+9; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*9+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10+9; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*9+m_2; j++;temp4[j]=m_2;point2++;} UpdateData(false); } void CMy1Dlg::OnButton0() //-----------------------------------------------------数字键0 {UpdateData(true); if(focus==1&&point1;==0) {m_1=m_1*10; i++;temp3[i]=m_1;} else if(focus==1&&point1;>=1) {temp1=temp1/10;m_1=temp1*0+m_1; i++;temp3[i]=m_1;point1++;} else if(focus==2&&point2;==0) {m_2=m_2*10; j++;temp4[j]=m_2;} else if(focus==2&&point2;>=1) {temp2=temp2/10;m_2=temp2*0+m_2; j++;temp4[j]=m_1;point2++;} UpdateData(false); } void CMy1Dlg::OnBUTTONdelete() //--------------------------------退格 {UpdateData(true); if(focus==1) {i--;m_1=temp3[i]; if(point1>0) {point1=point1-1;} if(temp1<1) {temp1=temp1*10;} } if(focus==2) {j--;m_2=temp4[j]; if(point2>0) {point2=point2-1;} if(temp2<1) {temp2=temp2*10;} } UpdateData(false); } void CMy1Dlg::OnBUTTONequal() {//--------------------------------------------------------------------等号键 UpdateData(true); m_result=equal; UpdateData(false); } void CMy1Dlg::OnButton14() { // TODO: Add your control notification handler code here------------- 加法 UpdateData(true); equal=m_1+m_2; m_string="+"; UpdateData(false); } void CMy1Dlg::OnButton15() { // TODO: Add your control notification handler code here-----------减法 UpdateData(true); equal=m_1-m_2; m_string="-"; UpdateData(false); } void CMy1Dlg::OnButton16() {// TODO: Add your control notification handler code here--------------乘法 UpdateData(true); equal=m_1*m_2; m_string="*"; UpdateData(false); } void CMy1Dlg::OnButton17() { // TODO: Add your control notification handler code here--------除法 UpdateData(true); equal=m_1/m_2; m_string="/"; UpdateData(false); } void CMy1Dlg::OnButton18() { // TODO: Add your control notification handler code here------------------逻辑与 UpdateData(true); equal=m_1&&m_2; m_string="And";m_string2=" "; UpdateData(false); } void CMy1Dlg::OnButton19() { // TODO: Add your control notification handler code here--------------逻辑或 UpdateData(true); equal=m_1||m_2; m_string="or"; m_string2=" "; UpdateData(false); } void CMy1Dlg::OnButton20() { // TODO: Add your control notification handler code here------------------逻辑非 UpdateData(true); equal=!m_1; m_string="not"; m_string2=" "; UpdateData(false); } void CMy1Dlg::OnButton21() { // TODO: Add your control notification handler code here---------------------逻辑异或 UpdateData(true); equal=int(m_1)^int(m_2); m_string="Xor"; m_string2=" "; UpdateData(false); } void CMy1Dlg::OnButton22() { // TODO: Add your control notification handler code here---------------------正弦 UpdateData(true); m_2=sin(m_1); m_string2="Sin";m_string="="; UpdateData(false); } void CMy1Dlg::OnButton23() { // TODO: Add your control notification handler code here----------------------余弦 UpdateData(true); m_2=cos(m_1); m_string2="Cos";m_string="="; UpdateData(false); } void CMy1Dlg::OnButton24() { // TODO: Add your control notification handler code here------------正切 UpdateData(true); m_2=tan(m_1); m_string2="tan";m_string="="; UpdateData(false); } void CMy1Dlg::OnButton25() { // TODO: Add your control notification handler code here----------------求余 UpdateData(true); equal=int(m_1)%int(m_2); m_string="Mod"; UpdateData(false); } void CMy1Dlg::OnButton27() { // TODO: Add your control notification handler code here------------------log UpdateData(true); m_result=log(m_2)/log(m_1); m_string2="log"; UpdateData(false); } void CMy1Dlg::OnButton28() { // TODO: Add your control notification handler code here--------------------ln UpdateData(true); m_2=log(m_1); m_string2="ln"; m_string="="; UpdateData(false); } void CMy1Dlg::OnButton29() { // TODO: Add your control notification handler code here-------------------乘方 UpdateData(true); equal=pow(m_1,m_2); m_string="^"; UpdateData(false); } void CMy1Dlg::OnButton26() { // TODO: Add your control notification handler code here----------------阶乘 UpdateData(true); int j=1,k=int(m_1); for(;j<m_1;j++) {k=k*j;} equal=k; m_2=equal; m_string="!="; UpdateData(false); } void CMy1Dlg::OnButton30() { // TODO: Add your control notification handler code here---------------pi if(focus==1) m_1=3.1415926; else if(focus==2) m_2=3.1415926; UpdateData(false); } void CMy1Dlg::OnButton31() { // TODO: Add your control notification handler code here-------------00 m_string3="00"; UpdateData(false); } void CMy1Dlg::OnButton32() { // TODO: Add your control notification handler code here-----------------%(百分号) m_string3="%"; UpdateData(false); } void CMy1Dlg::OnButton10() { // TODO: Add your control notification handler code here-------------------复原MR focus=0,point1=0,point2=0,i=0,j=0,temp1=1,temp2=1; m_1=0;m_2=0;m_result=0; m_string=" ";m_string2=" ";m_string3=" "; UpdateData(false); } void CMy1Dlg::OnRadio1() { // TODO: Add your control notification handler code here----------------十进制转二进制 int change(int); m_2=change(int(m_1)); m_string="--->"; UpdateData(false); } int change(int c) {int h[100],k=0,x=0; for(;c!=0;) {h[k]=c%2; c=c/2; k++; } k=k-1; for(;k>=0;k--) {x=x*10+h[k]; } return x; } void CMy1Dlg::OnRadio2() { // TODO: Add your control notification handler code here------------二进制转十进制(Two to Ten) int q,num=int(m_1),shi=0; int TtT(int); q=TtT(num); for(;num>1;) {num=num-pow(10,q); shi=pow(2,q)+shi; q=TtT(num); } if(num==1) shi=shi+1; m_2=shi; m_string="--->"; UpdateData(false); } int TtT(int m) {int k,j=0; double n; n=m; for(k=0;n>2;k++) {n=n/10;} if(m==1) k=0; return k; } void CMy1Dlg::OnMenuitem32792() //------------------------菜单。加 { // TODO: Add your command handler code here CMy1Dlg::OnButton14() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32793() //----------------------菜单。减 { // TODO: Add your command handler code here CMy1Dlg::OnButton15() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32794() { // TODO: Add your command handler code here//---------------菜单。乘 CMy1Dlg::OnButton16() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32795() //-------------------------------菜单。除 { // TODO: Add your command handler code here CMy1Dlg::OnButton17() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32796() //------------------------------菜单。与 { // TODO: Add your command handler code here CMy1Dlg::OnButton18() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32797() //------------------------------菜单。或 { // TODO: Add your command handler code here CMy1Dlg::OnButton19() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32798() //------------------------------菜单。非 { // TODO: Add your command handler code here CMy1Dlg::OnButton20() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32799() //------------------------------菜单。异或 { // TODO: Add your command handler code here CMy1Dlg::OnButton21() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32800() //-------------------------------菜单。正弦 { // TODO: Add your command handler code here CMy1Dlg::OnButton22() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32801() //-------------------------------菜单。余弦 { // TODO: Add your command handler code here CMy1Dlg::OnButton23() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32802() //-------------------------------菜单。正切 { // TODO: Add your command handler code here CMy1Dlg::OnButton24() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32791() //-------------------------------菜单。求余 { // TODO: Add your command handler code here CMy1Dlg::OnButton25() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32790() //---------------------------------菜单。阶乘 { // TODO: Add your command handler code here CMy1Dlg::OnButton26() ; CMy1Dlg::OnBUTTONequal(); } void CMy1Dlg::OnMenuitem32789() //--------------------------------菜单。复位 { // TODO: Add your command handler code here CMy1Dlg::OnButton10() ; } void CMy1Dlg::OnMenuitem32788() //---------------------------------菜单。退格 { // TODO: Add your command handler code here CMy1Dlg::OnBUTTONdelete(); } void CMy1Dlg::OnMenuitem32803() //----------------------------------菜单。十进制转二进制 { // TODO: Add your command handler code here CMy1Dlg::OnRadio1() ; } void CMy1Dlg::OnMenuitem32804() //---------------------------------菜单。二进制转十进制 { // TODO: Add your command handler code here CMy1Dlg::OnRadio2() ; } void CMy1Dlg::OnButton33() //--------------------------------------求倒数 { // TODO: Add your control notification handler code here UpdateData(true); m_2=1/m_1; m_string="->"; UpdateData(false); } void CMy1Dlg::OnMenuitem32809() //----------------------------------菜单求倒数 { // TODO: Add your command handler code here CMy1Dlg::OnButton33(); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值