⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calcudlg.cpp

📁 一个很完整的计算器代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	Swap = false;
	point = true;
	first = false;
	deletepoint = true;
	show();
}

void CCalcuDlg::OnButtonNine() 
{
	// TODO: Add your control notification handler code here
	double count9;
	if (m_EditNumber == L"Error")
		return;
	if (SetNew)
	{
		m_EditNumber = L" ";
		SetNew = false;
	}
	if (m_EditNumber == L"0")
		m_EditNumber = L"";
	m_EditNumber = m_EditNumber + L"9";
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
	count9=atof(temp);
	m_EditNumber.Format(L"%f",count9);
	SetPoint = true;
	Swap = false;
	point = true;
	first = false;
	deletepoint = true;
	show();
}

void CCalcuDlg::OnButtonDivide() 
{
	// TODO: Add your control notification handler code here
//	double b;
//	char temp[256];
	if (m_EditNumber == L"Error")
		return;
	OnButtonEqual();
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
	b=atof(temp);
	m_firstoperator=b;
	m_operate='/';
	SetNew = true;
	SetPoint = false;
	Swap = true;
	first = true;
	show();
	m_EditCopy = m_EditNumber;
	m_EditNumber = L"1";
}

void CCalcuDlg::OnButtonSqrt() 
{
	// TODO: Add your control notification handler code here
//	double b;
//	char temp[256];
	if (m_EditNumber == L"Error")
		return;
	if(Swap)
	{
		m_EditNumber = m_EditCopy;
		Swap = false;
	}
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
	b = atof(temp);
	SetNew = true;
	SetPoint = false;
	first = true;
	if (m_EditNumber == L"Error")
		return;
	if (b>=0)
	{
		m_firstoperator = sqrt(b);
	    m_EditNumber.Format(L"%f",m_firstoperator);
		m_EditCopy = m_EditNumber;
		show();
	}
	else
	{
		m_EditNumber = L"Error";
		UpdateData(false);
	}
	m_operate = '\0';
}

void CCalcuDlg::OnButtonEqual() 
{
	// TODO: Add your control notification handler code here

//	UpdateData(true);
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
	b=atof(temp);
	SetNew = true;
	SetPoint = false;
	if (m_EditNumber == L"Error")
		return;
	switch(m_operate)
	{
	case '+':
		m_firstoperator=b+m_firstoperator;
		m_EditNumber.Format(L"%f",m_firstoperator);
		show();
		break;
	case '-':
		m_firstoperator=m_firstoperator-b;
		m_EditNumber.Format(L"%f",m_firstoperator);
		show();
		break;
	case '*':
		m_firstoperator=b*m_firstoperator;
		m_EditNumber.Format(L"%f",m_firstoperator);
		show();
		break;
	case '/':
		if(b == 0.0) 
		{
			m_EditNumber = L"Error";
			show();
		}
		else
		{
			m_firstoperator=m_firstoperator/b;
			m_EditNumber.Format(L"%f",m_firstoperator);
			show();
		}
		break;	
	default:
		break;
	}
	m_operate = '\0';
	
}

void CCalcuDlg::OnButtonMadd() 
{
	// TODO: Add your control notification handler code here
	if (m_EditNumber == L"Error")
		return;
	SetNew = true;	
}

void CCalcuDlg::OnButtonZero() 
{
	// TODO: Add your control notification handler code here
	double count;
	if (m_EditNumber == L"Error")
		return;
	if (SetNew)
	{
		m_EditNumber = L" ";
		SetNew = false;
	}

	Swap = false;
	point = true;
	first = false;
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
	count=atof(temp);
	if (count == 0)
	{
		m_EditNumber = L"0";
		CEdit* pedit = (CEdit *)GetDlgItem(IDC_EDIT1);
		pedit->SetWindowText(m_EditNumber);
		return;
	}

	m_EditNumber = m_EditNumber + L"0";
	CEdit* pedit = (CEdit *)GetDlgItem(IDC_EDIT1);
	pedit->SetWindowText(m_EditNumber);

}

void CCalcuDlg::OnButtonSign() 
{
	// TODO: Add your control notification handler code here
//	double b;
//	char temp[256];
	if (m_EditNumber == L"Error")
		return;
	if (Swap)
	{
		m_EditNumber = m_EditCopy;
		Swap = false;
	}
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
    b=atof(temp);
//	SetNew = true;
	SetPoint = false;
	b=-b;
    m_EditNumber.Format(L"%f",b);
	show();
	m_operate = '\0';
}

