본문 바로가기

Subject/Programming

WinAPI] First 예제 해석(메시지 처리 루프)

0. 설명


 -윈도우즈는 메시지 구동 시스템(Message Driven System)이다.

 -메시지 구동 시스템이란 정해진 순서가 아니라, 

 발생한 이벤트 메시지(키보드 입력, 마우스 클릭 등)에 따라 관련된 일 처리를 진행하는 방식을 뜻한다.

 -이러한 메시지 처리를 담당하는 것이 메시지 루프이다.




1. 구성(메시지 처리 루프)


 while(GetMessage(&Message, NULL, 0, 0))

{

TranslateMessage(&Message);

DispatchMessage(&Message);

}



 1)GetMessage


 BOOL WINAPI GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax)


 -메시지 큐에서 메시지를 읽어들임. (*Message Queue: 시스템이나 사용자로부터 발생한 메시지가 임시 저장되는 곳)

 -해당 메시지(lpMsg)가 WM_QUIT(프로그램을 종료해라)일 경우 FALSE, 그 외에는 모두 TRUE 리턴.

    >따라서, 프로그램 종료 메시지가 뜰 때까지 메시지 루프가 반복됨. 

 -나머지 인자는 잘 사용되지 않으므로 패스.(책에 따르면)



 2)TranslateMessage


 BOOL WINAPI TranslateMessage(const MSG *lpMsg)


 -키보드 입력 메시지를 가공하여 프로그램에서 사용하도록 함(책 설명이 애매함)

  예) 키보드 눌림(WM_KEYDOWN)이 발생하였을 때 문자가 입력되었다는 메시지(WM_CHAR)를 생성.


 

 3)DispatchMessage


 BOOL DispatchMessage(const MSG *lpmsg);


 -가공된 메시지를 메시지 처리 함수(WinPro)로 전달 

 



2. MSG 구조체 


 -메시지 종류(자주 사용되는 것)

 VM_QUIT: 프로그램이 끝남

 VM_LBUTTONDOWN: 마우스 좌측 버튼 클릭

 VM_KEYDOWN: 키보드 키 누름

 VM_CHAR: 키보드로부터 문자가 입력됨.

 VM_PAINT: 화면을 다시 그려야함

 VM_CREATE: 윈도우가 처음 만들어짐

 VM_DESTORY: 윈도우가 메모리에서 파괴됨