ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메시지 루프
    Programing/DirectX 2008. 5. 7. 14:59
    윈도우즈가 도스와 가장 뚜렷한 대비를 이루는 특징이 바로 메시지 구동 시스템을 가지고 있는것이다.
    이런저런 이야기를 뒤로 하고 얼릉 메시지 루프방식에 관해서 알아보도록 하자

    while( GetMessage( &msg, NULL, 0, 0 ) )
      {
       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라는 구조체를 사용한다. 이 구조체에는 메시지를 받을 윈도우 핸들, 전달할 메시지, 각종 부가정보, 발생시간, 마우스의 위치등의 정보를 가지고 있다.
Designed by Tistory.