2009. 2. 18. 22:24

GetCurrentMessage() - 메시지 핸들러에서 메시지 정보 가져오기


이 함수에 대해서, MSDN에 아래와 같이 나와 있다.

Returns a pointer to the message this window is currently processing. Should only be called when in an OnMessage message-handler member function.


MFC 에서 OnMessage 핸들러내에서 GetCurrentMessaeg() 를 호출하면 MSG 타입의 구조체를 얻을 수 있어 현재 처리중인 명령의 WPARAM과 LPARAM을 알 수 있다. 

아래는 이 함수를 사용한 MSDN 예제 중의 일부이다.

#define IDM_BLACK                       20

#define IDM_RED                         21

#define IDM_GREEN                       22

#define IDM_BLUE                        23

#define IDM_WHITE                       24

 

BEGIN_MESSAGE_MAP(CHelloWnd, CMDIChildWnd)

        //{{AFX_MSG_MAP(CHelloWnd)

        ON_COMMAND(IDM_BLACK, OnColor)

        ON_COMMAND(IDM_RED, OnColor)

        ON_COMMAND(IDM_GREEN, OnColor)

        ON_COMMAND(IDM_BLUE, OnColor)

        ON_COMMAND(IDM_WHITE, OnColor)

        //}}AFX_MSG_MAP

END_MESSAGE_MAP()

 

 

void CHelloWnd::OnColor()

{

        m_nIDColor = LOWORD(GetCurrentMessage()->wParam);

        m_clrText = colorArray[m_nIDColor - IDM_BLACK];

 

        // Force the client area text to be repainted in the new color

        Invalidate();

}


여기서 한가지 더, 같은 핸들러를 이용하여 같은 종류의 명령어를 처리하는 방법을 눈여겨 보자.