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);
}
댓글