Programing/DirectX
메시지 루프
챠니쓰
2008. 5. 7. 14:59
윈도우즈가 도스와 가장 뚜렷한 대비를 이루는 특징이 바로 메시지 구동 시스템을 가지고 있는것이다.
이런저런 이야기를 뒤로 하고 얼릉 메시지 루프방식에 관해서 알아보도록 하자
위의 문장이 기본적인 메시지루프구조이다.
일단 위에 사용된 3개의 함수에 대하여 알아보자
1. BOOL GetMessage ()
: 이 함수는 메시지큐에서 메시지를 읽어들인다. 메시지큐는 시스템이나 사용자로부터 발생된 메시지가 잠시 대기하는 일종의 메시지 임시 저장 영역이다. 읽어들인 메시지는 첫번째 인수가 지정하는 MSG 구조체에 저장된다.
이 함수는 읽어들인 메시지가 프로그램을 종료하라는 WM_QUIT일경우 FALSE를 리턴하고 나머지는 TRUE를 리턴한다.
FALSE가 나타날때 까지 while문 루프가 계속 실행된다.
2. BOOL TranslateMessage()
: 이 함수는 키보드 입력 메시지를 가공하여 프로그램에서 쉽게 쓸 수 있도록 해 준다. TranslateMessage함수는 키보드가 눌려질때마다 문자가 입력되었다는 메시지(WM_CHAR)를 만드는 역활을 한다.
3. LONG DispatchMessage()
: 이 함수는 메시지큐에서 꺼낸 메시지를 윈도우의 메시지 처리 함수(WndProc)로 전달한다. 이 함수에 의해 메시지가 윈도우로 전달되며 프로그램에서는 전달된 메시지를 점검하여 다음 동작을 결정하게 된다.
전체적으로 메시지 루프에서는 메시지를 꺼내고, 형태를 바꾼 후 응용 프로그램으로 전달하는 것이다.
위의 3함수는 공통적으로 MSG라는 구조체를 사용한다. 이 구조체에는 메시지를 받을 윈도우 핸들, 전달할 메시지, 각종 부가정보, 발생시간, 마우스의 위치등의 정보를 가지고 있다.
이런저런 이야기를 뒤로 하고 얼릉 메시지 루프방식에 관해서 알아보도록 하자
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
위의 문장이 기본적인 메시지루프구조이다.
일단 위에 사용된 3개의 함수에 대하여 알아보자
1. BOOL GetMessage ()
: 이 함수는 메시지큐에서 메시지를 읽어들인다. 메시지큐는 시스템이나 사용자로부터 발생된 메시지가 잠시 대기하는 일종의 메시지 임시 저장 영역이다. 읽어들인 메시지는 첫번째 인수가 지정하는 MSG 구조체에 저장된다.
이 함수는 읽어들인 메시지가 프로그램을 종료하라는 WM_QUIT일경우 FALSE를 리턴하고 나머지는 TRUE를 리턴한다.
FALSE가 나타날때 까지 while문 루프가 계속 실행된다.
2. BOOL TranslateMessage()
: 이 함수는 키보드 입력 메시지를 가공하여 프로그램에서 쉽게 쓸 수 있도록 해 준다. TranslateMessage함수는 키보드가 눌려질때마다 문자가 입력되었다는 메시지(WM_CHAR)를 만드는 역활을 한다.
3. LONG DispatchMessage()
: 이 함수는 메시지큐에서 꺼낸 메시지를 윈도우의 메시지 처리 함수(WndProc)로 전달한다. 이 함수에 의해 메시지가 윈도우로 전달되며 프로그램에서는 전달된 메시지를 점검하여 다음 동작을 결정하게 된다.
전체적으로 메시지 루프에서는 메시지를 꺼내고, 형태를 바꾼 후 응용 프로그램으로 전달하는 것이다.
위의 3함수는 공통적으로 MSG라는 구조체를 사용한다. 이 구조체에는 메시지를 받을 윈도우 핸들, 전달할 메시지, 각종 부가정보, 발생시간, 마우스의 위치등의 정보를 가지고 있다.