본문 바로가기
Software/C++&MFC 핵심노트

[C++/MFC 핵심노트] 실습용 더미 프로젝트 만들기

by lovey25 2018. 11. 6.
반응형

2018-12-20 update log: 화면출력관련, 일정한 코드를 사용할 수 있도록 myprint()함수 및 edit control 사용
2018-11-21 update log: 누락사항 수정


프로그래밍을 공부하는데 가장 중요한 것은 실습입니다.

제가 소개해 드리는 MFC 기본강좌에서 실습이 필요한 코드가 있을 때 그 코드를 바로 넣어서 사용하기 위해서 MFC 기반의 더미 프로젝트를 만들어 놓고 실습에 사용하도록 하겠습니다.

MFC 기반의 프로그램 만들기라는 목적 지향적 강좌이기 때문에 보통 교재에서 소개하는 콘솔 기반의 프로그램과는 다르게 윈도우 기반의 프로그램에서 출발하려 합니다. 참고해 주세요.

실습용 더미 프로젝트를 만들기

프로젝트의 시작은 언제나 비슷하기 때문에 지난 강좌의 "[C++/MFC 기본강좌] MFC를 이용한 윈도우 프로그램 5분만에 만들기"에서 만든 프로젝트를 열어서 계속 작업을 해 나가도록 하겠습니다.

MyFirstProgram.sln 파일 열기

자 VS를 실행하고 지난번에 만들어 놓은 "MyFirstProgram.sln" 솔루션 파일을 열어 줍니다. 아니면 아래 그림처럼 최근 항목에서 바로 해당 솔루션을 선택해 줘도 되겠죠.

그러면 지난번에 보았던 다이얼로그 편집기가 다시 나타나게 됩니다.
자 여기서 가운데 있는 필요없는 글씨는 지워 줍니다. 글자 부분을 선택을 하고 가볍게 delete 키를 눌러주면 지워집니다.

다이얼로그 디자인

만약 다이얼로그 편집기가 보이지 않는다면 아래 그림처럼 솔루션 탐색기탭에서 "리소스 파일"이라는 필터 안에 있는 "MyFirstProgram.rc"라는 파일을 더블클릭 합니다. 그러면 오른쪽 그림처럼 리소스 뷰로 이동이 되게 되는데 다이얼로그 폴더안에 있는 IDD_MYFIRSTPROGRAM_DIALOG라는 리소스를 선택하면 다이이얼로그 편집기에서 메인 다이얼로그를 볼수 있습니다.

 

이제 버튼 하나를 만들어 보겠습니다.

실습용 코드를 실행하기위한 시작점으로 이 버튼을 사용하려 합니다.

오른쪽 "도구상자" 탭을 열어서 "대화 상자 편집기" 아래있는 "Button" 편집기를 선택해서 다이얼로그 안쪽으로 쭈욱 드래그 합니다.

코딩하기

자 이제 버튼이 생겼습니다. 이 버튼을 더블클릭 해 줍니다.

이제 코드 편집기 화면으로 이동을 하게 되는데 방금한 더블클릭 동작으로 VS는 자동으로 해당 버튼을 클릭하게 되면 호출이 되는 함수를 만들어줍니다. 참 편하죠?! 

아래 화면이 자동으로 함수가 만들어진 코드입니다. 이 코드는 전체 솔루션에서 어느 위치에 있는지 정도만 확인하고 넘어가겠습니다.

1. 솔루션 탐색기안에 있는 여러 파일들 중에
2. MyFirstProgram.cpp라는 파일이 해당 코드가 있는 파일입니다.
3. 편집기 윗 부분에 보시면 Dropdown 버튼이 있는데 해당파일 안에 어떤 함수들이 있는지 일목요연하게 정리되어 있는 부분입니다. 우리가 만든 OnBnClickedButton1() 함수를 선택하면 파일에서 함수가 있는 위치로 자동으로 이동하게 됩니다. 

