메시지 처리의 기본 개념
- 메시지
- 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값
- 윈도우 프로그래밍
- 가장 중요한 것은 메시지를 처리하는 것
- 메시지의 종류
- 윈도우 메시지
-
- WM_로 시작하는 메시지 (WM_COMMAND는 제외)
- 매개 변수가 있어 메시지를 어떻게 처리할 것인지를 결정
- 윈도우 관리 메시지 : 윈도우의 상태가 바뀔 때 발생
- 초기화 메시지 : 응용 프로그램이 메뉴나 대화상자를 구성할 때 발생
- 입력 메시지 : 마우스, 키보드로 입력할 때 발생
- 메시지의 종류
- 컨트롤 통지 메시지
- Button, Combo Box와 같은 제어 객체나 자식 윈도우에서 부모 윈도우로 보내는 메시지
- 명령 메시지
- 메뉴, 툴바,엑셀레이터 키와 같은 사용자 인터페이스 객체로부터 발생되는 WM_COMMAND 메시지
- 명령메시지는 윈도우뿐만 아니라 도큐먼트, 도큐먼트 템플릿, 뷰, 다른 애플리케이션 객체에 의해서도 발생될 수있다.
- SDK 프로그램
- 들어온 메시지를 switch문을 사용하여 처리
- MFC 프로그램
- 메시지 처리를 위해 메시지 맵을 사용
- 메시지 맵
- 메시지 번호와 메시지가 발생하였을 때 호출되는 함수의 포인터 등의 정보를 갖고 있는 테이블
- 프로그램에 전달된 메시지와 메시지 핸들러 함수를 연결하는데 사용
- 파생 클래스의 메시지 핸들러 함수가 우선
- 메시지 처리 단계
- 윈도우 클래스의 멤버 함수로 메시지 핸들러 함수를 선언한다
- 메시지 맵에 메시지와 메시지 핸들러 함수를 묶는 메시지의 매크로를 추가한다.
- 메시지 핸들러 함수의 기능을 구현한다.
- 클래스 위자드
- 위의 세 가지 단계에서 마지막 단계의 메시지 핸들러 함수의 본체만 사용자가 구현하도록 나머지는 자동으로 코딩을 해준다.
- 메시지 핸들러 함수
- 윈도우로부터 애플리케이션에 메시지가 전달될 때 해당 메시지를 처리하는 멤버 함수
- 함수 이름
- 윈도우 메시지의 WM_을 떼고 대신 On을 붙여 시작한다.
- 함수 선언시 afx_msg는 메시지 핸들러 함수라는 것을 나타내는 말이다.
- 예
- //{AFX_MSG(Practice2_1View)
- Afx_msg void OnKeyDown();
- …
- //}AFX_MSG
- 윈도우 관리 메시지와 메시지 핸들러 함수
메시지 유형 | 발생 상황 | 메시지 핸들러 함수 |
WM_CREATE | 윈도우가 생성될 때 | OnCreate() |
WM_ACTIVE | 윈도우가 활성화 될 때 | OnActive() |
WM_PAINT | 윈도우가 다시 그려질 때 | OnPaint() |
WM_SIZE | 윈도우 크기가 변경될 때 | OnSize() |
WM_MOVE | 윈도가 움직일 때 | OnMove() |
WM_TIMER | 설정된 타이머 시간이 됐을 때 | OnTimer() |
WM_DESTROY | 윈도우가 종료될 때 | OnDestroy() |
메시지 박스
- AfxMessageBox() 함수
- 사용자에게 간단한 메시지를 출력하는데 사용되는 대화상자
- 함수 원형
- Int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0)
-
- lpszText : 출력하고자 하는 문자열
- nType : 대화상자에 설정되는 버튼
- nIDHelp : 현재 상태에서 F1키를 눌러 도움말을 실행하였을 때의 도움말 ID
- 디폴트 메시지 박스 스타일과 아이콘
- 메시지 박스 : MB_OK
- 아이콘 : MB_ICONEXCLAMATION
- 메시지 박스 스타일과 반환 값
메시지 박스 스타일 | 사용 가능한 버튼 | 반환 값 |
MB_OK | 확인 | IDOK |
MB_OKCANCEL | 확인, 취소 | IDOK,IDCANCEL |
MB_YESNO | 예, 아니오 | IDYES,IDNO |
MB_YESNOCANCEL | 예, 아니오, 취소 | IDYES,IDNO, IDCANCEL |
MB_RETRYCANCEL | 재시도, 취소 | IDRETRY,IDCANCEL |
MB_ABORTRETRYIGNORE | 취소, 재시도, 무시 | IDABORT,IDRETRY,IDIGNORE |
- 아이콘 스타일
클래스 위저드(ClassWizard)
- 클래스 위저드의 기능
- 메시지 매핑 기능
- 클래스에 멤버를 설정
- OLE Automation 설정
- Active X Event 설정
- 클래스 정보 설정