본문 바로가기
프로그래밍/Windows API

Dialog 에서 Esc, Enter Key로 종료 안되게

by 베리베리 2009. 7. 10.

Dialog 에서 Esc, Enter Key로 종료 안되게

출처 : 네이버 블로그 ( http://blog.naver.com/hoteye/120018807047 )


CDialog에는 디폴트 버튼이라는 것이 항상 존재하도록 만들어집니다.
그 디폴트 버튼이라는 것이 항상 VK_RETURN으로 입력되도록 메시지 처리가 이뤄지고 말이죠.
같은 방식으로 어느 컨트롤 위에서건 ESC키를 누르면 마찬가지로 다이알로그가 없어집니다.

항상 다이알로그는 Enter로는 OK를 ESC로는 Cancel을 처리하도록 되어있끼 때문이죠.

이 처리과정을 없애고 싶을경우 CDialog::PretranslateMessage에서 처리하면 됩니다.

방법 1.  OnOK() 를 오버라이딩 한다.
void CTestDlg::OnOK()
{
    // TODO: Add extra validation here
    // CDialog::OnOK();
    return;
}

방법 2. 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);
}

댓글