함수가 무엇인지 그리고 왜 이런 형태인지는 무시하고 이거 하나만 기억하도록 하겠습니다.

우리가 만든 버튼을 클릭하게 되면 프로그램은 즉시 이 함수를 호출하고 함수 내부의 코드들을 실행하게 됩니다. 버튼의 이름은 수정하지 않았다면 "Button 1"일텐데 이 버튼을 클릭했을 때 실행되는 함수의 이름은 "OnBnClickedButton1()" 이 되네요.

이제 결과를 표시할 수 있도록 에디트박스도 하나 추가해 주겠습니다.

위에 있는 그림처럼 우측의 도구상자에서 "Edit Control"이라는 녀석을 쭈욱 드래그 해서 2번위치인 다이얼로그 안쪽에 드랍합니다. 그럼 하얀색 박스가 하나 생깁니다. 이쁘게 크기도 변경합니다.

이 에디트 박스에 마우스 우클릭을 해서 "변수 추가"라는 메뉴를 선택해 줍니다.

제어 변수 추가라는 창이 뜨게 되는데요 여기서 두가지만 변경합니다.

1. 범주를 값으로 컨트롤로 되어 있는지 확인하고,
2. 이름을 edit_result라고 변경했습니다. 

그리고 마침 버튼을 눌러줍니다.

이제 다시 "Edit Box"를 다시 마우스 우클릭하고, 이번엔 속성을 눌러서 속성창을 열어줍니다.

속성창이 열리면 목록에서 "Multiline"이라는 항목을 찾아보면 기본값으로 아마 "Flase"로 설정되어 있을텐데요 이걸 "True"로 고쳐줍니다. 개행문자 입력을 받아서 여러줄로 표시되도록 할것인지를 선택하는 부분입니다. 우리는 실습의 결과를 출력할 때 줄 구분을 사용할 수 있으면 가독성이 높아질 수 있겠죠.

자 이제 마무리 단계입니다.

아까 만들었던 Button1의 호출함수로 다시 찾아갑니다. (어떻게 찾아가냐구요? 앞에 내용 다시 읽어봐주세요)

그리고 해당 함수를 아래처럼 되도록 이 코드에서 4번째 줄부터 13번째 줄까지 복사해서 붙여넣기 해 줍니다.

void CMyFirstProgramDlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

	// ↓↓↓ << 실습용 코드가 시작되는 위치 입니다. >> ↓↓↓
	// ------------------------------------------------------
	
		

	// ------------------------------------------------------
	// ↑↑↑ << 실습용 코드가 끝나는 위치 입니다. >> ↑↑↑

	UpdateData(FALSE);
}

그리고 방금 수정한 Button1의 호출함수 바로 위에다가 아래 코드를 다시 붙여넣기 합니다.

void myprint(int i)
{
	CMyFirstProgramDlg* c = (CMyFirstProgramDlg*)::AfxGetMainWnd();
	CString result;
	result.Format(_T("%d"), i);
	c->edit_result += result;
}

void myprint(CString str)
{
	CMyFirstProgramDlg* c = (CMyFirstProgramDlg*)::AfxGetMainWnd();
	c->edit_result += str;
}

이 두가지 함수는 화면 출력을 위한 함수인데, list control을 사용해야 하는 환경적 제약에서 실습코드를 최대한 일관되게 만들 수 있도록 고민한 결과입니다.

자 이제 감이 오시죠?

앞으로 실습할 때 이 함수의 내부에 실습코드를 붙여넣기 하시고 컴파일을 한다음 버튼을 눌러서 테스트 해 보시면 되겠습니다.

실습을 위한 더미 프로그램이니 왜 이렇게 해야 하는지, 저 코드가 의미하는게 뭔지는 너무 고민하지 마시고 그냥 기계적으로 따라해 주세요. 앞으로 시간이 흐르면서 자연스럽게 이해가 될 수 있을거니까요.

 

끝!

반응형

댓글