[MFC] 1장: 윈도우 프로그래밍 모델
2011. 2. 16. 05:14
반응형
[ 교재 ]
열혈강의 Visual C++ 2008 MFC 윈도우 프로그래밍
저자 최호성 / 출판사 프리렉
1장: 윈도우 프로그래밍 모델
1. Hello World
- WinMain() 함수를 통해 프로그램 시작
- 사용자의 입력 이벤트는 메시지로 전환됨
- 윈도우 운영체제는 이벤트에 따른 메시지를 메시지 큐에 추가함
- 메인 메시지 루프는 메시지 큐에서 메시지를 꺼내서(Get Message() 함수) 처리(DispatchMessage() 함수)하는 핵심 코드임
- 윈도우 종료 메시지를 처리하면 메인 메시지 루프가 끝나고 응용 프로그램이 종료됨
int APIENTRY _tWinMain(…생략)
{
…생략
// 기본 메시지 루프입니다.
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
…생략
}코드설명:
GetMessage() 함수를 통해 메시지 큐(Message Queue)에서 메시지(Message)를 가져올 수 있으면 프로그램이 계속 실행되고, 메시지를 못 가져오게 되어 함수가 False를 리턴하면 프로그램이 종료됨
2. 메시지 큐(Message Queue)
- 마우스 클릭 이벤트 발생하고 이것을 운영체제가 감지함
- 윈도우 운영체제가 해당 이벤트의 메시지를 만든 후 자신이 갖는 시스템 큐에 메시지 추가
- 마우스 클릭 위치 등의 정보를 토대로 메시지를 전달할 응용 프로그램을 선택. 그리고 해당 프로그램의 메시지 큐에 메시지 전달하고 시스템 큐에서는 제거
- 새로운 메시지를 프로그램의 메시지 큐에 추가
- 프로그램의 프로세스가 메인 메시지 루프를 돌면서 메시지 큐에 메시지가 있는지 검사. 그러다가 새로운 메시지가 있으면 메시지 큐에서 꺼냄. 이 메시지를 인자로 윈도우 프로시저 함수를 호출
- 윈도우 프로시저 함수는 마우스 클릭으로 발생한 메시지에 해당하는 처리를 하고 결과를 프로그램에 반영
3. Message Driven 방식
Windows는 메시지 기반으로 동작(Message Driven)한다.
윈도우에서 메시지란? 모든 것이 "다"
예: 메모장이 화면 상에 나타나고, 이동하고, 키보드 입력을 받으면→메시지 생성
※ Main Message Loop가 멈추면(메시지 처리가 불가능) → "응답 없음"
반응형
'프로그래밍 실습 > MFC' 카테고리의 다른 글
[MFC] 6장: 마우스 입력 (0) | 2011.02.25 |
---|---|
[MFC] 5장: 키보드 입력 (1) | 2011.02.16 |
[MFC] 4장: MFC SDI 어플리케이션 흐름 (0) | 2011.02.16 |
[MFC] 3장: MFC 프로그램 기본 구조 (0) | 2011.02.16 |
[MFC] 2장: CWnd 클래스 (0) | 2011.02.16 |