본문 바로가기

Programming/WinAPI

메시지 루프 및 MSG 구조체

ㅁ 윈도우즈를 메시지 구동 시스템(Message Driven System)이라고 하며 이 점이 도스와 가장 뚜렷한
    대비를 이루는 윈도우즈의 특징이다

ㅁ GetMessage 함수는 읽은 메시지를 MSG형의 구조체에 대입해 주며
    이 구조체는 DispatchMessage 함수에 의해 응용 프로그램의 메시지 처리 함수(WndProc)로 전달된다.

ㅁ 윈도우즈 프로그램에서 메시지를 처리하는 부분을 메시지 루프라고 하며 보통
    WinMain 함수의 끝에 다음과 같은 형식으로 존재한다.

	while(GetMessage(&Message,0,0,0)) {
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
BOOL GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin,UINT wMsgFilterMax);
- 읽어들인 메시지는 첫번째 인수가 지정하는 MSG 구조체에 저장된다
- 이 함수는 읽어들인 메시지가 프로그램을 종료하라는 WM_QUIT일 경우 False를 리턴하며 그 외의 메시지이면
   True를 리턴한다

BOOL TranslateMessage( CONST MSG *lpMsg);
- 키보드 입력 메시지를 가공하여 프로그램에서 쉽게 쓸 수 있도록 해 준다

LONG DispatchMessage( CONST MSG *lpmsg);
- 시스템 메시지 큐에서 꺼낸 메시지를 프로그램의 메시지 처리 함수(WndProc)로 전달한다


WM_QUIT 프로그램을 끝낼 때 발생하는 메시지이다.
WM_LBUTTONDOWN 마우스의 좌측 버튼을 누를 경우 발생한다.
WM_CHAR 키보드로부터 문자가 입력될 때 발생한다
WM_PAINT 화면을 다시 그려야 할 필요가 있을 때 발생한다.
WM_DESTROY 윈도우가 메모리에서 파괴될 때 발생한다.
WM_CREATE 윈도우가 처음 만들어질 때 발생한다.


ㅁ MSG 구조체

typedef struct tagMSG
{
    HWND        hwnd;        //메시지를 받을 윈도우 핸들이다.
    UINT          message;   //어떤 종류의 메시지인가를 나타낸다. 가장 중요한 값이다
    WPARAM   wParam;    //전달된 메시지에 대한 부가적인 정보를 가진다(32bit)
    LPARAM    lParam;     //전달된 메시지에 대한 부가적인 정보를 가진다(32bit)
    DWORD      time;        //메시지가 발생한 시간이다.
    POINT        pt;           //메시지가 발생했을 때의 마우스 위치이다
} MSG;
반응형