MFC2010. 3. 9. 12:27

다이얼로그 베이스의 경우, ESC나 엔터 키를 누르면 프로그램이 종료되어버립니다.
엔터, ESC 등 키를 핸들링하는 법을 알아보겠습니다.

컨트롤+W를 눌러 클래스 위저드를 열고 PreTranslateMessage 메세지맵을 추가합니다.
그리고 아래와 같이 코딩합니다.

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message == WM_KEYDOWN){
        if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE){
            return TRUE;
        }

    return CDialog::PreTranslateMessage(pMsg);
}

그럼, 엔터키와 ESC 키를 눌렀을 때 아무런 동작도 하지 않습니다.
만일 특정한 동작을 추가하고 싶으면 return TRUE 앞에 해당 코드를 넣어주면 됩니다.
엔터와 ESC 뿐만 아니라 마우스 클릭 등 다른 메세지도 똑같은 방법으로 처리할 수 있습니다.
WM_LBUTTONDOWN, WM_RBUTTONDOWN 등이죠.
메세지 종류에 대한 자세한 내용은 MSDN 참조하시면 되겠습니다.


좀 더 응용할 수도 있습니다.
예를 들어 에디트박스에 포커스가 가 있을 때 엔터를 누르면 특정동작을 하고 싶다면,
    if(pMsg->message == WM_KEYDOWN && pMsg->hwnd == m_Edit1.m_hWnd){
//여기에 원하는 동작을 넣으세요.
return TRUE;
    }
이렇게 수정하면 됩니다.

Posted by 못생긴나무