VC++ 计算器.docx
《VC++ 计算器.docx》由会员分享,可在线阅读,更多相关《VC++ 计算器.docx(20页珍藏版)》请在冰豆网上搜索。
VC++计算器
//CalculatorDlg.cpp:
implementationfile
//
#include"stdafx.h"
#include"Calculator.h"
#include"CalculatorDlg.h"
#include"math.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#endif
//CAboutDlgdialogusedforAppAbout
Display*Pdisplay;
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
//DialogData
enum{IDD=IDD_ABOUTBOX};
protected:
virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport
//Implementation
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
END_MESSAGE_MAP()
//CCalculatorDlgdialog
CCalculatorDlg:
:
CCalculatorDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CCalculatorDlg:
:
IDD,pParent)
Cal_display(_T("WELCOME"))
{
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
Pdisplay=newDisplay(this);
}
voidCCalculatorDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
DDX_Text(pDX,IDC_EDIT1,Cal_display);
}
BEGIN_MESSAGE_MAP(CCalculatorDlg,CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
//ON_WM_KEYDOWN()
ON_BN_CLICKED(IDOK,&CCalculatorDlg:
:
OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL,&CCalculatorDlg:
:
OnBnClickedCancel)
ON_BN_CLICKED(IDCANCEL2,&CCalculatorDlg:
:
OnBnClickedCancel2)
ON_BN_CLICKED(IDOK4,&CCalculatorDlg:
:
OnBnClickedOk4)
ON_BN_CLICKED(IDOK6,&CCalculatorDlg:
:
OnBnClickedOk6)
ON_BN_CLICKED(IDOK2,&CCalculatorDlg:
:
OnBnClickedOk2)
ON_BN_CLICKED(IDCANCEL3,&CCalculatorDlg:
:
OnBnClickedCancel3)
ON_BN_CLICKED(IDOK3,&CCalculatorDlg:
:
OnBnClickedOk3)
ON_BN_CLICKED(IDCANCEL4,&CCalculatorDlg:
:
OnBnClickedCancel4)
ON_BN_CLICKED(IDCANCEL6,&CCalculatorDlg:
:
OnBnClickedCancel6)
ON_BN_CLICKED(IDCANCEL5,&CCalculatorDlg:
:
OnBnClickedCancel5)
ON_BN_CLICKED(IDCANCEL8,&CCalculatorDlg:
:
OnBnClickedCancel8)
ON_BN_CLICKED(IDCANCEL9,&CCalculatorDlg:
:
OnBnClickedCancel9)
ON_BN_CLICKED(IDCANCEL7,&CCalculatorDlg:
:
OnBnClickedCancel7)
ON_BN_CLICKED(IDOK5,&CCalculatorDlg:
:
OnBnClickedOk5)
ON_BN_CLICKED(IDOK7,&CCalculatorDlg:
:
OnBnClickedOk7)
ON_BN_CLICKED(IDCANCEL10,&CCalculatorDlg:
:
OnBnClickedCancel10)
ON_BN_CLICKED(IDOK8,&CCalculatorDlg:
:
OnBnClickedOk8)
ON_BN_CLICKED(IDCANCEL12,&CCalculatorDlg:
:
OnBnClickedCancel12)
ON_BN_CLICKED(IDCANCEL11,&CCalculatorDlg:
:
OnBnClickedCancel11)
ON_BN_CLICKED(IDOK9,&CCalculatorDlg:
:
OnBnClickedOk9)
ON_BN_CLICKED(IDCANCEL13,&CCalculatorDlg:
:
OnBnClickedCancel13)
ON_BN_CLICKED(IDOK10,&CCalculatorDlg:
:
OnBnClickedOk10)
ON_BN_CLICKED(IDCANCEL15,&CCalculatorDlg:
:
OnBnClickedCancel15)
ON_BN_CLICKED(IDCANCEL14,&CCalculatorDlg:
:
OnBnClickedCancel14)
ON_WM_KEYUP()
END_MESSAGE_MAP()
//CCalculatorDlgmessagehandlers
BOOLCCalculatorDlg:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE); //Setbigicon
SetIcon(m_hIcon,FALSE); //Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
//--------------------------------------------------------------------------------------------------
//voidCCalculatorDlg:
:
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)
//{
//inta=1;
//CDialog:
:
OnKeyDown(nChar,nRepCnt,nFlags);
//}
//voidCCalculatorDlg:
:
OnKeyUp(UINTnChar,UINTnRepCnt,UINTnFlags)
//{
//inta=1;
//
//CDialog:
:
OnKeyUp(nChar,nRepCnt,nFlags);
//}
voidCCalculatorDlg:
:
OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAbout.DoModal();
}
elseif(nID==SC_CLOSE)
{
CCalculatorDlg:
:
OnOK();
}
else
{
CDialog:
:
OnSysCommand(nID,lParam);
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCCalculatorDlg:
:
OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);//devicecontextforpainting
SendMessage(WM_ICONERASEBKGND,reinterpret_cast(dc.GetSafeHdc()),0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
//Drawtheicon
dc.DrawIcon(x,y,m_hIcon);
}
else
{
CDialog:
:
OnPaint();
}
}
//Thesystemcallsthisfunctiontoobtainthecursortodisplaywhiletheuserdrags
//theminimizedwindow.
HCURSORCCalculatorDlg:
:
OnQueryDragIcon()
{
returnstatic_cast(m_hIcon);
}
//------------------------------OnButtonnClicked部分-------------------------------------------------------------------------
voidCCalculatorDlg:
:
OnBnClickedOk()
{
Caldata.CLEAR();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel()
{
Caldata.MC();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel2()
{
Caldata.MR();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk4()
{
Caldata.KEYIN
(1);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk6()
{
Caldata.KEYIN(4);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk2()
{
Caldata.MM();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel3()
{
Caldata.MA();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk3()
{
Caldata.PN();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel4()
{
Caldata.ADD();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel6()
{
Caldata.KEYIN
(2);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel5()
{
Caldata.KEYIN(3);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel8()
{
Caldata.KEYIN(6);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel9()
{
Caldata.KEYIN(5);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel7()
{
Caldata.MINUS();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk5()
{
Caldata.Mode_Error=Caldata.SQRT();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk7()
{
Caldata.SQR();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel10()
{
Caldata.BY();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk8()
{
Caldata.KEYIN(7);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel12()
{
Caldata.KEYIN(8);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel11()
{
Caldata.KEYIN(9);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk9()
{
Caldata.Mode_Error=Caldata.REC();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel13()
{
Caldata.DIV();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedOk10()
{
Caldata.Dot();
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel15()
{
Caldata.KEYIN(0);
UpdateDisplay();
}
voidCCalculatorDlg:
:
OnBnClickedCancel14()
{
Caldata.Mode_Error=Caldata.EQUAL();
UpdateDisplay();
}
//------------------------------------------Display部分-----------------------------------------------------------------
voidCCalculatorDlg:
:
UpdateDisplay()
{
if(!
Caldata.Mode_Error)
{
if(!
(Caldata.Mode_Dot)){
Cal_display.Format(_T("%lf"),Caldata.Data_Display);
for(inti=Cal_display.GetLength()-1;i>1;i--) //去掉尾部多余的0,这个方法可共用,可以写成STATIC
{
if(Cal_display.GetAt(i)=='.')
break;
if(Cal_display.GetAt(i)=='0')
Cal_display.Delete(i);
elsebreak;
}
}
else{
if(Caldata.Data_Display!
=0)
{
intj=0;
Cal_display.Format(_T("%lf"),Caldata.Data_Display);
for(inti=Cal_display.GetLength()-1;i>1;i--)
{
if(Cal_display.GetAt(i)=='.')
break;
if(Cal_display.GetAt(i)=='0')
Cal_display.Delete(i);
elsebreak;
}
for(inti=Cal_display.GetLength()-1;i>1;i--)
{ if(Cal_display.GetAt(i)=='.')break;j++;}
if(j<=Caldata.Digi_Dot)
for(inti=0;i Cal_display.Append(_T("0"));
}
else{
Cal_display.Format(_T("0."));
for(inti=0;i {
Cal_display.Append(_T("0"));
}
}
}
}
elseCal_display.Format(_T("ERROR"));
UpdateData(false);
}
voidCCalculatorDlg:
:
ResetDisplay()
{
}
//--------------------------------CALDATA部分-----------------------------------------------------------
Cal_Data:
:
Cal_Data()
{
Data_Display=0;
Data_Remember=0;
Data_Last=0;
Mode_Remenber=false;
Mode_Input=false;
Mode_Dot=false;
Mode_Error=false;
Digi_Dot=0;
calaction=Cal_Action:
:
Action_Null;
}
voidCal_Data:
:
CLEAR()
{
Data_Display=0;
Data_Last=0;
Mode_Input=false;
Mode_Error=false;
Mode_Dot=false;
calaction=Cal_Action:
:
Action_Null;
}
voidCal_Data:
:
MA()
{
Data_Remember=Data_Remember+Data_Display;
}
voidCal_Data:
:
MM()
{
Data_Remember=Data_Remember-Data_Display;
}
voidCal_Data:
:
MR()
{
Data_Display=Data_Remember;
Mode_Input=false;
}
voidCal_Data:
:
MC()
{
Data_Remember=0;
Mode_Remenber=false;
}
voidCal_Data:
:
ADD()
{
Data_Last=Data_Display;
Mode_Dot=Mode_Input=false;
cala