밑에서 알아본 컨트롤로 계산기를 만들어봅시다.



 이 모양대로 리소스를 추가한 뒤 아이디와 캡션명을 변경해줍니다. 저는 IDC_BUTTON1 부터 0~9로 했습니다.


 실제 계산기처럼 입력란의 정렬을 바꿔줍니다.






 [클래스마법사]-[가상함수]-OnCommand 를 추가해줍니다.


 올바른 버튼이 눌렀을 때 동작하도록 함수 내부에 범위를 설정해줍니다.

BOOL CTestCarlDlg::OnCommand(WPARAM wParam, LPARAM lParam)

{

if (IDC_BUTTON1 <= wParam && wParam <= IDC_BUTTON10){//숫자 버튼 0~9가 눌렸을때만 작동

CString num_str,str;

num_str.Format(L"%d", wParam - IDC_BUTTON1);//입력한 값이 문자열로 num_str에 저장됨


GetDlgItemText(IDC_EDIT1, str);//사용자가 입력한 값을 가져옴 

SetDlgItemText(IDC_EDIT1, str + num_str);

}


return CDialogEx::OnCommand(wParam, lParam);

}


 

 4칙연산 버튼을 추가하고 각각 더블클릭해 함수를 생성합니다.

헤더파일로 가서 변수를 추가해줍니다.




 헤더파일에 선언

private :

char m_op_flag = 0;//0:덧셈,1:뺄셈,2:곱셈,3:나눗셈

char m_step_flag = 0;//연산자가 눌러졌는지 기억, 1 되있으면 기존 숫자를 지울려고



void CTestCarlDlg::OnBnClickedAddBtn()

{

m_op_flag = 0;//덧셈일 때

m_step_flag = 1;//연산자가 한번 눌러졌다는 뜻

}



void CTestCarlDlg::OnBnClickedSubBtn()

{

m_op_flag = 1;

m_step_flag = 1;

}



void CTestCarlDlg::OnBnClickedNulBtn()

{

m_op_flag = 2;

m_step_flag = 1;

}



void CTestCarlDlg::OnBnClickedDivBtn()

{

m_op_flag = 3;

m_step_flag = 1;

}


BOOL CTestCarlDlg::OnCommand(WPARAM wParam, LPARAM lParam)

{

if (IDC_BUTTON1 <= wParam && wParam <= IDC_BUTTON10){

CString num_str,str;

num_str.Format(L"%d", wParam - IDC_BUTTON1);


if (m_step_flag == 0) GetDlgItemText(IDC_EDIT1, str);//값이 입력되지 않았을 때 사용자가 입력한 값을 가져옴 

else {

m_step_flag = 0;

}

SetDlgItemText(IDC_EDIT1, str + num_str);

}


return CDialogEx::OnCommand(wParam, lParam);

}



 이때 입력된 값들을 저장하기 위해 헤더파일에서 하나 더 선언해준다

int m_first_value = 0;


BOOL CTestCarlDlg::OnCommand(WPARAM wParam, LPARAM lParam)

{

if (IDC_BUTTON1 <= wParam && wParam <= IDC_BUTTON10){

CString num_str,str;

num_str.Format(L"%d", wParam - IDC_BUTTON1);


if (m_step_flag == 0) GetDlgItemText(IDC_EDIT1, str);//사용자가 입력한 값을 가져옴 

else {

m_first_value = GetDlgItemInt(IDC_EDIT1);//값을 백업

m_step_flag = 0;

}

SetDlgItemText(IDC_EDIT1, str + num_str);

}


return CDialogEx::OnCommand(wParam, lParam);

}



 =버튼을 추가한 뒤 함수를 만들어줍니다.

void CTestCarlDlg::OnBnClickedEqBtn()

{

int second_value = GetDlgItemInt(IDC_EDIT1);


switch (m_op_flag){

case 0:

m_first_value += second_value;

break;

case 1:

m_first_value -= second_value;

break;

case 2:

m_first_value *= second_value;

break;

case 3:

if (second_value != 0) m_first_value /= second_value; //나눗셈의 경우 0으로 나누면 프로그램이 죽을 있다.

else m_first_value = 0;

break;

}

SetDlgItemInt(IDC_EDIT1, m_first_value);

m_step_flag = 1;

}



 


 우선 사칙연산이 구현되었습니다.

'Programming > Win32 API & MFC' 카테고리의 다른 글

MFC 10 : 대화상자 컨트롤 2  (0) 2015.08.19
MFC 09 : 계산기 만들기 2  (1) 2015.08.16
MFC 07 : 대화상자 컨트롤  (0) 2015.08.15
MFC 06 : 짝맞추기 게임 2  (2) 2015.08.13
MFC 05 : 짝맞추기 게임 1  (1) 2015.08.12

+ Recent posts