본문 바로가기
Education/대학 수업

PreTranslateMessage 함수

by ★용호★ 2010. 9. 9.

2010년 9월 9일 목요일


개요..

 

CWinThread::PreTranslateMessage 함수는 윈도우(CWnd)의 자식을 비롯하여 다양한 윈도우 메시지를 가로채서 처리하는 역할을 합니다.

 

PreTranslateMessage 함수를 재정의하여 메시지(Message, MSG) 를 처리한 이후에 리턴값을 어떻게 하는지 설명합니다.

 

 

설명

 

PreTranslateMessage함수를 재정의 하여,

 

- 더 이상 메시지가 처리되지 않기를 바란다면 1(0이 아닌값)을 리턴 합니다.

 

- 만일 메시지가 계속 처리하기를 원한다면 0을 리턴 합니다.

 

 

참고로 MFC CWnd 의 다음과 같은 코드를 보면 PreTranslateMessage 함수의 리턴값이 0 이 아니라면 더 이상 메시지를 Walk 하지 않습니다.

 

BOOL PASCAL CWnd::WalkPreTranslateTree(HWND hWndStop, MSG* pMsg)

{

    ASSERT(hWndStop == NULL || ::IsWindow(hWndStop));

    ASSERT(pMsg != NULL);

 

    // walk from the target window up to the hWndStop window checking

    // if any window wants to translate this message

 

    for (HWND hWnd = pMsg->hwnd; hWnd != NULL; hWnd = ::GetParent(hWnd))

    {

        CWnd* pWnd = CWnd::FromHandlePermanent(hWnd);

        if (pWnd != NULL)

        {

            // target window is a C++ window

            if (pWnd->PreTranslateMessage(pMsg))

                return TRUE; // trapped by target window (eg: accelerators)

        }

 

        // got to hWndStop window without interest

        if (hWnd == hWndStop)

            break;

    }

    return FALSE; // no special processing

}

 

 

함수 원형 및 MFC 설명

 

virtual BOOL PreTranslateMessage(

MSG *pMsg

);

 

Return Value

Nonzero if the message was fully processed in PreTranslateMessage and should not be processed further. Zero if the message should be processed in the normal way.


댓글