void CCalcuDlg::OnButtonPoint() 
{
	// TODO: Add your control notification handler code here
	if (m_EditNumber == L"Error")
		return;
	if (first)
	{
		m_EditNumber = L"0.";
		UpdateData(false);
		first = false;
		SetNew = false;
		return;
	}
	deletepoint = false;
	SetNew = false;
	if(point)
	{
		if (m_EditNumber == "0")
		{
			m_EditNumber=m_EditNumber+L".";
			UpdateData(false);
			return;
		}
		int i = m_EditNumber.GetLength();
		while (i>=1)
		{
			if(m_EditNumber.GetAt(i-1)=='.')
				return;
			i--;
		}
		m_EditNumber=m_EditNumber+L".";
		point = false;
	}
	show();
}

void CCalcuDlg::OnButtonAdd() 
{
	// TODO: Add your control notification handler code here
//	double b;
//	char temp[256];
//memset(temp,'\0',256);
	if (m_EditNumber == L"Error")
		return;
	OnButtonEqual();
	MyStrcpy(temp,m_EditNumber);
	temp[m_EditNumber.GetLength()]='\0';
	b=atof(temp);
	m_firstoperator=b;
	b = 0;
	SetNew = true;
	SetPoint = false;
	Swap = true;
	first = true;
	show();
	m_EditCopy = m_EditNumber;
    m_operate='+';
	m_EditNumber = L"0";
}

void CCalcuDlg::OnButtonC() 
{
	// TODO: Add your control notification handler code here
	m_EditNumber = L"0";
	m_firstoperator = 0.0;
	m_operate = '\0';
	SetNew = true;
	Swap = false;
	point = true;
	UpdateData(false);
}

void CCalcuDlg::OnButtonCe() 
{
	// TODO: Add your control notification handler code here
	m_EditNumber = L"0";
	UpdateData(false);
	SetNew = true;
}

void CCalcuDlg::OnButtonBackspace() 
{
	// TODO: Add your control notification handler code here
	if (m_EditNumber == L"Error")
		return;
	if (Swap)
	{
		m_EditNumber = m_EditCopy;
		Swap = false;
	}	
	int i = m_EditNumber.GetLength();
	if (i>=1)
	{
		m_EditNumber.Delete(i-1,1);
		UpdateData(false);
		if (i == 1)
		{
			m_EditNumber = L"0";
			SetNew = true;
			UpdateData(false);
		}
	}
}


void CCalcuDlg::OnButtonPercent() 
{
	// TODO: Add your control notification handler code here
//	double b;
//	char temp[256];
	if (m_EditNumber == L"Error")
		return;
	if (Swap)
	{
		m_EditNumber = m_EditCopy;
		Swap = false;
	}	
	memset(temp,'\0',256);
	MyStrcpy(temp,m_EditNumber);
    b=atof(temp);
	SetNew = true;
	SetPoint = false;
	first = true;
	m_firstoperator=b/100;
	m_EditCopy = m_EditNumber;
	m_EditNumber.Format(L"%f",m_firstoperator);
	m_EditCopy = m_EditNumber;
	show();
	m_operate = '\0';
}

void CCalcuDlg::show()
{
	int i = m_EditNumber.GetLength();
	while ((i>=1)&&(m_EditNumber.GetAt(i-1)=='0'))
	{
		if (m_EditNumber == L"0")
			break;
		m_EditNumber.Delete(i-1,1);
		i-=1;
	}

	if (m_EditNumber == L"0")
	{
		CEdit* pedit=(CEdit *)GetDlgItem(IDC_EDIT1);
		pedit->SetWindowText(m_EditNumber);
		UpdateData(false);
		return;
	}

	if (deletepoint)
	{
		if (m_EditNumber.GetAt(i-1)=='.')
		{
			m_EditNumber.Delete(i-1,1);
			UpdateData(false);
			return;
		}
	}

	if (!SetPoint)
	{
		if (m_EditNumber.GetAt(i-1)=='.')
		{
			m_EditNumber.Delete(i-1,1);
		}
		
	}

	CEdit* pedit=(CEdit *)GetDlgItem(IDC_EDIT1);
	pedit->SetWindowText(m_EditNumber);
	UpdateData(false);
}

void CCalcuDlg::MyStrcpy(char *strdes,CString strsuc)
{
	LPWSTR mytemp=strsuc.GetBuffer(strsuc.GetLength());
	int relen=::WideCharToMultiByte(CP_ACP, 0, mytemp, strsuc.GetLength(), strdes, 256, NULL, NULL);
}

void CCalcuDlg::OnButtonMs() 
{
	// TODO: Add your control notification handler code here
	
		if (m_EditNumber == L"Error")
			return;
		memset(temp,'\0',256);
		MyStrcpy(temp,m_EditNumber);
		Savedata=atof(temp);
	

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -