.cpp
파일에 해당하는 함수가 생성된다..h
헤더 파일에 사용할 변수 선언CString m_but; //숫자(문자)
CString m_result; //에디트 컨트롤
bool m_equalClk; //클릭 확인
int m_type; //연산자 타입
#define
: 매크로를 정의할 때 앞에 붙이는 키워드로 가독성을 높여주고 변수보다 처리 속도가 빠르다.SetWindowText()
로 타이틀 변경m_equalClk = false
: 변수의 값을 에디트 컨트롤에 출력UpdateDate(false)
: 변수의 값을 에디트 컨트롤에 출력true
선언void CMfcProject1Dlg::OnBnClickedButton0()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
if (m_equalClk) {
m_result.Empty();
m_equalClk = false; // 변수를 컨트롤에 출력
}
m_result += _T("0");
UpdateData(false); //화면에 출력
}
void CMfcProject1Dlg::OnBnClickedButtonplus()
{
m_type = plus;
m_but = m_result;
m_result.Empty();
}
void CMfcProject1Dlg::OnBnClickedButtonminus()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
m_type = minus;
m_but = m_result;
m_result.Empty();
}
.
.
.
void CMfcProject1Dlg::OnBnClickedclear()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
m_result.Empty();
UpdateData(false);
}
_tstof
: Microsoft Visual Studio에서 사용되는 함수로 유니코드 문자열을 부동 소수점 숫자로 변환한다. void CMfcProject1Dlg::OnBnClickedButtonequal() // 연산
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
double op1, op2, result;
op1 = _tstof(m_but); //문자를 숫자로 변환
op2 = _tstof(m_result);
switch (m_type) {
case plus :
result = op1 + op2;
break;
case minus :
result = op1 - op2;
break;
case multi :
result = op1 * op2;
break;
case divide :
result = op1 / op2;
break;
default:
result = 0.0; // 기본값 설정
break;
}
// result 값이 6자리 이상 소수인 경우 소수점 이하 6자리까지 출력, 그렇지 않은 경우 필요한 만큼만 출력
// static_cast로 result값을 정수형으로 변환
// result가 0 이 아닌 값 || result가 1000000.0보다 크거나 같음
if (result == static_cast<int>(result) || result >= 1000000.0) {
m_result.Format(_T("%d"), static_cast<int>(result)); // 소수점 이하 부분을 제외하고 정수만 출력
}
else {
CString resultStr;
resultStr.Format(_T("%.6f"), result); // 소수점 이하 6자리까지 출력
int length = resultStr.GetLength();
while (resultStr[length - 1] == '0') { //소수점 이하의 0을 제거
length--;
}
if (resultStr[length - 1] == '.') { //마지막 소수점 문자 제거
length--;
}
m_result = resultStr.Left(length); // 최종으로 수정된 길이로 문자열 잘라서 m_result에 저장
}
//m_result.Format(_T("%.6f"), result);
UpdateData(false);
m_equalClk = true;
}