-
[API]Message LoopC/C++ 2015. 3. 12. 23:04
메세지루프
- 윈도우즈 프로그램에서 메시지를 처리하는 부분
WinMain함수 끝에 존재하며, 메인윈도우를 만든후 메인함수는 메세지 루프를 실행한다.
while (GetMessage(&Message, NULL, 0, 0)) { TranslateMessage(&Message); DispatchMessage(&Message);
해당부분이 메세지루프이다.
BOOL GetMessage()
- 해당함수는 메시지 큐에서 메세지를 읽어들인다.
메세지큐란 시스템이나 ㅏ용자로부터 발생된 메세지가 잠시 대기하는 메시지 임시 저장영역이다.
읽어들인 메세지는 GetMessage함수의 인자인 MSG구조체에 저장된다.
읽어들인 메세지가 WM_QUIT라면 FALSE를 리턴하며 다른메세지일경우 TRUE를 리턴한다.
QUIT가아니면 루프가 계속돌며, QUIT가 발생할시 종료된다
BOOL TranlateMessage()
- 해당함수는 키보드 입력메시지를 해독해 프로그램에서 쉽게 쓸수있도록한다.
이 함수는 WM_KEYDOWN즉, 메시지가 입력되었을때 문자가입력되었다는 메시지를 만드는역할을 한다.
Q라는 키를 입력했으면 Q가 입력되었다고 메시지를 만든다.
BOOL DispatchMessage()
- 해당함수는 메시지 큐에서 꺼낸 메세지를 WndProc으로 전달한다.
메세지가 전달되면 윈도우 프로시저에서는 전달된 메세지를 확인하고 다음 동작을 결정하게된다.
이 함수가 메세지를 전달하게되면 루프처음부분으로 돌아가 계속 반복된다.
메세지루프에서는 메시지를 꺼내오고, 저장한후, 해독하여 프로그램에 전달하는 역할을한다.
종료 메세지가 아니면 계속해서 무한루프로 돌게된다.
실제로 메세지를 처리하는 함수는 WndProc이다
'C/C++' 카테고리의 다른 글
[API]WM_PAINT (0) 2015.03.12 [API]TextOut (0) 2015.03.12 [API]WndProc (0) 2015.03.12 API 기초(2) (0) 2015.03.12 API 기초 (0) 2015.03.12