2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 1 -
● 아래와 같이 대화상자 기반으로 프로젝트(Mine)를 생성하고, 디자인 하시오.
컨트롤
Static Text
Button Control
Button Control
Button Control
ID
IDC_STATIC
IDC_BUTTON_EASY
IDC_BUTTON_NORMAL
IDC_BUTTON_HARD
Caption
난이도 선택
초급
중급
고급
Event
Func.
OnBnClickedButtonEasy
( )
OnBnClickedButtonNormal
( )
OnBnClickedButtonHard
( )
- L버튼 (IDC_BUTTON_EASY) 컨트롤에 대한 이벤트 핸들러 추가하기
- 상기 다이얼로그에서 초급 버튼을 눌렀을 때 새로운 다이얼로그로 띄우기 위해 아
래와 같이 새로운 다이얼로그를 삽입(①)하고 클래스를 추가(②)하자.
(다음 페이지에서 설명)
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 2 -
① 새로운 다이얼로그 삽입
② 추가된 다이얼로그를 컨트롤 할 클래스 추가
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 3 -
- 새로 추가한 다이얼로그에 아래와 같이 디자인하자.
→ Button 컨트롤 추가.
→ Static 컨트롤에 int형으로 m_nTime, m_nMine 변수를 추가.
(주의 변수 추가 시, 새로 만든 다이얼로그의 클래스에 추가해야 함.)
- 메인 다이얼로그(CMineDlg)에서 초급 버튼을 클릭하였을 때 추가한 다이얼로그
(CEasyDlg)를 띄우기 위해 아래와 같이 CMineDlg에 변수를 추가하고 코딩하자.
→ CMineDlg 클래스에 CEasyDlg 클래스의 Easy 변수 추가
→ CMineDlg 헤더의 맨 윗줄에 #include “CEasyDlg.h” 추가하기
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 4 -
- 아래와 같이 CMineDlg 클래스의 OnBnClickedButtonEasy( ) 함수에 새로 만든 다이얼
로그 창을 띄우자.
현재까지의 내용을 실행해보자.
※ CEssyDlg 클래스에 변수, 함수, 메시지 추가하기.
● 멤버변수 추가하기
멤버 변수
내용
int Block[10][10]
각 블럭의 상태 (0.기본상태 1.열린상태 2.깃발상태)
int Mine[10][2]
지뢰의 위치를 저장하는 배열
int SelectedBlock[2]
선택된 블럭을 저장하기 위한 배열
bool IsLbtnClicked
좌클릭이 되어있는지 표시하기 위한 변수(주변 열기에 사용)
bool IsStarted
게임이 시작되었는지 나타내기 위한 변수(타이머 설정에 사용)
● 멤버함수 추가하기
멤버 변수
내용
void InitDlg( )
초기화 함수
void GameOver( )
게임오버 시 실행할 함수
void Clear( )
게임클리어 시 실행할 함수
bool ClearCheck( )
게임이 클리어 되었는지 체크하는 함수
void Open(int x, int y)
블럭을 열기위한 함수
void Flag(int x, int y)
블럭에 깃발을 표시하기 위한 함수
void OpenSurround(int x, int y)
주변열기를 위한 함수
● 메시지 추가하기
메시지
처리기 함수
내용
WM_LBUTTONDOWN
OnLButtonDown
좌버튼 클릭
WM_LBUTTONUP
OnLButtonUp
좌버튼 놓기
WM_MBUTTONDOWN
OnMButtonDown
휠버튼 클릭
WM_RBUTTONDOWN
OnRButtonDown
우버튼 클릭
WM_TIMER
OnTimer
타이머
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 5 -
- CEasyDlg 클래스에 멤버변수, 멤버함수 등이 추가된 화면 (확인용)
- CEasyDlg 클래스의 DoDataExchange (확인용)
- CEasyDlg 클래스의 메시지 맵 (확인용)
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 6 -
▶ 초기화 함수 구현: void CEasyDlg::InitDlg(void)
▶ 시작 버튼 함수 구현: void CEasyDlg::OnBnClickedButtonStart( )
실행해보자.
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 7 -
▶ 열기 함수 구현: void CEasyDlg::Open( )
다음 페이지에 이이서...
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 8 -
▶ bool CEasyDlg::ClearCheck( )
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 9 -
▶ void CEasyDlg::Clear( )
▶ void CEasyDlg::GameOver( )
▶ 메시지 처리 함수 : void CEasyDlg::OnTimer( )
▶ 메시지 처리 함수 : void CEasyDlg::OnLButtonDown( )
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 10 -
▶ 메시지 처리 함수 : void CEasyDlg::OnLButtonUp( )
현재까지의 내용을 실행해보자. ( 열기 동작이 제대로 동작하는가? )
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 11 -
▶ 깃발 표시 동작 관련 함수 구현: void CEasyDlg::Flag(int x, int y)
2020-1학기 고급프로그래밍1 (11주차 수업자료 – 1) 박 기 홍
- 12 -
▶ 깃발 표시 동작 관련 함수 구현: void CEasyDlg::OpenSurround(int x, int y)
▶ 메시지 처리 함수 : void CEasyDlg::OnMButtonDown( )
▶ 메시지 처리 함수 : void CEasyDlg::OnRButtonDown( )